ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

将rootfs制作成ramdisk供linux kernel加载

2021-05-20 12:32:57  阅读:359  来源: 互联网

标签:ramdisk kernel sudo 文件系统 initrd linux rootfs


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

 

 

标签:ramdisk,kernel,sudo,文件系统,initrd,linux,rootfs
来源: https://www.cnblogs.com/ethandlwang/p/14789339.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有