bootm [kernel_addr] [initrd_address] [dtb_address],
其中kernel_addr為內(nèi)核鏡像的地址,initrd為initrd的地址,dtb_address為dtb所在的地址。若initrd_address為空,則用“-”來代替。
linux執(zhí)行內(nèi)核后,會(huì)運(yùn)行init進(jìn)程,掛載根文件系統(tǒng)(rootfs B)。
init進(jìn)程,是在哪里呢?也是在根文件系統(tǒng)(rootfs A)。
rootfs A和rootfs B之間關(guān)系呢?
kernel 2.6版之前,rootfs-A在initrd.img中。kernel先mount initrd.img,掛載rootfs-B,然后unmount 。
kernel2.6版及之后,rootfs-A在initramfs中。內(nèi)核啟動(dòng)時(shí),會(huì)對(duì)內(nèi)核文件中,.init.ramfs段中的數(shù)據(jù)進(jìn)行解壓,然后使用它作為臨時(shí)的根文件系統(tǒng)。
kernel 2.6 以來都是 initramfs 了,只是很多還沿襲傳統(tǒng)使用 initrd。
說明:
(initramfs和內(nèi)核編譯成一個(gè)文件(該initramfs是經(jīng)過gzip壓縮后的cpio格式的數(shù)據(jù)文件),該cpio格式的文件被鏈接進(jìn)了內(nèi)核中特殊的數(shù)據(jù)段.init.ramfs上,其中全局變量__initramfs_start和__initramfs_end分別指向這個(gè)數(shù)據(jù)段的起始地址和結(jié)束地址。)
initrd和initramfs區(qū)別如下:
1.制作方式
initrd制作時(shí)需要關(guān)聯(lián)loop back device,把它格式化為一個(gè)文件系統(tǒng)例如ext2,然后mount到你的host系統(tǒng),再把需要的文件復(fù)制進(jìn)去,而initramfs直接就是file system,一個(gè)cpio搞定。
2.空間占用
initrd在內(nèi)核啟動(dòng)引導(dǎo)完就釋放空間,而initramfs的空間在內(nèi)核解壓完畢是一直占用的。(需要代碼中,明確釋放。)
3.靈活性
initrd是基于某個(gè)文件系統(tǒng)固定大小,擴(kuò)充空間需要重新走流程;而initramfs就是簡(jiǎn)單打包,簡(jiǎn)單靈活。
聯(lián)系客服