FreeBSD有完整的代码树,里面包括内核和支持系统管理的各种工具,也包括一些基础库和编译器。构建FreeBSD代码树,一般需要四步,分别是 buildworld,installworld,buildkernel,installkernel。world相当于GNU构建里面的基本系统+工具链,kernel基本相同,构建内核和模块。
所以在X86系统上着手移植LoongArch,大致上要经历4个阶段:
第一阶段:给构建框架添加LoongArch的支持,可以参考riscv的实现,修改相关的Makefile,mk文件。进而添加交叉工具链的支持,导入llvm的补丁。因为FreeBSD源代码树已经完成了clang&llvm构建的支持,所以llvm调通可以作为第一阶段的结束。
第二阶段:让buildworld顺利编译,只要llvm可用,基本系统需要添加LoongArch支持的代码量不大,难点在构建过程中排错。这个阶段也需要把qemu-user-loongarch 调通,用以验证FreeBSD world可以运行。
第三阶段:参考linux内核实现,添加LoongArch架构的基础代码,构建出最小内核,这阶段也需要移植7A1000桥片的驱动,也要能够运行 qemu-system-loongarch,对内核移植进行验证。
第四阶段:使用FreeBSD代码树中的release组件,引入系统引导、edk2支持,可以制作出可引导的FreeBSD镜像,在3A5000机器上做实机验证,进而利用bsdinstall,安装最小系统。