linux ,Android基础知识总结 (3)

Initial RAM filesystem and RAM disk (initramfs/initrd) support
设置 ()    Initramfs source file(s) (NEW) 为 root
拷贝  cupcake 编译结果  out/target/product/littleton/root/  到内核顶层目录
3> 编译
内核顶层目录执行 make zImage
编译好的内核:
arch/arm/boot/zImage
initramfs与initrd
1. initrd是一个单独的文件;initramfs和Linux内核链接在一起(/usr目录下的程序负责生成initramfs文档)。
2. initrd是一个压缩的文件系统映像(可以是ext2等,需要内核的驱动);initramfs是类似tar的cpio压缩文档。
内核中的cpio解压缩代码很小,而且init数据在boot后可以丢弃。
3. initrd运行的程序(initd,不是init)进行部分setup后返回内核;initramfs执行的init程序不返回内核
(如果/init需要向内核传递控制权,可以再次安装在/目录下一个新的root设备并且启动一个新的init程序)。
编译脚本及系统变量
initramfs与initrd的区别
1. initrd是一个单独的文件;initramfs和Linux内核链接在一起(/usr目录下的程序负责生成initramfs文档)。
2. initrd是一个压缩的文件系统映像(可以是ext2等,需要内核的驱动);initramfs是类似tar的cpio压缩文档。
内核中的cpio解压缩代码很小,而且init数据在boot后可以丢弃。
3. initrd运行的程序(initd,不是init)进行部分setup后返回内核;initramfs执行的init程序不返回内核
(如果/init需要向内核传递控制权,可以再次安装在/目录下一个新的root设备并且启动一个新的init程序)。
4. 切换到另一个root设备时,initrd执行pivot_root后,卸载ramdisk;initramfs是rootfs,既不能
pivot_root,也不能卸载。initramfs会删掉rootfs的所有内容(find -xdev / -exec rm \'{}\' \';\'),
再次安装root到rootfs(cd /newmount; mount --move . /; chroot .),把stdin/sdout/stderr挂在
新的/dev/console上,重新执行init。由于这是一个相当困难的实现过程(包括在使用一个命令之前把它删除),所以
klibc工具包引入一个帮助程序/utils/run_init.c来执行上述过程。其他大部分工具包(包括busybox) 把这个命令
称为"switch_root"。
======================= end ========================
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyfxg.html