vim usr/initramfs_data.S
SECTIONS
{
.init.ramfs : { *(.data) } // 包含所有data
}
.section .init.ramfs,"a"
.incbin "usr/initramfs_data.cpio.gz" // data为usr/initramfs_data.cpio.gz文件内容
vim arch/arm/kernel/vmlinux.lds.S
#ifdef CONFIG_BLK_DEV_INITRD
. = ALIGN(32);
__initramfs_start = .;
usr/built-in.o(.init.ramfs)
__initramfs_end = .;
#endif
vim init/initramfs.c
rootfs_initcall(populate_rootfs);
static int __init populate_rootfs(void)
{
// 先unpack built-in编译进内核的以__initramfs_start地址开始的fs数据
char *err = unpack_to_rootfs(__initramfs_start,
__initramfs_end - __initramfs_start, 0);
// 再unpack bootloader传过来的以initrd_start地址开始的fs数据
err = unpack_to_rootfs((char *)initrd_start,
initrd_end - initrd_start, 0);
}
生成initramfs.gz加载文件
scripts/gen_initramfs_list.sh -o /vobs/gliethttp/initramfs.gz /vobs/nfs/
如果-d后面不加任何参数那么将显示默认的initramfs中包含的文件
scripts/gen_initramfs_list.sh -d
显示initramfs.cpio中的包含的文件
gunzip /vobs/gliethttp/initramfs.gz
cpio -i -t < /vobs/gliethttp/initramfs
或者直接显示initramfs.gz中包含的文件
gunzip -c /vobs/gliethttp/initramfs.gz | cpio -i -t
阅读(3545) | 评论(3) | 转发(0) |