大佬教程收集整理的这篇文章主要介绍了使用mkbootfs制作ramdisk根文件系统,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
/* NOTES ** ** - see buffer-format.txt from the linux kernel docs for ** an explanation of this file format ** - dotfiles are ignored ** - directories named ‘root‘ are ignored ** - device notes,pipes,etc are not supported (error) */
上面的信息说明了如下几点:
The full format of the initramfs buffer is defined by the following grAMMar,where: * is used to inDicate "0 or more occurrences of" (|) inDicates alternatives + inDicates concatenation GZIP() inDicates the gzip(1) of the operand ALGN(n) means padding with null bytes to an n-byte boundary initramfs := ("\0" | cpio_archive | cpio_gzip_archivE)* cpio_gzip_archive := GZIP(cpio_archivE) cpio_archive := cpio_file* + (<nothing> | cpio_Trailer) cpio_file := ALGN(4) + cpio_header + filename + "\0" + ALGN(4) + data cpio_Trailer := ALGN(4) + cpio_header + "TraiLER!!!\0" + ALGN(4)
lib_path=`readlink -f ./lib` bin_path=`readlink -f ./bin/` export LD_LIBRARY_PATH=${lib_path}:$LD_LIBRARY_PATH export PATH=${Bin_path}:$PATH rm -f ramdisk.img ramdisk.cpio rm -rf ./tmp/ # pack pushd rootfs2 mkbootfs -f ../config.txt . | minigzip > ../ramdisk.img mkbootfs -f ../config.txt . > ../ramdisk.cpio popd # unpack @H_518_105@mkdir -p tmp pushd tmp cpio -i < ../ramdisk.cpio popd
其中config.txt是一个配置文件,@L_675_32@如下:
etc/init.d/rcS 0 0 0755 0 0 0744
第1行,把"etc/init.d/rcS"文件的uid设置为0,gid设置为0,权限设置为0755
/* Rules for directories. ** these rules are applied based on "first match",so they ** should start with the most specific path and work their ** way up to the root. */ static const struct fs_path_config android_dirs[] = { { 00770,AID_SYstem,AID_CACHE,0,"cache" },{ 00500,AID_ROOT,"config" },{ 00771,"data/app" },"data/app-private" },"data/app-ephemeral" },"data/dalvik-cache" },"data/data" },AID_SHelL,"data/local/tmp" },"data/local" },{ 01771,AID_MISC,"data/misc" },{ 00770,AID_DHCP,"data/misc/dhcp" },AID_SHARED_RELRO,"data/misc/shared_relro" },{ 00775,AID_MEDIA_RW,"data/media" },"data/media/Music" },{ 00750,"data/nativetest" },"data/nativetest64" },... ...
针对其他文件的规则:
static const struct fs_path_config android_files[] = { { 00440,"system/etc/init.goldfish.rc" },{ 00550,"system/etc/init.goldfish.sh" },"system/etc/init.ril" },{ 00555,"system/etc/ppp/*" },"system/etc/rc.*" },{ 00440,"system/etc/recovery.img" },{ 00444,conf_dir + 1 },conf_file + 1 },{ 00644,"data/app/*" },"data/media/*" },"data/app-private/*" },"data/app-ephemeral/*" },AID_APP,"data/data/*" },{ 00640,"data/nativetest/tests.txt" },"data/nativetest64/tests.txt" },... ...
kernel_dir=./Linux-4.14.13 kernel_image=${kernel_dir}/arch/arm/boot/zImage dtb_image=${kernel_dir}/arch/arm/boot/dts/vexpress-v2p-ca9.dtb qemu_path=/home/pengdonglin/disk_ext/Qemu/qemu-3.1.0/build/install/bin ${qemu_path}/qemu-system-arm -M vexpress-a9 -@H_106_91@m 1024M -smp 1 -kernel ${kernel_imagE} -nographic -append "root=/dev/ram0 rw rootfstype=ramfs console=ttyAMA0 init=/linuxrc ignore_loglevel" -initrd ./rootfs/ramdisk.img -dtb ${dtb_imagE}
kernel_dir=./Linux-4.14.13 kernel_image=${kernel_dir}/arch/arm/boot/zImage dtb_image=${kernel_dir}/arch/arm/boot/dts/vexpress-v2p-ca9.dtb qemu_path=/home/pengdonglin/disk_ext/Qemu/qemu-3.1.0/build/install/bin ${qemu_path}/qemu-system-arm -M vexpress-a9 -@H_106_91@m 1024M -smp 1 -kernel ${kernel_imagE} -nographic -append "root=/dev/ram0 rw rootfstype=ramfs console=ttyAMA0 init=/linuxrc ignore_loglevel" -initrd ./rootfs/ramdisk.cpio -dtb ${dtb_imagE}
[ 0.610055] Trying to unpack rootfs image as initramfs... [ 0.760468] Freeing initrd memory: 7040K
GEN usr/initramfs_data.cpio.gz GZIP kernel/config_data.gz CHK kernel/config_data.h UPD kernel/config_data.h CC kernel/configs.o AR kernel/built-in.o AS usr/initramfs_data.o AR usr/built-in.o
/bin/bash ./scripts/gen_initramfs_list.sh -o usr/initramfs_data.cpio.gz -u 0 -g 0 /home/pengdonglin/disk_ext/Qemu/aarch32/rootfs/rootfs
kernel_dir=./Linux-4.14.13 kernel_image=${kernel_dir}/arch/arm/boot/zImage dtb_image=${kernel_dir}/arch/arm/boot/dts/vexpress-v2p-ca9.dtb qemu_path=/home/pengdonglin/disk_ext/Qemu/qemu-3.1.0/build/install/bin ${qemu_path}/qemu-system-arm -M vexpress-a9 -@H_106_91@m 1024M -smp 1 -kernel ${kernel_imagE} -nographic -append "root=/dev/ram0 rw rootfstype=ramfs console=ttyAMA0 init=/linuxrc ignore_loglevel" -dtb ${dtb_imagE}
185 #!/bin/sh 186 187 # Copyright 2006 Rob Landley <[email protected]> and TimeSys Corporation. 188 # Licensed under GPL version 2 189 190 if [ $# -ne 2 ] 191 then 192 echo "usage: mkinitramfs directory imagename.cpio.gz" 193 exit 1 194 fi 195 196 if [ -d "$1" ] 197 then 198 echo "creaTing $2 from $1" 199 (cd "$1"; find . | cpio -o -H newc | gzip) > "$2" 200 else 201 echo "First argument must be a directory" 202 exit 1 203 fi
以上是大佬教程为你收集整理的使用mkbootfs制作ramdisk根文件系统全部内容,希望文章能够帮你解决使用mkbootfs制作ramdisk根文件系统所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。