위에 설명에 수동으로 ramdisk의 rootfs를 system에 복사하는 방법이 였습니다.
이번에는 ramdisk의 rootfs를 포함 하여 system.img를 만들어 보겠습니다.
system/core/init/Android.mk를 보면 TARGET_ROOT_OUT 변수가 out/target/product/xxx/root를 의미합니다. 그리고 out/target/product/xxx/root/init에 복사 됩니다.
그래서 전체 Android.mk에서 TARGET_ROOT_OUT를 찾아 TARGET_OUT으로 변경하면 out/target/product/xxx/system으로 복사됩니다. 하지만 코드를 여러 군데 수정 해야 합니다.
그래서 build후 copy하는 방식으로 처리 하였습니다.
build_android.sh를 수정합니다.
SYSTEMIMAGE_PARTITION_SIZE=$(grep "BOARD_SYSTEMIMAGE_PARTITION_SIZE " device/hardkernel/$SEC_PRODUCT/BoardConfig.mk | awk '{field=$NF};END{print field}')
function copy_root_2_system()
{
#root의 내용을 permission 그대로 system 폴더에 복사한다.
cp -arp $OUT_DIR/root/* $OUT_DIR/system/
#init과 sbin/adbd를 755로 넣어도 644로 바뀌기 때문에 symbolic link 해결
#init과 adbd를 bin으로 복사합니다.mv $OUT_DIR/system/init $OUT_DIR/system/bin/
mv $OUT_DIR/system/sbin/adbd $OUT_DIR/system/bin/
cd $OUT_DIR/system
ln -s bin/init init
cd $OUT_DIR/system/sbin
ln -s ../bin/adbd adbd
#make_ext4fs로 system 폴더를 system.img로 만든다.
#SYSTEMIMAGE_PARTITION_SIZE 는 BoardConfig.mk의 BOARD_SYSTEMIMAGE_PARTITION_SIZE의 값을 읽어서 설정한다.
$OUT_HOSTBIN_DIR/make_ext4fs -s -l $SYSTEMIMAGE_PARTITION_SIZE -a system $OUT_DIR/system.img $OUT_DIR/system
sync
}
odroidx2)
build_android
copy_root_2_system
make_uboot_img
kernel의 defconfing를 수정합니다. (ODROID-U2)
CONFIG_CMDLINE="root=/dev/mmcblk0p2 rw rootfstype=ext4 init=/init console=ttySAC1,115200n8 androidboot.console=ttySAC1 mem=2047M"