qemu交叉编译arm内核_使用Qemu仿真内核(3)——继续讨论initramfs

这一篇中先不讨论用BusyBox制作根文件系统,继续讨论上一篇的initramfs。上节末尾的问题很简单,百度很多,或者早期linux源码中有答案。

对于上篇中的内存磁盘虚拟文件系统中的可执行文件init,如果我们现在启动文件名不为init,而是其他的名字,事实上虚拟磁盘文件的作用也不是用于执行init程序,而是里面放一些驱动程序,用于在挂载真正的根文件系统前,做好硬件环境的初始化工作。如下图,可执行文件名为RobotCodeInit,我们重新打包:

512bc8ccc96ddd3004584b25edc00739.png

如上图,在Qemu中直接命令行通过指定-initrd时,可执行文件并不能被执行。因为内核默认的内存磁盘文件系统的可执行文件名为init,所以需要另一个Qemu的命令行参数,-append,此选项的作用是内核启动时,传入内核参数,可以将内核也看作为一个函数,指定内核参数,相当于传入了函数参数,此内核参数会控制内核的一些行为,如下图,在内核参数里不指定可执行文件名为RobotCodeInit时,此时会报错:

515ce005040f81ece00e1d4b70d8983f.png

我们指定内核参数选项后, qemu-system-arm -M versatileab -kernel ./arch/arm/boot/zImage -m 128M -nographic -dtb ./arch/arm/boot/dts/versatile-ab.dtb -initrd ./yyc/demo_initrd.img -append "rdinit=/RobotCodeInit",如下图:

4f9e02ff9ef735063f8cfb9e2118a027.png

通过-append参数传入内核参数后,指定执行文件为RobotCodeInit,如下图,成功输出了预期结果:

faace86e83178cb0dab72aed94e47e27.png

--未完待续

欢迎关注下方的微信公众号,一起交流学习:)

382573140e021475aa37988eab6d86aa.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值