Target Board을 이솝 커뮤니티의 S5PC100 보드를 사용하므로, 이솝 프로젝트 사이트 내용을 참고합니다.
http://www.aesop.or.kr/?mid=issuetracker&vid=AESOPC100
1. Install GCC Tool chain
- Download : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100
GCC : arm-s5pc1xx-linux-gnueabi-4.3.2.tar.gz
GCC 4.3.2 을 사용하며, GCC 관련 자료는 http://gcc.gnu.org 확인 하시기 바랍니다.
- 압축해제
이솝 보드용 Tool chain은 호스트 시스템의 /opt 디렉터리에 설치를 합니다.
/opt 폴더를 복사하고, 다음의 명령으로 압축을 해제하시면 됩니다.
sudo tar xzf arm-s5pc1xx-linux-gnueabi-4.3.2.tar.gz
- 환경설정
Tool chain 의 Path 을 설정해주는 것이며, 다음과 같이 합니다.
sudo gedit /etc/profile
아래와 같이 창이 열리면, 선택된 부분과 같이 아래 Path 을 추가해 줍니다.
PATH=$PATH:$HOME/bin:/opt/s5pc1xx/cross/armv7a/bin
source /etc/profile
PATH 설정 확인
echo $PATH
arm-s5pc1xx-linux-gnueabi-gcc –v
2. Install & Build U-Boot
- Download : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100
U-Boot 1.3.4 : u-boot-1.3.4-aesop.100428.tar.gz
- 압축해제
본인이 사용할 적절한 위치에 압축을 풀어 주시면 됩니다.
tar 명령어로 하셔도 되고, 그냥 파일 브라우저에서 압축해제 툴로 바로 실행하셔도 풀어도 됩니다.
- U-Boot Build
다음과 같이 명령어를 수행합니다.
make clobber <- 기존에 만들어 것들을 제거
make ntc100_config <- 이솝보드용 config 설정
make
빌드 완료가 되면 아래 화면에서 처럼 u-boot.bin 을 사용하면 됩니다.
3. Install & Build Android Linux Kernel
- Download : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100
Linux Kernel 2.6.29 : android-2.6.29-aesop-RTM10.tar.gz
해당 Kernel은 Android 및 X-Windows 모두 지원을 합니다.
- Kernel Build
tar xzf android-2.6.29-aesop-RTM10.tar.gz
cd android-2.6.29-aesop-RTM10
make ntc100_xwindows_defconfig <- X-Winodws 용 커널 빌드 시
make ntc100_android_defconfig <- Android 용 커널 빌드 시
make zImage
아래와 같이 빌드가 완료되었으며, arch/arm/boot/zImage 가 생성이 되었습니다.
4. Build Android
- Download 는 “Android 개발환경 구축” 게시물을 참조하시기 바라며,
추가로 이솝 보드용 소스는 아래와 같습니다.
Android Eclair : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100
- Build
Android source 가 있는 위치에서 아래와 같이 aesopc100_build.sh 을 실행하면 됩니다.
eastsky@ubuntu:~/dawid/android/android_eclair_aesopc100$ ./aesopc100_build.sh
빌드가 완료되면 아래와 같이 system.img 파일이 생성이 됩니다.
.. /android_eclair_aesopc100/out/target/product/smdkc100 아래 img 파일이 생성이 됩니다.
5. Make NFS – Android 용 Root Fils System
- NFS 용 디렉토리 생성 및 FS 파일을 복사 (본인에 맞게 적절한 곳을 지정하여 만들면 됩니다).
일단 /out/target/product/smdkc100 의 Output 파일들이 있는 곳으로 이동을 합니다.
cd /home/eastsky/dawid/android/android_eclair_aesopc100/out/target/product/smdkc100
root 에서 편하게 사용하기 위해 root 계정으로 전환하고 아래와 같은 경로로 생성합니다.
mkdir /root/work/rootfs/test
그리고 아래와 같이 파일들을 복사합니다.
cp -a root/* /root/work/rootfs/test
cp -a data /root/work/rootfs/test/data/
cp -a system /root/work/rootfs/test/system/
NFS 용으로 사용할 디렉토리 /root/work/rootfs/test 로 이동 합니다.
그리고 권한을 아래와 같이 변경하여 줍니다.
chown -R root.root *
chmod -R 777 data system
6. Android New Vender & Product (출처 이솝의 고도리님 : http://www.aesop.or.kr/?document_srl=265476#7)
이솝 보드용 Android 소스를 그대로 사용하면 굳히 따로 아래와 같이 Vendor 을 따로 안 만들고 하셔도 됩니다.
l 일단 android를 다운로드 받은 디렉토리로 움직인 후에 aesop이란 vendor를 하나 만듭니다.
기존에 있는 sample을 이용해서 하나 만들도록 하겠습니다.
cd vendor
cp -a sample aesop
cd aesop
Android.mk와
products 만 빼고 전부 삭제
================================================
rm -rf apps/ frameworks/ sdk_addon/ skins/
================================================
l products를 새롭게 정의
1>
cd products
vi AndroidProducts.mk
===========================================
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/sample_addon.mk
==> 이렇게 된 것을 새로운 보드 이름으로 대체
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/ntc100.mk
===========================================
그리고 기존의 복잡한 sample관련 mk 파일을 지웁니다.
rm sample_addon.mk
2>
ntc100.mk를 다음과 같이 edit
vi ntc100.mk
=============================================
$(call inherit-product, build/target/product/generic.mk)
PRODUCT_MANUFACTURER := aesop
PRODUCT_NAME := ntc100
PRODUCT_DEVICE := ntc100
PRODUCT_BOARD := ntc100
=============================================
l 새롭게 추가된 board에 대한 directory 구성
- 기존의 generic board의 것을 이용한다. generic board 디렉토리를 ntc100 디렉토리로 복사
cd ..
cp -a ../../build/target/board/generic/ ./ntc100 <- Vender 만 새로 만든 것입니다.
- 이 부분은 적용하지 않아도 된다. board에 따라 틀림(kernel에 따라)
이 부분은 product의 kernel 내에서의 keypad driver에 따라 keylayout을 지정하는 부분인데,
이 부분은 건너뛰어도 됩니다.
그냥 이게 없으면 qwerty.kl 이 로딩되거든요.
================================================================
vi AndroidBoard.mk
tuttle2를 nt-keypad로 수정(여기서 nt-keypad는 key device driver의 이름이다)
mv tuttle2.kcm nt-keypad.kcm
mv tuttle2.kl nt-keypad.kl
=================================================================
vi BoardConfig.mk 해서 USE_CAMERA_STUB:=true 를 추가한다.
- 이유는
=================================================================
//주의사항
frameworks/base/camera/libcameraservice/Android.mk를 보면
#
# Set USE_CAMERA_STUB for non-emulator and non-simulator builds, if you want
# the camera service to use the fake camera. For emulator or simulator builds,
# we always use the fake camera.
ifeq ($(USE_CAMERA_STUB),)
USE_CAMERA_STUB:=false
ifneq ($(filter sooner generic sim,$(TARGET_DEVICE)),)
USE_CAMERA_STUB:=true
endif #libcamerastub
endif
이 경우
USE_CAMERA_STUB:=true 를 BoardConfig.mk 에 넣어줘야 한다.
=================================================================
l build script 만들기
android top으로 가서 vi ntc100.sh 해서
=======================================================================
#!/bin/sh
CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
START_TIME=`date +%s`
echo make -j$CPU_JOB_NUM PRODUCT-ntc100-eng
echo
make -j$CPU_JOB_NUM PRODUCT-ntc100-eng
if [ $? != 0 ] ; then
exit $?
fi
END_TIME=`date +%s`
echo "Total compile time is $((($END_TIME-$START_TIME)/60)) minutes $((($END_TIME-$START_TIME)%60)) seconds"
========================================================================
저장하고 나온 후에
(
이 명령은 samsung의 C100 code를 보면 build script가 있는데 그것을 베낀 것입니다.
실제로는 host의 cpu갯수를 읽은 후에
make PRODUCT-ntc100-eng
-j 옵션을 이용해서 실행하는 것입니다.
)
생성된 script에 실행 permission을 줍니다.
chmod 755 ntc100.sh
'안드로이드' 카테고리의 다른 글
Android WireShark TCP dump (0) | 2012.07.12 |
---|---|
[WiFi Direct] WiFi Direct in Android 4.0 API Overview (번역) (0) | 2012.05.07 |
Framework에서 Attrs.xml에 추가하기 (0) | 2012.02.03 |
Device Administration (0) | 2012.01.28 |
MIME-Type 의 종류 (0) | 2012.01.26 |