分享

OS linux - uboot 引导 kernel

 看见就非常 2022-03-14

bootm [kernel_addr] [initrd_address] [dtb_address],

其中kernel_addr为内核镜像的地址,initrd为initrd的地址,dtb_address为dtb所在的地址。若initrd_address为空,则用“-”来代替。

 

linux执行内核后,会运行init进程,挂载根文件系统(rootfs B)。

init进程,是在哪里呢?也是在根文件系统(rootfs A)。

rootfs A和rootfs B之间关系呢?

kernel 2.6版之前,rootfs-A在initrd.img中。kernel先mount initrd.img,挂载rootfs-B,然后unmount 。

kernel2.6版及之后,rootfs-A在initramfs中。内核启动时,会对内核文件中,.init.ramfs段中的数据进行解压,然后使用它作为临时的根文件系统。

kernel 2.6 以来都是 initramfs 了,只是很多还沿袭传统使用 initrd。

 

 

说明:

(initramfs和内核编译成一个文件(该initramfs是经过gzip压缩后的cpio格式的数据文件),该cpio格式的文件被链接进了内核中特殊的数据段.init.ramfs上,其中全局变量__initramfs_start和__initramfs_end分别指向这个数据段的起始地址和结束地址。)

 

initrd和initramfs区别如下:
1.制作方式
initrd制作时需要关联loop back device,把它格式化为一个文件系统例如ext2,然后mount到你的host系统,再把需要的文件复制进去,而initramfs直接就是file system,一个cpio搞定。
2.空间占用
initrd在内核启动引导完就释放空间,而initramfs的空间在内核解压完毕是一直占用的。(需要代码中,明确释放。)
3.灵活性
initrd是基于某个文件系统固定大小,扩充空间需要重新走流程;而initramfs就是简单打包,简单灵活。


  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多