基于 zircon 并提供 Linux 兼容性的操作系统内核。
- An English README
- 原版 README
关于设置 docker、构建图形应用等操作可能需要查询原版 README,但其中很多脚本都废弃了
- 构建系统更新日志
- 开发者注意事项(草案)
项目构建采用 xtask 模式,常用操作被封装成 cargo 命令,再通过 Makefile 提供 make 调用,以兼容一些旧脚本。
开发者和用户可以按以下步骤设置 zCore 项目。
-
先决条件
目前已测试的开发环境包括 Ubuntu20.04、Ubuntu22.04 和 Debian11, Ubuntu22.04 不能正确编译 x86_64 的 libc 测试。 若不需要烧写到物理硬件,使用 WSL2 或其他虚拟机的操作与真机并无不同之处。
在开始之前,确保你的计算机上安装了 git 和 rustup。要在虚拟环境开发或测试,需要 QEMU。
-
克隆项目
git clone https://github.com/rcore-os/zCore.git
NOTICE 此处不必递归,因为后续步骤会自动拉取子项目
-
初始化存储库
cargo initialize
-
保持更新
cargo update-all
-
探索更多操作
cargo xtask
如果下面的命令描述与行为不符,或怀疑此文档更新不及时,亦可直接查看内联文档。
如果发现 error: no such subcommand: ...
,查看命令简写为哪些命令设置了别名。
NOTICE 内联文档也是中英双语
- dump
打印构建信息。
cargo dump
- initialize
初始化项目。安装 zircon 模式所需的二进制文件,并更新子项目。
cargo initialize
- update-all
更新工具链、依赖和子项目。
cargo update-all
- check-style
静态检查。设置多种编译选项,检查代码能否编译。
cargo check-style
- asm
反汇并保存编指定架构的内核。默认保存到 target/zcore.asm
。
cargo asm --arch riscv64 --output riscv64.asm
- bin
生成内核 raw 镜像到指定位置。默认输出到 target/{arch}/release/zcore.bin
。
cargo bin --arch riscv64 --output zcore.bin
- qemu
在 qemu 中启动 zCore。这需要 qemu 已经安装好了。
cargo qemu --arch riscv64 --smp 4
支持将 qemu 连接到 gdb:
cargo qemu --arch riscv64 --smp 4 --gdb 1234
- gdb
启动 gdb 并连接到指定端口。
cargo gdb --arch riscv64 --port 1234
- rootfs
重建 Linux rootfs。这个命令会清除已有的为此架构构造的 rootfs 目录,重建最小的 rootfs。
cargo rootfs --arch riscv64
- musl-libs
将 musl 动态库拷贝到 rootfs 目录对应位置。
cargo musl-libs --arch riscv64
- ffmpeg
将 ffmpeg 动态库拷贝到 rootfs 目录对应位置。
cargo ffmpeg --arch riscv64
- opencv
将 opencv 动态库拷贝到 rootfs 目录对应位置。如果 ffmpeg 已经放好了,opencv 将会编译出包含 ffmepg 支持的版本。
cargo opencv --arch riscv64
- libc-test
将 libc 测试集拷贝到 rootfs 目录对应位置。
cargo libc-test --arch riscv64
- other-test
将其他测试集拷贝到 rootfs 目录对应位置。
cargo other-test --arch riscv64
- image
构造 Linux rootfs 镜像文件。
cargo image --arch riscv64
- linux-libos
在 linux libos 模式下启动 zCore 并执行位于指定路径的应用程序。
NOTICE libos 模式只能执行单个应用程序,完成就会退出。
# 例如"/bin/busybox ls"
cargo linux-libos --args "/bin/busybox"
使用以下命令构造系统镜像:
cargo bin --arch riscv64 --features "linux board-d1 link-user-img" --output z.bin
然后使用 rustsbi-d1 将镜像部署到 Flash 或 DRAM。