将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通知内核

 

 

上一篇:最近一次CentOS安装手记


下一篇:halcon-zoom_image_size将图像缩放到给定大小