上面一篇文章说到了一个问题,就是我们虽然已经实现了qemu在不使用busybear的情况下启动kernel进shell,但是我们还是受制于bbl,虽然bbl也是开源的但是我们更习惯于u-boot来引导kernel,所以这篇就是来解决这个问题,用u-boot引导kernel。
1, 下载u-boot的最新源码
git clone https://gitee.com/mirrors/u-boot.git
切到最新的版本
git checkout v2020.04-rc3
2, 编译
最新版本的u-boot自带了qemu-riscv相关的一些defconfig

make qemu-riscv64_defconfig
export ARCH="riscv"
export CONFIG_REMAKE_ELF="n"
export CROSS_COMPILE="riscv64-unknown-linux-gnu-"
export V="0"
make all -j8 V=0
编译成功

3, 启动
sudo qemu-system-riscv64 -nographic -machine virt \
-kernel u-boot/u-boot \
-drive file=linux/arch/riscv/boot/Image,format=raw,id=hd0 \
-drive file=qemu_rootfs.img,format=raw,id=hd1\
-append "root=/dev/vda rootfstype=ext4 rw console=ttyS0" \
-device virtio-blk-device,drive=hd1
这里出现error, 不能继续引导kernel

这里的错误提示是
Device 0: QEMU VirtIO Block Device
Type: Hard Disk
Capacity: 6.9 MB = 0.0 GB (14228 x 512)
... is now current device
** No partition table - virtio 0 **
这是因为没有找到启动的设备,uboot有这么几种启动设备

下一步就是我们要dd一个dev模拟上面的启动介质。
虽然现在还没能引导kernel,但是Uboot已经可以正常跑了,我们可以在此基础上学习基于RISCV的Uboot.
========> To Be Continue…
本文详细介绍了如何从源码下载、编译U-Boot至引导RISC-V内核的过程,虽遇到启动设备识别的问题,但已实现U-Boot在RISC-V平台上的运行,为后续深入研究打下基础。
449





