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 > ....
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...
一、起因 使用busybox制作了一个cpio.gz的文件系统,然后使用这个文件系统作为qemu的启动盘进行启动,最后发现可以识别出是一个cpio文件系统,但是到最后还是出现了panic,说是找不到文件系统。大致的错误类型为"VFS: Cannot open root device \" …… panic("VFS: Unable to mount root fs on %s", b); 也就是...
18 rm -f ../ramdisk.img 19 b.将修改后的目录全部文件使用cpio命令重新打包成ramdisk.img.unzip文件:20 find . | cpio -o -H newc > ../ramdisk.img.unzip 21 c.回到上级目录:22 cd ..23 d.将打包的文件进行压缩:24 gzip -c ./ramdisk.img.unzip > ./ramdisk.img.gz 25 e.删除打包后的中...
在linux 2.5内核开始引入initramfs技术,initramfs实际上已经克服了imgae-initrd的缺点,本质上也是cpio格式的initrd,只不过是和内核编译到了一个image文件,放在了.init.ramfs段内;到linux2.6的内核支持两种格式的initrd,即image-initrd和cpio-initrd,此时的cpio-initrd文件已不再编译进内核而单独成一文件,使用cpio工具生成...
一切工作做好了,uImage和initramfs_data.cpio.gz都已经编译出来了。 用u-boot下载内核镜像和initramfs根文件系统镜像,此时启动系统,最终内核恐慌kernel panic启动失败。 在超级终端的最后一行显示错误如下: Unpacking initramfs...<0>Kernel panic - not syncing: bad gzip magic numbers ...
将ramdisk文件,增加.gz后缀,使用gunzip解压。再用file命令查看,可以确认ramdisk其实是经cpio压缩的文件。 使用cpio命令,可以解压ramdisk文件。得到当初制作ramdisk的文件结构。 cpio -i –F 可以对文件结构,反向打包,得到ramdisk。 find . | cpio –o –H newc | gzip > ../ramdisk.img...
另外就是我们制作ramdisk根文件系统镜像的时候使用的是genext2fs工具,在此我们制作initramfs根文件系统镜像时,并不需要额外的步骤,而是在你编译Linux内核的时候就自动生成了。自动生成的initramfs根文件系统镜像在Linux源码树的usr目录下。名字叫initramfs_data.cpio.gz,它是gz格式的压缩文件。
从Makefile中可知,以CONFIG_INITRAMFS_SOURCE对应的rootfs.cpio文件作为输入,调用gen_init_cpio和gen_initramfs_list.sh生成initramfs_data.cpio.gz文件。 然后INITRAMFS_IMAGE对应,/usr/initramfs_data.cpio$(suffix_y)文件。 最终通过.incbin将INITRAMFS_IMAGE编译到initramfs_data.o文件中,即对应.init.ramfs段。
#k230_sdk_overlay/board/common/gen_image_script/gen_image.sh ROOTFS_BASE="${RAMDISK_ADDR}" ROOTFS_SIZE=`ls -lt rootfs-final.cpio.gz | awk '{print $5}'` ((ROOTFS_END= $ROOTFS_BASE + $ROOTFS_SIZE)) ROOTFS_END=`printf "0x%x" $ROOTFS_END` sed -i "s/linux,initrd-end = <0x0...