[RISCV]3, 用u-boot来引导riscv-linux kernel

上面一篇文章说到了一个问题,就是我们虽然已经实现了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…

### 使用 `qemu-system-riscv64` 启动 QEMU RISC-V64 环境 #### 配置环境 为了成功启动基于 RISC-V64 的虚拟机,需先设置好工作目录以及必要的二进制文件。创建一个新的目录作为镜像存储位置,并复制所需的引导加载程序和其他必要组件到该目录下[^3]。 ```bash mkdir image && cd image cp /usr/share/u-boot-qemu-bin/qemu-riscv64_smode/uboot.elf . cp /usr/share/qemu/opensbi-riscv64-generic-fw_dynamic.bin . cd /home/dqib_riscv64-virt/debian_mirror_folder_path # 替换为实际路径 cp * /home/image/ ``` #### 安装 BusyBox (可选) 如果计划构建最小化根文件系统,则可以考虑安装 BusyBox 工具集来简化操作系统的初始化过程。对于特定架构版本的编译选项如下所示: ```bash make CROSS_COMPILE=riscv64-unknown-linux-gnu- install ``` 此步骤并非强制性的,但对于某些应用场景来说非常有用[^4]。 #### 启动命令示例 当一切准备就绪之后,可以通过下面这条命令行指令来运行 QEMU 并指定目标平台为 RISC-V64: ```bash export PATH=$PATH:/opt/qemu/bin qemu-system-riscv64 \ -machine virt \ -cpu rv64 \ -m 2048M \ -nographic \ -kernel uboot.elf \ -drive file=your_debian_image.img,format=raw,id=mydisk \ -device virtio-blk-device,drive=mydisk,bus=virtio-mmio-bus.0 \ --append "root=/dev/vda1 rw console=ttyS0" ``` 上述命令中的各个参数解释如下: - `-machine virt`: 设置机器类型为虚拟设备; - `-cpu rv64`: 明确指明使用的 CPU 类型; - `-m 2048M`: 分配给 VM 的内存大小; - `-nographic`: 不开启图形界面模式; - `-kernel uboot.elf`: 加载 U-Boot 引导加载器; - `-drive ...`: 挂载磁盘映像; - `-device ...`: 添加 VirtIO 块设备支持; - `--append "..."`: 向内核传递额外参数; 请注意,在执行这些命令之前,请确保已经正确设置了环境变量 `$PATH` 来指向包含 `qemu-system-riscv64` 可执行文件的位置[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山猫Show

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值