博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
制作 ramdisk.img,使用cpio 和 gzip
阅读量:4039 次
发布时间:2019-05-24

本文共 2178 字,大约阅读时间需要 7 分钟。

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

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

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

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

        cd ~/root

  find . | cpio -o -Hnewc | -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就是我们的新镜像了。

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

转载地址:http://ynpdi.baihongyu.com/

你可能感兴趣的文章
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>
coursesa课程 Python 3 programming 输出每一行句子的第三个单词
查看>>
Returning a value from a function
查看>>
coursesa课程 Python 3 programming Functions can call other functions 函数调用另一个函数
查看>>
coursesa课程 Python 3 programming The while Statement
查看>>
course_2_assessment_6
查看>>
coursesa课程 Python 3 programming course_2_assessment_7 多参数函数练习题
查看>>
coursesa课程 Python 3 programming course_2_assessment_8 sorted练习题
查看>>
在unity中建立最小的shader(Minimal Shader)
查看>>
1.3 Debugging of Shaders (调试着色器)
查看>>