qemu模拟u-boot引导内核难点记录

操作环境
物理机架构:x86_64
物理机系统:windows7
VMware虚拟机架构:x86_64
VMware虚拟机系统:ubuntu22.04
qemu模拟器:qemu-system-arm
介绍:在VMware虚拟机(ubuntu22.04)中交叉编译arm版本的u-boot2021.01-rc4、linux5.10.153、busybox1.33.0、qemu5.2.0-rc4,并使用qemu模拟启动u-boot、linux内核。

1 编译u-boot、linux内核、busybox简易文件系统

编译参考链接:https://blog.csdn.net/m0_46205725/article/details/117301262

2 遇到的问题及解决方案

2.1 qemu-system-arm模拟启动linux内核和busybox遇到的错误

执行如下命令启动linux内核和busybox文件系统

qemu-system-arm -M vexpress-a9 -m 512M -dtb vexpress-v2p-ca9.dtb -kernel zImage -nographic --append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd initrd.img

1 报第1个错大致如下:

[3.14325312]kernel panic:
can not mount ext filesystem
can not mount VFS
...
[3.15845645]kernel panic

解决方案:因为initrd.img文件是使用mkfs.ext4进行格式化,因此重新编译linux内核,并开启配置项CONFIG_EXT4_FS=y。

2 解决第1错后,又报错如下:

Kernel panic - not syncing: No working init found

解决方案:查了半天,发现initrd.img文件里没有放busybox文件系统,自然也就没有init程序。格式化initrd.img文件后挂载到/mnt,然后将busybox的文件都复制到/mnt,然后卸载。

2.2 qemu-system-arm模拟启动u-boot时的错误

执行如下命令启动u-boot时

qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot -nographic -net nic -net nic,vlan=0 -net tap,vlan=0,ifname=tap -sd initrd.img

1 报第1个错如下:

qemu-system-armvlan,invalid argument.

解决方案
参考链接https://blog.csdn.net/birencs/article/details/126666827
增加tap0虚拟网卡后,改成如下命令

qemu-system-arm -M vexpress-a9 -m 512M -kernel u-boot -nographic -net nic -net tap,ifname=tap0,script=no,downscript=no -sd initrd.img

在u-boot中使用bootm命令引导linux内核和dtb设备树时
2 报第2个错如下:
参考链接https://blog.csdn.net/u014426028/article/details/108221255

=> can not recovery resverve memory

解决方案:明确内核加载地址和入口地址以及u-boot中tftp下载地址。在u-boot中使用bdinfo命令查看内存范围如下图,正好是qemu-system-arm设置的512M
在这里插入图片描述
因此,使用u-boot源码目录下tool/mkimage重新制作uImage,设置内核加载地址和入口地址如下图。
在这里插入图片描述
在u-boot中使用bootm命令引导linux内核和dtb设备树时
3 第三个问题,卡在Starting kernel… 。如下图
在这里插入图片描述
解决方案:参考链接https://www.jianshu.com/p/f7d5b6ad0710
在u-boot中设置变量,增加boot参数console

=>setenv bootargs 'root=/dev/mmcblk0 rw console=ttyAMA0'

流程都没毛病!神伤良久!
总结:qemu参数-sd initrd.img实际就是u-boot中的emmc设备。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值