8/06/2014

ODROID Android- BUILD2

1. 개발환경설정 

repo 설치
  https://ahyuo79.blogspot.com/search/label/SCM-Repo

$ vi .bash_profile  or .bashrc // 매번 export로 설정하기 귀찮아서 직접설정
ARCH=arm 
CROSS_COMPILE=arm-none-eabi- 


2. Build Android

Android Source Build 와 fastboot를 이용하여 Image 굽기 

download site
  http://dn.odroid.com/

$ repo init -u https://github.com/hardkernel/android.git -b 4412_4.4.4_master
Your Name  [xxxx]:        // 이름 확인
Your Email [xxxxx]:       // E-Mail 확인
Your identity is: xxxxxxxxxxxxx // 이름과 E-Mail 확인
is this correct [y/N]? y
repo has been initialized in /home/xxxxxxx     // 초기화 된후 .repo 생성 

$ repo sync -j 16
$ repo start 4412_4.4.4_master --all

2.1 Setting 및 Build

$ cd android
$ vi device/hardkernel/odroidx2/BoardConfig.mk   // 최신소스 수정필요없음 (아래항목없음)
     BOARD_USES_EMMC = true -> Use eMMC        
     BOARD_USES_EMMC = false -> Use SD Card
$ chmod u+x ./build_android.sh

$ ./build_android.sh odroidx2     // Build 


Ref.
  http://dev.odroid.com/projects/howtobuild4


2.2 Fastboot Flash Image

  • Host 에서 Android Flash 방법 
fastboot를 이용하여 flash 진행 
#fastboot flash system system.img   //fastboot flash  partition 이름  file 이름 
#fastboot flash userdata userdata.img       
#fastboot flash cache cache.img
#fastboot reboot 

Google Fastboot 사용법
  https://source.android.com/setup/build/running
  https://blog.dasomoli.org/381/

Android Partition Table
  https://android.stackexchange.com/questions/5232/how-can-i-view-the-android-internal-partition-table

  • 참고사항 A
각 Makefile 및 drivers 체크

$ ls device/hardkernel/odroidx2/BoardConfig.mk             // Board 관련된 정보 확인.
$ ls device/hardkernel/odroidx2/drivers/                   // X2 kernel module 위치확인

  • 참고사항 B
Sun JDK 사용시에는 문제가 없었는데, OpenJDK 사용하니 문제가 발생해서 , 다시변경 .
============================================
Checking build tools versions...
************************************************************
You are attempting to build with an unsupported JDK.


You use OpenJDK but only Sun/Oracle JDK is supported.
Please follow the machine setup instructions at
    https://source.android.com/source/download.html
************************************************************


2. Download & Build  Linux Kernel

ODROID 의 Linux Kernel Download 및 Build 후 Image write 

$ git clone https://github.com/hardkernel/linux.git -b odroid-3.0.y-android
$ cd linux
$ ls arch/arm/configs/odroidx2*                         // 확인후 설정
$ make  odroidx2_android_442_defconfig   
$ make zImage   or make                                // make는 moudles도 함께,           
$ ls arch/arm/boot/
$ make modules -j4      
$ make modules_install  INSTALL_MOD_PATH=~/tmp          // 임시설정, 위의 Android에 복사


2.1 Flash Image

# fastboot flash kernel arch/arm/boot/zIamge
# fastboot reboot


3. Download & Build  Uboot

ODROID 의 Uboot Download 및 Build 후 Image write 

$ git clone https://github.com/hardkernel/u-boot.git
$ cd u-boot
$ ls board/samsung/smdk4212/     // 소스 확인
$ make distclean
$ make smdk4412_config
$ make
    ( 위 make 시 아래 파일 생성 ./mkbl2 u-boot.bin bl2.bin 14336 (bl2.bin n파일 생성)

$ cd sd_fuse                    // 난 아래와 같이 사용.    
$ ./sd_fusing_4412.sh /dev/sdb  // Flash Image 
  (/dev/sdb는 현재 SD카드가 마운트되어 있는 장치파일로 지정 : sudo fdisk -l 명령어로 확인가능)
$ sync


4. Build  SD Image

SD Image의 구성은 두 부분으로 구성
  1. 0M~100M의 Booting image
  2. 100M~500M FAT32로 구성된 kernel image 와 andoid filesystem 
현재 GPT구성이 아니며, FDISK 기반으로 구성 (MBR)


4.1 Main Image 구성

  • dd 와 fdisk 기반으로 Main Image 구성 

$ dd if=/dev/zero of=my_sd_self_installer.img bs=1k count=500k  // 500M image 설정

$ fdisk ./my_sd_self_installer.img   // fdisk를 사용하여 아래와 같이 설정  

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-1023999, default 2048): 204800
Last sector, +sectors or +size{K,M,G} (204800-1023999, default 1023999):


$ fdisk -l ./my_sd_self_installer.img

Units = sectors of 1 * 512 = 512 bytes

                     Device Boot      Start         End      Blocks   Id  System
./my_sd_self_installer.img1          204800     1023999      409600   83  Linux


// 204800 x 512 = 104857600  약 100M 부터설정 

4.2 Make Boot Image 구성

uboot Image 및 기타 bootloader를 삽입
$ sudo losetup -o0 /dev/loop0 ./my_sd_self_installer.img     //attach device offset=0 
$ cd u-boot/sd_fuse/
$ sd_fusing.sh /dev/loop0
$ sudo losetup -d /dev/loop0   //detach device


4.3 Make FAT32 Image

100M 이후 부터는 FAT32 Filesystem 생성 
$ sudo losetup -o104857600 /dev/loop0 ./my_sd_self_installer.img  //attach device offset= 204800 x 512 = 104857600 
$ sudo mkdosfs -F32 /dev/loop0
$ sudo losetup -d /dev/loop0   //detach device


4.4 Build FAT32 Image

기존에 존재하던 Image 및 boot.scr 들을  FAT32 Image에 mount 하여 복사한다.
$ sudo mount -o loop,offset=104857600 ./my_sd_self_installer.img ~/tmp //mount offset= 204800 x 512 = 104857600 
$ sudo cp -a ~/file/*      ~/tmp/
$ umount ~/tmp


ODROID Build 관련내용 
  http://odroid.com/dokuwiki/doku.php?id=en:androidplatformbuildguideforexynos4412

Loopback Device (dd 와 losetup) 기본사용법
  http://wiki.osdev.org/Loopback_Device

sd_fusing.sh 관련내용 
  http://chiccoder.tistory.com/40