linux2.6 内核支持两种格式的 initrd(虚拟文件系统),一种是 linux2.4 内核那种传统格式的文件系统镜像 image-initrd,其核心文件就是 /linuxrc.

另外一种格式的 initrd 是 cpio 格式的,这种格式的 initrd 使用 cpio 工具生成,其核心文件不再是 /linuxrc,而是 /init,本文将这种 initrd 称为 cpio-initrd。尽管 linux2.6 内核对 cpio-initrd和 image-initrd 这两种格式的 initrd 均支持,但对其处理流程有着显著的区别。

  cpio命令有三种操作模式:copy-out、copy-in、copy-pass,生成 ramdisk.img 用的是它的copy-out模式,即把文件打包的操作模式。cpio的copy-out操作模式使用 -o 命令行选项指定。

  把~/root目录下的文件打包成image.cpio.gz,执行下面的命令:

cd ~/root

  find . | cpio -o -Hnewc |gzip -9 > ../image.cpio.gz

  命令执行完毕后,在~/root 目录下就会生成文件名为imgae.cpio.gz的init ramfs。

解释 上边的 命令:

上边的 find . 就是 把 ~/root/ 下的 所有 文件 列一个表,

  上面 cpio命令的 -H 选项指定打包文件的具体格式,要生成init ramfs,只能用newc 格式 ,

-----------------------------

ramdisk.img(虚拟文件系统)在android中的使用

ramdisk中包含一些对于启动android的很重要的文件,比如 内核启动完后加载的第一个进程用户init ,一些重要的 配置文件 等,总之它控制着整个android的启动.

ramdisk的使用有两种方法:1,编译进内核; 2,将ramdisk单独烧写

1,编译进内核
将 ramdisk解压,可以看到它里面有很多文件和目录, 如:data,dev,proc, sbin ,sys,system,default.prop,init,init.rc等,有点像板子跑起来的根目录. 将解压出来的文件夹重命名为root,放到linux内核代码的根目录下,并用make menuconfig配置启动这个root文件夹,配置保存后会生成如下项:
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="root"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
这些也可以直接在xxxx_defconfig改,然后make xxxx_defconfig使其生效.

这样做了以后,root将被编译进zImage,并随之一起烧进板子.

2,将ramdisk单独烧写

也 可以将ramdisk作为一个单独的包烧写,就烧在zImage的后面.假如zImage烧在0x600000,那么ramdisk就烧在 0x800000就好.值得注意的是,ramdisk在烧写之前要进行一次转换.因为bootloader在运行的时候,会将ramdisk从FLASH 加载到RAM中,它会把FLASH上0x800000-0x880000的空间作为ramdisk读取,并检查其最后四个字节,这四个字节保存的是 ramdisk.img的实际大小.所以我们要做的转换工作就是把原来的ramdisk.img(100多字节)转换成512字节,并在其最后四个字节写 ramdisk.img的实际长度。

--------------------------

解压、修改Android的ramdisk.img的手动方法:

将ramdisk.img复制一份到任何其他目录下,将其名称改为ramdisk.img.gz,

mv ramdisk.img ramdisk.img.gz
    gunzip ramdisk.img.gz
注意:这里之所以进行改名,是因为ramdisk.img 是经过gzip压缩过的,所以需要对其解压,但是gzip对解压的文件的文件后缀名又有要求,所以就先进行改名。

然后新建一个文件夹,叫ramdisktwo吧,进入,输入命令

cd ramdisktwo
    cpio -i -F ../ramdisk.img

或者   cpio  -i -d  < ../ramdisk.img

这下,你就能看见并操作ramdisk里面的内容了。

根据自己的需要对里面的内容修改之后,可以使用下列命令重新打包成镜像

cpio -i -t -F ../ramdisk.img > list

从 ../ramdisk.img 文件里 提取 文件名,包含递归,然后 重定向 到 list  文件里。

cpio -o -H newc -O lk.img < list 

把 当前目录下的文件(在list里的文件)打包成一个归档文件, 在当前目录下生成的lk.img就是我们的新镜像了。

---------------------------------------------------

制作 ramdisk.img,使用cpio 和 gzip相关推荐

  1. QT210 自制bootloader 移植kernel3.4.2 制作ramdisk busybox1.20.2

    使用自制bootloader(移植uboot的usb的dnw功能) 移植kernel3.4.2 紧能够正常启动,还没有移植驱动 静态编译busybox1.20.2制作ramdisk 通过bootloa ...

  2. linux ramdisk 工具,Linux下用Busy Box制作Ramdisk全过程(转帖+部分完善) - 薛正华的专栏 - CSDN博客.pdf...

    Linux下用BusyBox制作Ramdisk全过程(转帖部分完善)-薛正华的专栏-CSDN博客 Linux下用Busy Box制作Ramdisk全过程(转帖+部分完善) 收藏 /software_z ...

  3. linux 制作ramdisk镜像,制作ramdisk文件系统

    http://blog.163.com/qiu_zhi2008/blog/static/6014097720108852750530/ http://tech.ccidnet.com/art/302/ ...

  4. 使用genext2fs制作ramdisk

    linux 默认并没有自带这个工具,需要下载,项目地址:http://sourceforge.net/projects/genext2fs/files/genext2fs/  最新版为genext2f ...

  5. linux PE制作ramdisk,PE怎样在中建立一个Ramdisk盘

    在WinPE中如何多建立一个Ramdisk盘 解开winpe.is_,得到winpe.iso,然后提取setupreg.hiv,用注册表编辑器加载到HKEY_LOCAL_MACHINE下,取名为!sy ...

  6. Ramdisk文件系统的制作与调试运行

    开发环境:Fedora 9 交叉编译工具链:arm-linux-gcc 4.3.2 with EABI 嵌入式Linux内核版本:2.6.29.4-FriendlyARM.昨天写贴子的时候具体记不清了 ...

  7. ramdisk文件系统的介绍与制作

    一.文件系统与根文件系统     1.文件系统         文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)分区上的文件的存储方法和数据结构,即在存储设备 ...

  8. 未解决:自行打包cpio格式的Ramdisk,与编译成功生成的kernel.bin,deviceTree一起打包成image.ub,不能正常启动kernel的问题???

    使用开发板Z-turn Board,编译工具Petalinux,启动kernel相关打印: 非正常启动kernel: ## Loading kernel from FIT Image at 01000 ...

  9. ramdisk介绍与制作

    转自:http://m.blog.csdn.net/silent123go/article/details/52642841 一.文件系统与根文件系统 1.文件系统         文件系统是操作系统 ...

最新文章

  1. 统一沟通成本节约数据表
  2. ajax csrf php,Laravel中Ajax调用时的CSRF对策
  3. spring + hibernate
  4. ACM数论之旅2---快速幂,快速求a^b
  5. import cv2时ImportError: libjasper.so.1: cannot open shared object file: No such file or directory
  6. Android studio中的NDK开发之NDK环境变量的配置(图文教程)
  7. 头条 上传图片大小_【标签头条】北京市启用进口冷链食品追溯平台;全球包裹热潮助推标签业发展;数字水印实现大规模垃圾分类;安慕希的麻将酸奶包装好真实...
  8. Unix系统编程():分散输入和集中输出(Scatter-Gather IO):readv和writev
  9. 编写高质量JavaScript代码绳之以法(The Essentials of Writing High Quality JavaScript)翻译...
  10. dedecms 判断是否有值然后显示
  11. csgo自建局域网服务器,csgo怎么创建局域网游戏
  12. MC9S中断函数编写
  13. python透视表画图_Python Pivot table透视表使用方法解析
  14. mysql delete in死锁_delete where in导致的死锁问题
  15. UG模具设计之汽车特斯拉车灯与后备箱规律边境构建技巧
  16. 1药网母公司路演PPT曝光:发行区间14到16美元 中旬上市
  17. 《计算机组成原理》复习第七章—外围设备
  18. linux能用airport吗_如何设置AppleAirPort无线路由器
  19. proteus学习教程大全
  20. 自动化运维平台功能大纲

热门文章

  1. MySQL中的行级锁,表级锁,页级锁
  2. 入职三天,公司给了100块钱叫我走人
  3. Git冲突:commit your changes or stash them before you can merge.
  4. 模拟四:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 自我解题笔记
  5. Android --- android.view.InflateException: Binary XML file line #7: Binary XML file lin... 类似问题的解决办法
  6. java 常用的api_Java中常用的API(一)——Object
  7. linux如何根据端口看进程,linux 根据端口查看系统进程
  8. 盘点:弱电施工过程中的电线电缆36计
  9. 数据中心、云计算、大数据之间的区别与联系
  10. ML之4PolyR:利用四次多项式回归4PolyR模型+两种正则化(Lasso/Ridge)在披萨数据集上拟合(train)、价格回归预测(test)