A7 的recovery.img 其实是kernel+ramdisk一起压缩生成的zimage,然后重命名了一下
- 生成cpio_list文件
以binandroid生成的recovery/root为ramdisk的base,生成cpio_list文件:
$ cd /recovery
$ gen_initramfs_list.sh ${PWD}/root > ${PWD}/cpio_list
gen_initramfs_list.sh是Linux源码kernel/scripts中的文件
- 修改prima2_defconfig配置文件
1、打开内核对ramdisk的支持
2、添加需要的支持项,比如MTD norflash
3、指定initramfs的路径(cpio_list文件的绝对路径)
最终生成的prima2_defconfig新增内容如下,其中cpio_list文件路径要根据具体情况设定
CONFIG_LBDAF=y
CONFIG_MTD=y
CONFIG_MTD_M25P80=y
CONFIG_MTD_ATLAS7_QSPI=y
CONFIG_MTD_SPI_NOR=y
CONFIG_ATLAS7DA_NOC=y
CONFIG_CMA_SIZE_MBYTES=64
CONFIG_ANDROID=y
CONFIG_ASHMEM=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/home/xxx/A7_BSP/poky/build/tmp/work/atlas7_arm-poky-linux-gnueabi/recoveryimage/1.0-r0/kernel/cpio_list"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
- 重新编译kernel
1、替换prima2_defconfig
arch/arm/configs/prima2_defconfig
2、到kernel根目录执行
$ make ARCH=arm prima2_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
3、编译完成后将/arch/arm/boot/zImage 重命名成recovery.img即可