User Manual X-Hyper 320 TKU Android 1.6 Als das Kind Kind war,ging es mit hangenden Armen,wollte der Bach sei ein Fluß,der Fluß sei ein Strom,und diese Pfutze das Meer 2010-05-25 dhlrns@hybus.net Created Hybus Co. Ltd.
Section 1. Overview 이문서는 Marvel PXA 320 processor platform인 X-Hyper320 TKU 보드에안드로이드 BSP를설치, 컴파일하는방법을작성한것이다. HOST PC 권장사양구글에서권장하는 Ubuntu가설치된 PC ( 권장 : Ubuntu 8.0이상 ) 권장 PC 사양 CPU : Pentium 2.4 G이상 / AMD sempron 2400이상 (x64인경우 32bit용배포판을설치하여사용한다 ) RAM : 256MB 이상 (VMWare를이용할경우 2GB이상메모리사용을권장한다.) HDD : 약 20GB 이상의여유공간 VGA : 리눅스드라이버호환모델 ( ATI, Geforce, Matrox등 ) Parallel : 1 port (xdb 사용시, *usb to parallel 사용불가 ) Ethernet : 1 port (2 port 권장 ) Serial : 1 port (*usb to serial 사용가능 ) CD-ROM : 32x 이상 배포판설치시주의사항 파티션은일반 ext3로포멧해서사용하며, 보안관련체크를하게될경우 NFS등의문제가발생할수있다. xinetd, tftp, NFS, minicom등의패키지는개발시꼭필요하므로 Ubuntu 설치후패키지를반드시추가설치해야한다. * 주의 : VMWARE등의에뮬레이터를이용하여리눅스를설치할경우, Host PC자원분리로컴파일시간이오래걸리고가상PC내에서실제디바이스제어가잘안될수있다. 사용이익숙한사용자또는충분한 PC성능을보유하였을때사용하기바라며별도의자세한사용법은기술하지않는다.
Section 1. Overview Hardware Components < Block Diagram >
Section 1. Overview Hardware Components < X-Hyper320TKU CPU Board Layout > < X-Hyper320TKU Base Board Layout >
Section 2. Quick Start BSP Install 우분투에서는먼저관리자권한을획득한다음설치된리눅스의최상위경로에서작업할디렉토리를하나만들고, 제공된 BSP CD를새로만든디렉토리에복사해넣는다. BSP 복사 $ sudo su => 관리자권한요청 $ :xxxxxxxxx => 패스워드입력 # mkdir /320TKU_Andorid # cp R media/cdrom/ /320TKU_Andorid/ BSP compile & Build 1. 툴체인설치 BSP의 복사가 완료되면 작업디렉토리로 이동을 하여 Kernel과 Toolchain 그리고, Android_dounut 디렉토리내에있는파일들의압축을푼다. # cd /320TKU_Android => 작업디렉토리로이동 # cd Toolchain/ => 툴체인디렉토리로이동 # tar zxvf arm marvell-linux-gnueabi.tgz => 툴체인압축해제 2. 커널컴파일툴체인설치가완료되면커널디렉토리로이동하여 android-2.6.29_320tku.tgz압축을해제하고커널의 Makefile를열어서 CROSS_COMFILE경로를변경하여준다. 이때툴체인의경로는 320TKU_Android/Toolchain/arm-marvell-linux-gnueabi/bin/arm-marvell-linux-gnueabi- 가된다. 툴체인설정이완료되면 Makefile를저장하고나온다음,./build_kernel.sh 를실행하여커널을컴파일한다. 커널컴파일이완료되면커널 /arch/arm/boot 경로에커널이미지인 zimage가생성된다. # cd /320TKU_Android/Kernel/ => 커널디렉토리로이동 # tar zxvf android-2.6.29_320tku.tgz => 커널압축해제 # cd android-2.6.29_320tku/ # vi Makefile => vi편집기로 Makefile파일을열어서 CROSS_COMFILE 경로설정 #./build_kernel.sh => build_kernel.sh 실행
Section 2. Quick Start 3. 파일시스템생성 파일 시스템을 생성하기 위해 320TKU_Andorid/Android_dounut 경로로 이동하여 320TKU_dounut.tgz을압축을해재한다음,./build_android.sh를실행한다. 컴파일에소요되는 시간은 PC의사양에따라서차이가있는데일반적으로램 1GB정도에듀얼코어를사용한다면 약 3시간정도소요된다. # cd /320TKU_Android/Andorid_dounut/ => 파일시스템소스경로이동 # tar zxvf Xhyper320TKU_dounut.tgz => 소스압축해제 #./build_android.sh => 파일시스템컴파일 Android_dounut/out/target/project/Xhyper320TKU/root Android_dounut/out/target/project/Xhyper320TKU/system 두개의디렉토리를 mkyaffs2image를이용해 yaffs2 이미지를생성한다. mkyaffs2image는제공되는 BSP의 Misc폴더내에있으며커널의컴파일시 yaffs 파일시스템을사용하므로 yaff의 util경로인 /320TKU_Android/Kernel/android-2.6.29_320TKU/fs/yaffs2/utils경로에있다. # cd /Android_dounut/out/target/project/Xhyper320TKU/ => 경로이동 # chmod -x mkyaff2image => 파일실행권한변경 #./mkyaff2image root/ root.yaffs2 => root.yaffs2생성 #./mkyaff2image system/ system.yaffs2 => system.yaff2생성 Booting Linux (section 7. XDB download 참조 ) XDB를이용하여부트로더를퓨징하는방법은사용하는 CPU 모듈에부트로더가이미올라가있고 XDB가없는경우에는생략해도무방하다. XDB 없이부트로더를퓨징하여야하는경우에는 JFLASH보드를이용하여윈도우에서부트로더를퓨징한다. JFLASH로퓨징하는방법은 section 8을참고한다. 1. Bootloader Fusing (XDB를사용 ) (1) Marvell C++ Software Development Tool Suite for Intel XScale Microarchitecture, Professional, v2.1 를설치한다. (2) Marvell XDB Debugger 를실행하고 start한다. (3) JTAG가잡혔으면 Flash->Burn Flash를실행한다. (4) Fusing 하기전에 NAND를초기화한다. Extended Flash Functionality 섹션에서 Select NAND Function을 Reset bad block table로선택하고 Execute 를클릭한다. 완료되었으면 Initialize NAND flash 를선택하고 Execute 를클릭한다.
Section 2. Quick Start (5) 초기화가끝났으면Burning tab에서 Data File로 boot.bin을고르고 Offset in Flash를 0 으로하고 Burn 을클릭한다. (6) Bootloader Fusing이완료되었으면프로그램을종료하고보드를리셋하여시리얼이출력되는지확인하여본다. 2. Bootloader, Kernel, Filesystem Fusing Terminal 프로그램 (teraterm, minicom) 등을실행한다 ( 자세한내용은환경구축섹션참조 ) Baud 38400, 8N1, no hardware flow control로설정을한다. Bootloader가이미올라가있는상태라면 Bootloaer상에서 XDB없이 Fusing이가능하다. boot.bin을다운받고 Flash에 Fusing한다. blob> tftp boot.bin blob> nandwrite -z 0x80800000 0x00000000 0x40000 부팅중 Autoboot (3 seconds) in progress, press any key to stop.. 메시지가나오면키를입력하여 blob> 커맨드상태로간다. HOST PC와 tartget board의 IP를설정한다. setip 명령으로현재설정된 ip를알수있다. 기본값 Target(Client) 192.168.10.3, Server 192.168.10.2 이다. blob> setip => 현재설정된 IP확인 blob> setip serverip xxx.xxx.xxx.xxx => [ 서버 /HOST PC] IP 입력 blob> setip clientip xxx.xxx.xxx.xxx => [ 타겟 / 보드 ] IP 입력 blob> setip => 현재설정된 IP확인 HOST PC의 tftp 디렉토리에커널이미지인 zimage와파일시스템이미지인 root.yaffs2와 system.yaffs2 이미지를복사한다음각각이미지를다운로드받는다. 이미지는램 address 0x80800000에다운로드받으며이미지다운로드가끝났다면 Nandwrite 명령으로 Flash에Fusing한다. 커널은 Nand address 0x00040000 에서 offset은 0x00300000이다.
Section 2. Quick Start blob> tftp zimage blob> nandwrite -z 0x80800000 0x00040000 0x00300000 같은방법으로 gtk.img를다운받고 Flash에Fusing한다. Yaff image의경우 fusing방법이다르기때문에커맨드의차이가있으므로주의해야한다. blob> tftp root.yaffs2 blob> nandwrite -y 0x80800000 0x00340000 0x00400000 blob> tftp system.yaffs2 blob> nandwrite -y 0x80800000 0x00740000 0x04000000 퓨징이완료되었으면리부팅하여동작을확인한다. 파일시스템을수정하여퓨징을반복할때 NAND를클리어하지않으면 root, system을새로올려도이전상태 ( 어플설치한거등 ) 가유지된다.) 다음과같이 nanderase를실행한다. blob > nanderase -y 0x04740000 0x02860000 blob > reboot 부팅이후로고애니메이션이않나올경우 호스트PC donut/out/target/product/xhyper320tku/system/framework/framework-res.apk 파일을타겟보드 /system/framework/framework-res.apk과교체한다. 또는 BSP의 Misc폴더에있는 framework-res.apk 로교체한다. * framework-res.apk 교체하는방법 1. framework-res.apk 파일을 sdcard 에복사해넣는다. 2. framework-res.apk 파일이복사된 sdcard 를타겟에삽입하면자동으로마운트된다. 3. 타겟보드의 framework-res.apk 를 sdcard의 framework-res.apk 로교체 # mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system # busybox rm /system/framework/framework-res.apk # cd /sdcard # busybox cp -R framework-res.apk /system/framework/
Section 3. Driver / Components # mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system # sync Android BSP 가지원하는 Driver 와컴포넌트리스트이다 Driver / Components Supported Vendor 비고 Cross compiler OK gnueabi 4.2.0 version OEM boot OK NAND boot Blob OK Blob 2.0.5-pre3 version Linux Kernel OK 2.6.29 version MTD Driver OK Samsung NAND K9F1908U0M Large Page(2k) 128MB YAFFS2 OK Touch OK Internal controller Tslib 1.0 version Ethernet OK Davicom DM9000E 100 Mbps NFS Filesystem OK USB 1.1 Client OK Internal controller USB to Ethernet USB 1.1 Host OK Internal controller Storage, Keyboard, mouse Cmos Camera OK Micron MT9M112 Capture interface Internal Serial OK Internal controller 3 port Frame buffer OK Internal controller 800x480 wide LCD Chunghwa Picture Tube CLAA070VC05T FND, DOT, Key, DAC, FPGA Device OK IEB Board ADC, Step Motor, DC Motor, CLCD, LED Audio OK Wolfson WM9712 ALSA driver USB 2.0 Host Not yet Ubisys UBI9032 Storage, Keyboard, mouse USB 2.0 Client Not yet PLX Tech. Net2272 USB to Ethernet Wireless Lan OK Marvell WR-G-MR-05 External Serial OK Texas Inc. TL16C554APN DMB (SPI) Not yet Centronix CTX305R Software codec DMB (CIF) Not yet 광성전자 AMB-910 Capture interface
Section 3. Driver / Components Kenel support device Driver / Components Supported 비고 Camera OK Capture interface Wireless Lan OK Ethernet OK 2port USB 1.1 slave OK adb support USB 1.1 host OK ttyusb UART OK debug, GPS, Externd 4port SD/MMC OK NFS Filesystem OK YAFFS2 Filesystem OK Audio OK ALSA driver, speaker, mic LCD / touch OK 800 X 480 IEB Devices OK LED, FND, DOT, CLCD rtc45413 OK Donut Support device app Driver / Components Camera Wireless Lan Ethernet USB GPS SD/MMC Mediaplayer Audio IEB Devices 비고 preview/capture app web brawer <- 암호있는 AP 접속불가 2port adb support GPS app Android Support Android Support Voice speaker/ mic app LED, FND, DOT, CLCD app
Section 4. 개발환경 보드연결 1. Serial 연결 DEBUG1 포트와 PC 의시리얼포트에연결한다. 2. Ethernet 연결
Section 4. 개발환경 3. Emulator (XDB) 연결 CPU JTAG 포트에연결한다 tftp 설치 (linux) netstat -au 명령으로현제실행중인데몬이무었이있는지확인한후 tftp 와 nfs 서비스가실행되고있지않다면 tftp를설치한다. # netstat -au
Section 4. 개발환경 apt-get install nfs-kernel-server tftpd tftp xinetd 명령을이용하여해당패키지를설치한다. # apt-get install nfs-kernel-server tftpd tftp xinetd 다운로드가되면자동으로설치가된다.
Section 4. 개발환경 설치후 vi 편집기를이용하여 tftpd 파일을수정한다. 또는해당파일이없을경우새로만들어서다음과같이설정을한다. # vi /etc/xinetd.d/tftpd service tftp { protocol =udp port =69 socket_type =dgram wait =yes user =nobody server =/usr/sbin/in.tftpd server_args =/tftpboot disable =no } server_args는 tftp 서버가실행될때다운로드파일이있는경로이므로상황에따라원하는폴더를지정해주거나위와같이 tftpboot를만들어놓고다운로드받을파일을 tftpboot에복사해주면된다. 아직 tftpboot폴더가없으므로 /( 루트 ) 경로에 tftpboot디렉토리를하나만들어주고권한을부여한다. # mkdir /tftpboot # chmod 777 tftpboot # ls 다음으로 xinetd 를재시작하여 tftp 데몬을동작시켜보자. # /etc/init.d/xinetd restart xinetd restart 가성공적으로수행되면처음과같이 nestat -au 명령으로 tftp 데몬을확인한다.
Section 4. 개발환경 tftp 와 nfs 데몬이설치되어있는것을확인할수있다. minicom 설정 ( 터미널프로그램 ) 다음으로타겟보드의콘솔메시지를확인하는터미널을설치하고설정한다. minicom이라는터미널프로그램이설치되어있는지확인한다. # apt-get insatll minicom 명령으로 minicom 을설치한다.
Section 4. 개발환경 설치가완료되면 # minicom -s 명령을입력한다. minicom -s 명령은 minicom 설정을하는명령이다.
minicom설정으로들어가면 Serial port setup 설정으로들어가서타겟보드와통신할포트와전송속도를설정해야한다. Serial port setup에서 host pc에 COM1단자가타겟보드의디버그포트에연결이되어있다면 /dev/ttys0를선택한다. 근래에는패러럴과시리얼포트가없는경우가있으므로 USB to Setrial 을사용할경우해당포트가 host PC에서 COM3으로잡혀있을경우리눅스버전에따라다르지만 /dev/ttyusb0 또는 /dev/ttys2 또는 /dev/ttys0로설정하면디버그메시지를확인할수있다. 설정이끝나면엔터를입력하여설정값을저장한다. 다음으로 E를눌러전송속도를설
Section 4. 개발환경 정한다. 전송속도를 38400 8N1 을사용한다. 설정이완료되면 Save setup as dfl를눌러설정값을저장한다. 설정값을저장하고 Exit를선택하면 minicom 실행상태로진입한다. Exit from Minicom을선택하면프로그램을종료하고빠져나간다. 타겟보드가호스트PC와시리얼케이블이연결이되어있는상태에서타겟보드에전원을인가하면부트로더메시지가출력되면서커널부팅이진행된다. 다음화면은커널부팅이완료되고파일시스템으로진입한화면이다.
Section 4. 개발환경 터미널은 Windows 에서하이퍼터미널이나테라텀등의프로그램을사용하여도무방하다.
Section 5. adb 연결 타겟에 Android가퓨징이완료되고부팅후정상동작이가능하면윈도우의이클립스에서에뮬레이터대신실제타겟으로어플리케이션을다운로드받아서실행시켜볼수있다. 1. 연결 adb는 USB Client 1.1를사용한다. 2. 드라이버설치드라이버설치과정은다음절차를수행한다. 케이블을연결하면다음과같이새로운장치를찾는다
Section 5. adb 연결 목록또는특정위치에서설치 ( 고급 ) 을선택하고다음으로검색안함, 설치할드라이버를직접선택 을클릭한다. 그림과같이지원드라이버가표시되지않으면 디스크있음 을클릭한다.
Section 5. adb 연결 제공되는 BSP CD 에서 Misc 폴더에있는드라이버경로를지정한다. 해당드라이버가 호환가능한하드웨어표시 에나타나면선택한다.
Section 5. adb 연결 드라이버가설치되었다. 드라이버가설치되면 'USB 대용량저장소장치 가추가된다. 이드라이버는내컴퓨터에서 이동식디스크 를생성한다. 안드로이드에서 USB연결을선택하면타겟보드에 SDcard를이동식디스크처럼사용이가능하다.
Section 5. adb 연결 다른하나의드라이버는 Hybus XHYPER320TKU_Andorid Composite ADB interface' 가추가되는데이드라이버를이용하여이클립스에서 adb를통한어플리케이션다운로드및화면캡쳐를수행할수있다. 드라이버설치가완료되면재부팅한다. ( 이클립스의자세한사용법은설명하지않는다.) 이클립스에서 apk다운로드 1. 이클립스에서프로젝트생성또는기존의프로젝트를불러온다. 2. Run Configuration.. 에서 AVD선택을 Manual로선택한다. 3. 프로젝트를 (Run) 컴파일하고실행시킨다. 4. 어떤 AVD를사용할지선택해야하는경우타겟보드를선택한다. 5. apk가타겟보드로다운로드되고실행된다.
Section 5. adb 연결 이동식디스크사용하기 1. 안드로이드의상단상태표시바를클릭하여내리면 USB connected 라는단추가보인다. 2. 버튼을클릭하고마운트를선택한다. 3. 이동식디스크가생성되고 SD 카드의내용을확인하고파일이동이가능해진다.
Section 6. TEST APP. 디바이스테스트를위해제공되는어플리케이션목록이다. Donut Support device app Driver / Components Camera Wireless Lan Ethernet USB GPS SD/MMC Mediaplayer Audio IEB Devices 비고 preview/capture app web brawer <- 암호있는 AP 접속불가 2port adb support GPS app Android Support Android Support Voice speaker/ mic app LED, FND, DOT, CLCD app 파일시스템을올리고안드로이드를부팅하면다음과같은기본어플리케이션이설치되어있다.
Section 6. TEST APP. Audio Recoder Audio Recoder프로그램은헤드셋을이용하여마이크로녹음할수있다. 출력은스피커또는헤드셋으로출력된다. Camera Camera 뷰어를실행하여오른쪽에 preview버튼을클릭하면카메라동작을확인할수있다.
Section 6. TEST APP. GPS GPS 모둘은옵션으로제공되며테스트어플을실행할때에는 GPS수신이가능한지역에서실행하여야한다. FND FND를제어하기위한어플리케이션
Section 6. TEST APP. DOT DOT Matrix를제어하기위한어플리케이션 CLCD Character LCD를제어하기위한어플리케이션
Section 6. TEST APP. LED LED를제어하기위한어플리케이션 웹브라우저 Android에서기본적으로제공되는웹브라우저를이용해서무선랜및유선랜을테스트할수있다.
Section 6. TEST APP. 미디어플레이어 Android에서기본제공되는플레이어를통해동영상및음악재생이가능하다.
Section 6. TEST APP. 이미지뷰어 Android에서기본제공되는이미지뷰어를통해이미지를볼수있다.
Section 7. XDB Download Install Marvell 홈페이지에서 Marvell C++ Software Development Tool Suite for Intel XScale Microarchitecture, Professional, v2.1 를 PC에설치한다. Setup Marvell(R) XDB Debugger 를실행하고 New 를선택한다. Target 과 Initial Batch File 을설정한다.
Section 7. XDB Download CPU-JTAG 에서 Board 를 PXA3XX 로세팅한다. 완료되었으면 save As로저장한다. 저장되었으면보드에전원을 on 하고 Start를눌러실행한다. 케이블이연결이잘되었는지시스템이잘구동되었는지확인한다.
Section 7. XDB Download Flash fusing 은상단의아이콘을클릭해서 fusing 한다. 보드는 PXA320, Flash는 NAND Flash로설정하고부트로도의경우offset in flash는 0x0번지로하고 Burn을클릭한다. DataFile에는 Download할이미지를지정한다. Fusing 이끝나면 XDB 상에서 RUN 을하거나시스템을재부팅해서확인해본다.
Section 8. Jflash Download 1. Host PC 와의연결 X-Hyper320TKU X-Hyper320TKU는그림과같은 JFLASH BOARD를사용해야한다. 20PIN 케이블을 320TKU와연결하고 6핀 JTAG Cable은호스트PC의 PRINTER포트에연결한다. 이더넷1 포트를사용한다.
Section 8. Jflash Download 2. GiveIO Driver 의설치 Jflash를사용하기위해서는 GiveIO Driver를설해야한다. 이미설치되어있다면다시설치하지않아도된다. ( 제어판 -> 시스템-> 하드웨어-> 장치관리자포트항목에서확인 ) 1. GiveIO Directory에있는 giveio.sys File을 C: WINDOWS system32 drivers 로복사한다. 2. 제어판상에서 새하드웨어추가 항목을실행하면아래와같은화면이나타나는데여기서 " 다음 " Button을 Click하여 Hardware 추가를시작한다.
Section 8. Jflash Download 3. 아래와같은화면이나타나면 예, 하드웨어를이미연결했습니다. 를선택한후 다음 Button을 Click 한다. 4. 아래와같이 새하드웨어장치추가 를선택하고 다음 Button 을 Click 한다.
Section 8. Jflash Download 5. 아래와같이 목록에서직접선택한하드웨어설치 ( 고급 ) 을선택하고 다음 을 Click 한다. 6. 아래와같이 포트 (COM 및 LPT) 를선택하고 다음 을 Click 한다.
Section 8. Jflash Download 7. 아래와같은화면이나타나면 " 디스크있음 " Button 을 Click 한다. 8. 아래의화면이나타나면 " 복사할제조업체파일위치 " 에 GiveIO Driver가존재하는 Directory 경로 ("GiveIO" Directory) 를지정하고 " 확인 " Button을 Click한다.
Section 8. Jflash Download 9. 아래와같은화면이나타나면 " 다음 " Button 을 Click 한다. 10. 아래에서 " 다음 " Button 을 Click 하여설치를시작한다.
Section 8. Jflash Download 11. 만약아래와같은화면이나타나면 " 계속 " Button 을 Click 한다. 12. 설치가종료되면아래와같은화면이나타납니다. " 마침 " 버튼을 Clicik하여설치를끝낸다.
Section 8. Jflash Download 13. 제어판의 " 장치관리자 " 상에서아래와같이 " 포트 (COM 및 LPT)" 항목에 "giveio(comx)" 가추가된것이확인되면 GiveIO Driver가정상적으로설치된것이다. 3. Dummy.bin flash write 3.1 jflashmm-pxa320 실행 "Jflashmm-pxa320" 디렉토리에서 jflashhyper320m.exe를실행하여 dummy.bin을 write한다.
Section 8. Jflash Download armdos(cmd.exe바로가기 ) 실행후에 "jflashhyper320m pxa320 dummy.bin" 명령을실행한다. 3.2 dummy.bin 동작 Flash Write가완료되고타겟보드를꺼다키면 dummy.bin이동적된다. 시리얼설정을아래와같이하고, 타겟보드를 power off -> power on한다.
Section 8. Jflash Download 아래와같이 Dummy Loader 메세지를확인한다. (help: 명령어리스트 )
Section 8. Jflash Download Dummy> 프롬프트에서 nand_format, nand_reinit 를실행하여 nand flash를초기화한다. 4. Bootloader Download Dummy 에서 tftp로리눅스부트로더 (boot.bin) 를다운로드하고 nand write하여리눅스부트로더를타겟보드에올린다. 4.1 TFTP 설정호스트PC tftp서버는 "UTIL Tftpd32 tftpd32.exe" 을실행하고, Current Directory에다운로드할이미지가있는디렉토리를선택한다. - "Image" 디렉토리를선택하면된다. Server interface는호스트pc의 IP 이다.
Section 8. Jflash Download 호스트PC tftp설정을한후타겟보드 dummy에서 ip설정을한다. 서버IP가 192.168.1.100, 타겟보드IP가 192.168.1.50 이라면아래와같이세팅한다. 4.2 boot.bin Download 1. tftp설정후에 boot.bin 이미지를다운로드한다. tftp boot.bin 2. 다운로드받은이미지를 flash write한다. nand_write boot.bin
Section 8. Jflash Download flash write가완료된후 reboot 하면리눅스부트로더가실행된다. X-Hyper320X 유저메뉴얼을참고로 OS이미지를올리면된다.