为riscv64编译uboot和grub

2023-11-20 08:31:07 浏览数 (1)

安装工具链

首先需要安装交叉编译工具链,可以用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

0 人点赞