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

안드로이드 포팅, 참고 자료 (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 폴더에서 작동하는 것이 실행된다.

이 글을 공유하기

댓글(0)

Designed by JB FACTORY