关于initramfs
initramfs在编译内核的同时被编译并与内核连接成一个文件,它被链接到地址__initramfs_start处,与内核同时被加载到ram中。initramfs被解析处理后原始的cpio包(压缩或非压缩)所占的空间(&__initramfs_start- &__initramfs_end)是作为系统的一部分直接保留在系统中,不会被释放掉。
由于initramfs使用包格式,所以很容易将一个单一的文件、目录、node编译链接到系统中去,这样很简单的系统中使用起来很方便,不需要另外挂接文件系统。
但是因为cpio包实际是文件、目录、节点的描述语言包,为了描述一个文件、目录、节点,要增加很多额外的描述文字开销,特别是对于目录和节点,本身很小额外添加的描述文字却很多,这样使得cpio包比相应的image文件大很多。
关于内核配置和编译
内核配置:make menuconfig进入配置
进入General setup --->
选择内核压缩为LZMA压缩
Kernelcompression mode (LZMA) --->
然后选择
[*]Initial RAM filesystem and RAM disk (initramfs/initrd) support
(/rootfs_dir) Initramfs source file(s)
其中rootfs_dir就是我们需要压缩的rootfs的路径。
1、 修改压缩包在内存中的存放位置:(mips芯片)
arch/mips/boot/compressed/calc_vmlinuz_load_addr.c中的
vmlinuz_load_addr =0x81a00000;(此地址可根据需要,自己调节)
2、修改rootfs的busybox链接, 在rootfs的目录下执行:
ln –sbin/busybox init
3、修改CMDLINE:
“console=ttySAC0,115200 init/init rw kgdbttySAC0,115200kgdboc=ttySAC0
mem=32M”
4、最后make编译
make vmlinuz.bin
之后在当前目录下就会生成vmlinuz.bin的压缩包。
5、可能编译会有问题,此时一般是由于rootfs是root权限,用户组也是root,需要修改用户组,之后便可以编译通过。