# Lrix
**Repository Path**: lrisguan/Lrix
## Basic Information
- **Project Name**: Lrix
- **Description**: A scratch implemention of OS based on RISC-V
- **Primary Language**: C
- **License**: GPL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-28
- **Last Updated**: 2026-05-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Lrix
English | 中文
## 📌 简介
这是一个基于 [RISC-V](https://riscv.org) 从零开始实现的操作系统。
关于 Lrix 的细节,你可以参见 [Report](./assets/LrixReport.pdf) or [报告](./assets/LrixReport-ZhCN.pdf).
> [!Caution]
> 当你查看 PDF 文件时,如果遇到类似以下问题:
> `无法渲染代码块`,你可以前往 [这里](https://github.com/orgs/community/discussions/64419)
> 获取一些帮助,但可能不一定有效。有点奇怪,有时在我那台老旧的电脑上,它能够正常渲染,但只是偶尔。但在我的手机上,一切都能正常工作。
## 👀 演示
https://github.com/user-attachments/assets/a500f8f4-6f2b-42ed-9ab6-f23aaa7f8497
## 🚀 快速开始
> [!Tip]
> 这是使用 Docker 运行本项目的快速入门指南,但仅适用于架构为 **amd64** 的 **Linux** 系统。
> 如果您使用的是其他系统或架构,请参考 [构建 Docker 镜像](crbuild.zh-CN.md)。
> ```bash
> docker pull lrisguan/lrix:latest
> # 如果您在中国国内,建议运行下面这条被注释的命令
> # docker pull crpi-8xusg4og4floyq5u.cn-hangzhou.personal.cr.aliyuncs.com/lrisguan/lrix:latest
> docker run -d --name lrix lrix:latest bash
> ```
> 之后您可以参考 [About](#about) 和 [Run](#run) 部分,从而免去漫长的编译过程。
> [!NOTE]
> 不使用实际上是慢速开始。
>
> 如果你已经安装了 **riscv 工具链** 和 **qemu**(版本可能需高于5),可以直接跳转到[运行](#运行)
>
> 如果没有,请遵循以下步骤
运行本项目需要以下环境:
### 依赖项
- **RISC-V 工具链**
用于编译 C 程序。
#### 安装步骤
> [!WARNING]
> git clone 大约需要 6.65 GB 的磁盘空间和下载量
##### 前置条件
- **Ubuntu/Debian** 系统
> 若你使用的是 Ubuntu 系统,也可通过[此链接](https://github.com/riscv-collab/riscv-gnu-toolchain/releases/tag/2026.01.09)下载预编译的 RISC-V 工具链。
```bash
sudo apt-get install autoconf automake autotools-dev curl python3 python3-pip python3-tomli libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev
```
- **Fedora/CentOS/RHEL** 系统
```bash
sudo yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel gawk bison flex texinfo patchutils gcc gcc-c++ zlib-devel expat-devel libslirp-devel
```
- **Arch Linux** 系统
```bash
sudo pacman -Syu curl python3 libmpc mpfr gmp base-devel texinfo gperf patchutils bc zlib expat libslirp
```
##### 安装步骤
```bash
git clone https://github.com/riscv/riscv-gnu-toolchain.git
./configure --prefix=/opt/riscv
make -j$(nproc)
echo 'export PATH="/opt/riscv/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
```
然后可以执行命令:
```bash
riscv64-unknown-elf-gcc --version
```
验证工具链是否安装成功。
- **qemu-system-riscv**
用于创建 RISC-V 虚拟机。
> **提示**
> 若你的 Ubuntu 系统版本为 22.04或更高,直接执行以下命令即可:
> ```bash
> sudo apt install qemu-system-riscv64
> ```
#### 安装步骤
##### 从预编译包安装
- **Ubuntu/Debian** 系统
```bash
sudo apt install qemu qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
sudo systemctl enable --now libvirtd
```
- **Fedora/CentOS/RHEL** 系统
```bash
sudo yum install -y qemu-kvm libvirt libvirt-python libguestfs-tools virt-install virt-manager
# 或者
sudo dnf install -y qemu-kvm libvirt libvirt-client virt-install virt-manager virt-top libguestfs-tools virt-viewer
# 然后
sudo systemctl enable --now libvirtd
```
- **Arch Linux** 系统
```bash
sudo pacman -S qemu-full qemu-img libvirt virt-install virt-manager virt-viewer edk2-ovmf dnsmasq swtpm guestfs-tools libosinfo tuned
sudo systemctl enable --now libvirtd
```
##### 从源码安装
> [!TIP]
> 如果从源码安装 qemu,可能需要较高版本的 **glibc**。我编译时,最低版本为 **2.35**。考虑到 **glibc** 是非常重要的系统依赖,我建议在 docker 中编译 **qemu**。可参考下面的 **docker(可选)** 部分。
```bash
git clone https://github.com/qemu/qemu.git
cd qemu
mkdir build
cd build
../configure
make -j$(nproc)
sudo make install
```
然后可以测试
```bash
qemu-system-riscv64 --version
```
- **docker(可选)** 用于编译 qemu 所需的更高版本 **glibc**
> 仅当你从源码编译 **最新版 qemu** 时,才可能需要安装 docker 以获取更高版本的 **glibc**
> [!IMPORTANT]
> 请确保你的操作系统具有较高版本的 **glibc**,然后再继续阅读以下内容
编译步骤
```bash
docker pull `os`:latest
docker run -d --name osdev `os`:latest bash
# 如果你在宿主机上编译了 riscv-toolchain
# 可能需要添加更多参数来启动
# docker 容器。
# 可以这样启动:
# docker run -d -name osdev `os`:latest -v /opt/riscv:/opt/riscv bash
# 然后进入具有更高 glibc 版本的容器
# 即可编译最新版 qemu
git clone https://github.com/qemu/qemu.git
cd qemu
mkdir build
cd build
../configure
make -j$(nproc)
sudo make install
```
然后可以测试
```bash
qemu-system-riscv64 --version
```
### 关于
[Makefile](./Makefile) 的编译标志:
### 1. Lrix 顶层构建参数
| 变量名 | 说明 |
|---------------|-----------------------------------------------------------------------------|
| KDIR | 内核目录,固定值:`kernel` |
| UDIR | 用户程序目录,固定值:`usr` |
| KIMG | 内核二进制文件路径,固定值:`kernel/build/kernel.bin` |
| FS_DEBUG | 文件系统调试日志开关:
0 = 禁用;1 = 启用(默认 0) |
| VIRTIO | VirtIO 模式选择:
1 = 传统模式;2 = 现代模式(默认 1) |
| TRAP_DEBUG | 陷阱调试:
0=禁用;1=启用(默认 0) |
### 2. 常用构建命令
| 命令 | 说明 |
|---------------|---------------------------------------------------------------------------|
| make | 等同于 `make kernel`,构建内核 + 用户程序 |
| make run | 构建操作系统镜像并通过 QEMU 启动 |
| make clean | 清理内核构建过程中生成的输出文件 |
| make info | 显示此帮助信息 + 内核子 Makefile 详情 |
### 3. 命令示例
| 示例命令 | 说明 |
|---------------------------------------|---------------------------------------------------|
| make FS_DEBUG=1 VIRTIO=1 run | 启用文件系统调试日志,使用传统 VirtIO 模式 |
| make FS_DEBUG=0 VIRTIO=2 run | 禁用文件系统调试日志,使用现代 VirtIO 模式 |
| make TRAP_DEBUG=1 run | 启用陷入调试日志 |
### 运行
> [!WARNING]
> 使用 `VIRTIO=2` 标志需要 qemu 版本高于 5。
> 我实际上没有测试过支持的最低 qemu 版本,如果你在更低版本的 qemu 上运行成功,请告诉我。谢谢!
> 开发时我使用的 **qemu** 版本为 **9.2**。
> 事实上,经过测试,**6.2.0**版本即可。对于 Ubuntu 22.04,你只需要安装系统 qemu。
```bash
git clone https://github.com/lrisguan/lrix.git
cd lrix
# 执行 `make info` 查看标志和帮助信息。
# 运行操作系统:
make run # VIRTIO=1, FS_DEBUG=0, TRAP_DEBUG=0
# 或者直接运行脚本来启动系统
./run.sh
```
> [!TIP]
> `make run` 会自动为你生成 disk.img。
> `make clean` 仅删除目标文件,不会删除 disk.img。
> 因此,如果你想更好地控制是否删除或创建 disk.img,
> 可以使用 [run.sh](./run.sh) 在交互式环境中进行控制。
## *参考*
实现本项目时,我参考了 *[xv6-riscv](https://github.com/mit-pdos/xv6-riscv)*
## 许可证
[GPLv2.0](./License)