포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

안녕하세요.

 

고도리입니다. 오늘은 목/금/토 연타석 술에 찌들어 지낸 일요일 후유증에 하루종일 힘들었습니다.

(강의도 오후에는 힘들더군요...ㅠ.ㅠ, 그냥 커피--저한테는 마약수준인--한잔먹고 버텼습니다)

 

오늘은 새로운 vendor와 product를 만들어서 컴파일 하는 방법을 써 볼까 합니다.

 

저한테 강의 들으시는 분들은 직접 실습을 해 보실 수 있지만, 온라인으로 보시는 분들은 실수 하셔도 제가

봐드리기 힘드니, 잘 따라 하셔야 할 듯 하네요....ㅎㅎ

 

손으로 치지 마시고, 되도록이면 copy and paste를 이용하시는게 도움이 될 듯 하네요(저도 항상 애용합니다)

 

새로운 vendor는 aesop으로 정하고, 새로운 product는 ntc100으로 정하도록 하겠습니다.

 

자 이제 시작합니다.(경어체는 아니나 기분나쁘게 생각치는 마시기 바랍니다.)

-------------------------------------------------------------------------------------------------------------------------------------------------

 

참,  등호로 이루어진 한줄은 그냥 구분자이니 copy 하지 마시기 바랍니다......ㅎㅎ

 

1. 일단 android를 다운로드 받은 디렉토리로 움직인 후에 aesop이란 vendor를 하나 만듭니다.

기존에 있는 sample을 이용해서 하나 만들도록 하겠습니다.

 

cd vendor

cp -a sample aesop
cd aesop


Android.mk와
products 만 빼고 전부 삭제

====================================================================================
rm -rf apps/ frameworks/ sdk_addon/ skins/
====================================================================================


2. 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
====================================================================================

 

3. 새롭게 추가된 board에 대한 directory 구성

- 기존의 generic board의 것을 이용한다. generic board 디렉토리를 ntc100 디렉토리로 복사

cd ..
cp -a ../../build/target/board/generic/ ./ntc100


- 이 부분은 적용하지 않아도 된다. 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 에 넣어줘야 한다.
==================================================================================

 

4. 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


 

5. android build

 

android top 디렉토리에서


./ntc100.sh

 

여기서 cpu가 별루 없는 장비 혹은 virtual box를 이용하시는 분들은 한숨 주무시던지, 어디가서 찐하게 놀다오시면

됩니다.

 

cpu 1개의 경우 대략 4시간 걸립니다. cpu 4개면 대략 1시간 걸릴겁니다.

 


6. 다 build 된 후 NFS용 root filesystem 만들기

 

// make rootfs with nfs
cd  out/target/product/ntc100
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/


cd /root/rootfs/gst
chown -R root.root *
chmod -R 777 data system

 

 

이렇게 해서 root filesystem을 만든 후에 init.rc를 nfs로 부팅할 수 있도록 수정한다.
(nfs.init.rc 참조)

 

※ mkrootfs script 참고


7. NFS 세팅 후 부팅

 

vi /etc/exports

 

해당 디렉토리 부분 추가한 후

/root/work/rootfs/test *(rw,no_root_squash,no_all_squash)

 

nfs server restart


/etc/init.d/nfs-kernel-server restart


bootloader에서 boot argument를 다음과 같은 방식으로 추가해 주시고 부팅하시면 됩니다.

 

setenv bootargs mem=256M init=/init root=/dev/nfs rw nfsroot=192.168.0.199:/root/work/rootfs/test ip=192.168.0.101:192.168.0.199:192.168.0.1:255.255.255.0::eth0:off console=ttySAC1,115200n81

 

 

----------------------------------------------------------------------------------------------------------------------------

 

자 이렇게 하시면 android로 부팅은 시작하는데, 실제로 부팅은 안될겁니다........ㅎㅎ

 

다음시간에는 부팅이 안되는 이유와 수정사항에 대해서 설명드리겠습니다.

(수정은 오래 안걸립니다......Battery 문제라 몇줄만 고쳐주시면 부팅은 금방 되거든요...^^)

 


관리자

2010.05.18 11:10:58
*.66.210.20

nfs 형태의 부팅은 ethernet 있는 보드만 가능하지만......

 

실제로 usb gadget을 cdc ethernet으로 세팅을 하시면 usb device로도 가능합니다.

대부분의 핸폰 제조사에서는 fastboot를 이용한 nand writing으로 개발하고 있습니다만...

 

개인적으로는 nfs의 속도를 따라오기는 좀 힘들지 않을까 생각합니다.

그리고, NFS 없이 리눅스 개발은 앙코없는 찐빵이 아닐까나........하고 생각도 해 봅니다...ㅎㅎ

 

그래서 ethernet없는 분들을 위해서 odroid관련 공부하시는 분들이 내놓은 해법이 여기 있습니다...,^^

 

http://www.aesop.or.kr/?document_srl=245257#2

 

당근 aesop c100은 되겠지요?....안될래나....나중에 함 해봐야겠습니다.

 

ㅎㅎ

김성재

2010.05.19 07:04:10
*.14.254.41

좋은글 늘 감사드립니다.

 

질문있습니다. 어떤 문서에 보니

 

cp -a build/target/board/generic build/target/board/ntc100

이런식으로 해서 수정 하는것도 봤습니다.

 

cp -a ../../build/target/board/generic/ ./ntc100

이것과 어떤 차이점이 있는지 여쭤봅니다.

 

고도리

2010.05.26 07:17:22
*.66.210.20

ㅎ, 제가 실수 했네요....잘못봤습니다.

 

저는 vendor쪽만 만들어봤는데, 어차피 위치는 큰 상관이 없을겁니다.

내일 함 해봐야겠네요.

김성재

2010.05.25 22:32:24
*.121.88.91

cp -a build/target/board/generic build/target/board/ntc100

는 build/target/board 아래 위치한 것이고

 

cp -a ../../build/target/board/generic/ ./ntc100

는 vendor 아래 위치하는 것 같아 경로가 다른것이라 생각 되어 차이점을 여쭤보는 것인데요.

 

그렇다면 builder/target/board /와 vender/ 의 경로가 같다는 말씀이신가요?

고도리

2010.05.24 11:28:05
*.66.210.20

동일한 얘기입니다.

 

결과적으로는 어느 디렉토리에서 명령어를 치느냐죠...실제로 경로는 동일합니다.

유형목

2010.05.22 09:09:26
*.131.98.102

일단 노트북에 Virtualbox + 우분투 10.04 + JAVA 1.5.0 조합으로 여기까지 쫓아왔습니다.

현재 컴파일중입니다. 노트북이라 엄청 느리긴 해도 에러는 안나는걸로 봐서 별 문제는 없을것 같습니다.


이렇게 백수가 빨리 될줄 알았더라면 보드 한개는 남겨둘껄 그랬습니다.

테스트해볼 기계가 없으니 아쉽네요.


고도리님의 다음 게시물을 기다려 봅니다. ^^;

김범규

2010.06.15 19:38:24
*.92.203.166

j16옵션으로 쿼드에서 26분 걸립니다. 이클레어 기준입니다.^^;;

CPU 1개 일때에는 j옵션 안준걸 기준으로 한다면 2시간 좀 넘게 걸리던데.^^


오랫만에 들어와서 하나하나 읽어보고 있습니다.

좋은글 계속 부탁드립니다.


PS-책 내주세요..ㅜㅜ 중국어 보기 힘들어요..

List of Articles
번호 제목 글쓴이 날짜 조회 수
64 Google 의 새로운 코덱 VP8 Video Codec 규격자료를 올려 봅니다... file [1] 장석원 2010-05-24 14955
63 [실습-03] android source compile시 battery 부분 patch하기 [7] 고도리 2010-05-24 15897
» [실습-02] android에서 new product 만들고 compile하기 file [7] 고도리 2010-05-18 13223
61 [이론-00] Android의 개요와 구성 part0 [2] 고도리 2010-05-17 12471
60 [실습-01] android 개발환경 세팅과 source download [2] 고도리 2010-05-17 13781
59 [실습-00] android eclair porting을 위한 ubuntu 설치하기 file [6] 고도리 2010-05-17 12321
58 AudioSystem과 AudioSystem.java를 이용한 JNI 단에서의 연결 [1] JhoonKim 2010-04-14 10871
57 AudioPolicyService와 AudioFlinger 및 HAL의 연결 구조 JhoonKim 2010-04-08 11296
56 Android 2.x AudioFlinger와 HAL의 연결 구조 분석 [2] JhoonKim 2010-04-08 19343
55 busybox에 대한 질문 [3] 득드로이드 2010-03-24 8881
54 누가 Android 에 tslib를 포팅해 놓은듯 합니다. file 최종환 2009-11-11 11062
53 Android Battery 부분 조금 정리해 놓은것 file [2] 최종환 2009-11-04 10726
52 Power Management from Linux Kernel to Android file [10] 최종환 2009-11-01 14996
51 이솝 임베디드 포럼 - 10월 31일 Google Android Seminar 발표 ... file [16] 관리자 2009-10-28 10898
50 Dummy Battery 드라이버 입니다. file [3] 관리자 2009-10-10 10263
49 [참고] Android wifi howto - 아직 테스트는 다 못했습니다. file [10] 고도리 2009-09-22 21723
48 [번역] Android Camera Framework 번역 file [7] 고도리 2009-09-10 19665
47 Android home key is not working(home key 동작 안 할경우 ) [1] 고현철 2009-09-10 10597
46 S3C6410 프로세서용 Andoird Kernel 2.6.29 이식 방법 #1 [2] 김재훈 2009-09-04 15823
45 삼성 안드로이드폰(갤럭시) 리눅스 커널 소스코드 file [3] 유형목 2009-09-01 15909

사용자 로그인