2013년 7월 10일 수요일

ramdisk rootfs를 system.img에 포함 시키기

http://codewalkerster.blogspot.kr/2013/05/boot-from-system-partition-instead.html

위에 설명에 수동으로 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"
댓글 쓰기