티스토리 뷰

목차

    반응형

    안드로이드 포팅, 참고 자료 (AT91CAP9SDK 보드 기준)


    안드로이드 포팅, 참고 자료 (AT91CAP9SDK 보드 기준)



    이하 사항들은 안드로이드 포팅 정보의 요약 내용입니다.


    -- 안드로이드 포팅 시작 --

    버닝 방법 요약은 다음과 같다. (윈도우에서의 예로서, 리눅스와 더불어 리눅스 CDC 드라이버 요소가 필요)


    SAM-BA, CDC driver를 다운로드 후 설치하고, AT91CAP9-STK의 Linux Software Package 압축을 해제


    안드로이드 포팅 시작

    STK board를 콘센트와 연결하고 USB 케이블을 컴퓨터와 연결.

    보드에서 J66 점퍼 제거(CAP9 칩 쪽의 파란색 위치)한 후 S4(EN_PMC)를 눌러 시작.


    이때 윈도우는 인스톨 되어 있던 CDC 드라이버와 같은 새로운 장치를 발견, 사용자는 드라이버를 윈도우에서 자동으로 검색됨. (at91cap9stk-console-nd.bat는 GUI 버전이 아님)


    조금 기다린 후, "logfile.log"이 생성되면 버닝이 완료된 것임.

    전원 연결 해제 후, S4(EN_PMC)를 눌러 부트 프로세서를 시작해 부트가 실행되면 성공되긴 하지만, 최소한의 터치 기능만 있다.


    안드로이드 포팅 방법


    (중략)


    1
    $git clone git://android.git.kernel.org/kernel/common.git
    cs


    (이 과정전에 sudo apt-get install git-core 필요)


    리눅스 커널 패치는 'AT91CAP9-STK Linux Software Package'에 있다.

    압축을 해제하면, 안드로이드 포팅을 위한 세 개의 패치 파일이 있다.


    1
    2
    3
    $git clone git://android.git.kernel.0001_CAP9-STK_linux-2.6.27-at91.patch
    0002_CAP9-STK_linux-2.6.27-at91-exp-cap9-dk.patch
    0003_CAP9-STK_linux-2.6.27-at91-exp-cap9-stk.patchrg/kernel/common.git
    cs


    STK 보드는 0001 + 0003, DK 보드는 0001 + 0002가 필요하다.

    $(andsrc)/kernel로 패치 파일을 옮기는 것이 요구되며, 커널 패치를 하기 위해 다음 명령어를 사용해라.


    1
    $patch -p1 < patch-file-name-here
    cs


    (중략)


    사용자는 처음으로 at91cap9-sdk의 설정을 적용한다.


    1
    2
    3
    4
    5
    $cp
    $(andkernel)/common/arch/arm/configs/at91cap9stk_defconfig
    $(andkernel)/common/.config
    $make ARCH=arm menuconfig
    (잘 안되면 sudo apt-get install libncurses5-dev)
    cs


    여기서 우리는 처음 설정을 수정하지 않고, 바로 나와 설정을 저장한다.


    안드로이드 포팅 기술 방법


    유효한 사용가능한 ARM CPU 커널을 컴파일, 우리는 안드로이드 포팅을 위해 CodeSourcery를 사용한다.


    IA32 GNU / Linux Installer를 다운로드 한 후의 예.


    1
    $ ./arm-2008q3-66-arm-none-eabi.bin
    cs


    설치 성공 후에 컴파일러 경로를 추가한다.


    1
    $export PATH=$PATH:$(codesourcery)/Sourcery_G + + _Lite/bin
    cs


    $(andkernel)/common 아래에 Makefile을 수정한다.


    1
    2
    3
    Modify $ (andkernel) / common under the Makefile:
     
    CROSS_COMPILE? = Arm-none-eabi-
    cs


    그 다음 당신은 커널을 컴파일 할 수 있다.


    지금 우리는 커널을 가지고 있지만 U-Boot는 uImage를 먹어, uImage에 대한 Image를 만들어야 한다.


    커널 환경설정 툴을 $(andkernel)/common 아래에서 연다.


    1
    $make ARCH=arm menuconfig
    cs


    Ext3로 포맷된 SD 카드의 파일 시스템이어서 커널은 Ext3 파일 시스템을 지원해야 안드로이드 포팅을 이어갈 수 있다.

    1
    2
    3
    File systems --->
    <*> Ext3 journalling file system support
         [*] Ext3 extended attributes
    cs


    ARM Thumb가 사용할 수 있도록 실행 가능한 파일로 컴파일을 할 것이다.


    1
    2
    System Type --->
            [*] Support Thumb user binaries
    cs


    AT91CAP9-STK에 응답하기 위하여


    1
    2
    General setup --->
        [*] Enable the Anonymous Shared Memory Subsystem
    cs


    안드로이드 포팅 성공 방법


    1
    2
    3
    4
    5
    $cd 
    $(andkernel)/common/arch/arm/boot
    $gzip -9 Image
    $mkimage -A arm -O linux -T kernel -C gzip -0x70008000 -d Image.gz uImage
    (이전에 sudo apt-get install uboot-mkimage)
    cs


    우리가 원하는 La uImage kernel이다.


    (중략)


    소스는 ‘working-directory-name'의 '$(andsrc)'에 다운로드 된다.

    여기서 우리는 아무런 수정 없이 바로 첫 번째 컴파일을 바로 하여 안드로이드 포팅을 계속한다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sudo apt-get install sun-java5-jdk(jdk 버전 5에서만 make됨)
    sudo apt-get install bison
    sudo apt-get install build-essential
    sudo apt-get install qemu
    sudo apt-get install qemu-kvm
    sudo apt-get install libsdl1.2-dev
     
    $cd
    $(andsrc)
    $make
    cs


    컴파일 시간은 약 2.5 시간, 디스크 용량은 거의 8GB 정도 소요된다. (원글을 적은 중국 개발자 사양 - Intel Core 2 Solo U3500@1.4GHz)


    컴파일이 되면 파일 시스템은 $(andsrc)/out/target/product/generic 다음에 있을 것이다.

    안드로이드 파일 시스템은 주로 세 개의 파트 종류로 구성되어 있다.


    1. Ramdisk.img는 파일 시스템 “/”의 /system과 /data 밖의 파일을 제외한 모든 파일들을 포함

    2. System.img는 /system 아래의 모든 파일을 포함

    3. Data.img는 /data 아래의 모든 파일을 포함


    보통의 안드로이드 포팅 환경 아래서, 파일 시스템은 JFFS2 패키지이기 때문에 SAM-BA로 NAND에 버닝할 수 있다.


    그러나 안드로이드 /data 폴더 아래의 파일 시스템은 memory-mapped(기억 장소 할당) 작업을 지원해야 하는데, JFFS2는 memory-mapped를 지원하지 않아, SAMBA에서 안드로이드 YAFFS2를 사용해 버닝 할 수 없다.

    (중략)


    리눅스에서 SD 카드를 카드 리더기에 넣으면, Ext3로 포맷이 된다(fdisk나 mkfs).

    그 위치는 /media/disk일 것이고, 안드로이드의 “/”루트 폴더 위치와 대응한다.


    우리는 .img 파일의 압축 해제가 필요하지 않는데, 왜냐하면, $(Andsrc)/out/target/product/generic 폴더 아래의 root, data, system 폴더들 ramdisk.img, userdata.img, system.img가 압축이 해제된 파일들이기 때문이다.


    당신이 할 수 있다면 대응하는 위치에 복사가 된다.(루트 권한 필요)


    1
    2
    3
    $ sudo cp -r $(andsrc)/out/target/product/generic/root/* /media/disk/
    $ sudo cp -r $(andsrc)/out/target/product/generic/data/ /media/disk/
    $ sudo cp -r $(andsrc)/out/target/product/generic/system/ /media/disk/
    cs


    그 다음 init.rc를 수정해야 한다.(/media/disk/init.rc).


    1
    Then we want to modify init.rc (/ media / disk / init.rc).
    cs


    init.rc는 init 실행을 정의를 완료하며, 그리고 /data와 /system 마운트하여 실행하며, 그러나 우리는 이 폴더들을 버렸고, 그래서 그 명령들은 없애야 안드로이드 포팅할 수 있다.


    init.rc에서 마운트 명령어를 모두 삭제하는 것을 시작하며, 오직 "mount tmpfs tmpfs /sqlite_stmt_journals size=4m"。"만 남겨준다. 우리는 커널과 파일 시스템을 완성시켰다.


    안드로이드 포팅 이유 성공


    (중략)


    커널 환경설정 툴을 $(andkernel)/common 아래에서 연다


    1
    $make ARCH=arm menuconfig
    cs


    Ext3로 포맷된 SD 카드의 파일 시스템이어서 커널은 Ext3 파일 시스템을 지원해야 한다.


    1
    2
    3
    File systems --->
        <*> Ext3 journalling file system support
            [*] Ext3 extended attributes
    cs


    안드로이드의 일부는 ARM Thumb가 사용할 실행 가능한 파일로 컴파일을 할 것이다.


    1
    2
    General setup --->
        [*] Enable the Anonymous Shared Memory Subsystem
    cs


    1
    2
    System Type --->
        [*] Support Thumb user binaries
    cs


    셋업이 완벽할 때, 셋팅을 .config에 저장하는 것을 기억한다.


    (중략)


    마지막으로 옹스트롬을 사용했을 때, at91cap9-stk-x11-nd.bat과 같은 디렉토리에 있다.


    1
    2
    3
       kernelFileName "at91cap9stk-linux.bin"
     
    -> KernelFileName "uImage"
    cs


    uImage는 그 다음에 같은 방법으로 버닝된 디렉토리에 복사되어 안드로이드 포팅에 사용할 수 있다.

    (버닝된 파일 시스템이 필요하지 않을 때, .tcl 파일에서 2개의 줄은 삭제한다.)


    안드로이드 포팅


    (중략)


    1
    2
    U-Boot> setenv bootargs console=ttyS0, 
      115200 root=/dev/mmcblk0p1 rw init=/init rootwait
    cs


    /dev/mmcblk0p1는 첫 번째 파티션에서 첫 번째 SD 카드, rootwait는 그 SD 카드 드라이브에서 루트가 준비 될 때까지 기다리는 것을 보장한다.


    1
    2
    3
    U-Boot> saveenv
     
    U-Boot> run bootcmd
    cs


    bootcmd가 시작되며 커널과 드라이버가 로딩되고 SD 카드에서 루트 파일 시스템을 얻게되고 /init 폴더에서 작동하는 것이 실행된다.

    반응형