构建内核
构建分两步:cargo 产出 ELF,然后把它压平成一个连续镜像。第二步存在的原因值得说明——它不是习惯,而是因为 -kernel 路径需要一个可被直接映射的连续映像,而链接产物带有节区对齐与间隙。
cd kernel
cargo build --release
python tools/flatten_elf.py \
kernel/target/x86_64-unknown-none/release/fujo-kernel \
kernel/fujo-kernel.bin --pad 0x1C0000
产物
| 文件 | 说明 |
|---|---|
| kernel/target/x86_64-unknown-none/release/fujo-kernel | 链接器直接产出的 ELF64,带节区与对齐信息。 |
| kernel/fujo-kernel.bin | 压平后的连续镜像,--pad 补齐到固定大小,供 -kernel 直接加载。 |
内核内部还有一套工具链
上面构建的是内核。有趣的是内核自己也带一套编译器:汇编器 → 链接器 → C 子集编译器(fujocc),全链产出 ELF64,它已经构建并运行过自己的 hello。那是 W16 的自举“毕业考试”,和这里的宿主构建是两件不同的事。