安装工具链
首先需要安装交叉编译工具链,可以用apt安装riscv64的gcc编译工具链。我是自己编译了一个musl-gcc,下载:
https://github.com/DragonOS-Community/musl-cross-make/releases/tag/9.4.0-231114
然后解压到~/opt/cross/目录下,并且添加环境变量
编译uboot
去uboot的仓库下载uboot v2023.10,然后解压并编译:
代码语言:javascript复制make qemu-riscv64_smode_defconfig CC="riscv64-linux-musl-gcc"
make -j $(nproc) CC="riscv64-linux-musl-gcc" OBJCOPY=riscv64-linux-musl-objcopy STRIP=riscv64-linux-musl-strip RANLIB=riscv64-linux-musl-ranlib NM=riscv64-linux-musl-nm LD=riscv64-linux-musl-ld
然后当前目录下的”u-boot.bin”就是我们要的结果了。
测试运行:
代码语言:javascript复制qemu-system-riscv64 -nographic -machine virt -kernel u-boot.bin
编译grub
grub有两种方式去编译,一种是克隆仓库编译2.12版本,另一种是直接下载2.06的压缩包。
grub 2.12编译(克隆仓库的方式)
克隆仓库
代码语言:javascript复制git clone https://github.com/DragonOS-Community/grub
cd grub
git checkout grub-2.12-rc1
配置编译
代码语言:javascript复制sudo apt install -y gawk
ABS_PREFIX=/opt/dragonos-grub
PREFIX=${ABS_PREFIX}/arch/riscv64/efi/grub
./bootstrap
mkdir build
cd build
../configure --target=riscv64 --prefix=${PREFIX} --host=x86_64-linux-gnu --disable-werror --with-platform=efi BUILD_CC=gcc HOST_CC=x86_64-linux-gnu-gcc TARGET_CC=riscv64-linux-musl-gcc TARGET_OBJCOPY=riscv64-linux-musl-objcopy TARGET_STRIP=riscv64-linux-musl-strip TARGET_RANLIB=riscv64-linux-musl-ranlib TARGET_NM=riscv64-linux-musl-nm TARGET_LD=riscv64-linux-musl-ld
make -j $(nproc) && sudo make install