將rootfs制作成ramdisk供linux kernel加載


linux kernel version :4.4.38

hardware :exynos4412-tiny4412

起因:我將linux kernel從3.5升級到4.4后,發現之前的方法掛載rootfs行不通了(之前是將rootfs放在了SD卡的分區),linux kernel無法發現rootfs導致系統無法啟動(懷疑4.4內核啟動順序,掛載rootfs前sd卡驅動還沒有驅動導致無法發現rootfs對應的分區),於是嘗試ramdisk的方式掛載。

之前有博客介紹了最小rootfs的制作方法(https://www.cnblogs.com/ethandlwang/p/14789266.html),這里拿來用

創建一個目錄my_rootfs(根據自己需要命名),將最小rootfs目錄放在這個目錄下

以下命令都在my_rootfs下執行

sudo dd if=/dev/zero of=ramdisk bs=1k count=8192

生成一個叫ramdisk的空文件,大小為8M

sudo mkfs.ext4 -F ramdisk

將其初始化為ext4文件系統格式

sudo mkdir -p ./initrd
sudo mount -t ext4 ramdisk ./initrd

創建initrd文件夾,將ramdisk的文件系統掛載到initrd

sudo cp rootfs/* ./initrd -raf

將最小文件系統里面的所有文件拷貝到ramdisk文件系統

sudo mknod initrd/dev/console c 5 1
sudo mknod initrd/dev/null c 1 3

創建必要的字符設備

sudo umount ./initrd

卸載文件系統

sudo gzip --best -c ramdisk > ramdisk.gz

壓縮並打包成ramdisk.gz

sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

最后使用mkimage命令生成ramdisk.img即為我們需要的ramdisk文件系統。

 

bootargs=root=/dev/ram0 rw ramdisk=8192 initrd=0x42000040,8M console=ttySAC0,115200 init=/linuxrc mem=1024M

在uboot里面使用bootargs參數將rootfs信息傳遞給kernel

bootcmd=movi read kernel 0 40600000; movi read rootfs 0 42000000 800000; movi read dtb 0 43000000; bootm 40600000 42000000 43000000

uboot使用bootcmd將rootfs讀入內存,並將地址通過bootm通知內核

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM