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

안녕하세요...

고도리입니다.

요즘 김재훈님/최종환님이랑 여러가지 얘기를 해 가면서 2.6.29 android를 aesop-6410에 대략 포팅했습니다.
그러다 보니 게시판은 난리도 아니고, 쩝....

해서 android 포팅에 대해서 약간 정리를 해볼까 해서 글을 올립니다.

이번글은 제가 쓰지만, 앞으로는 김재훈님께서 쓸 수 있도록 뒤에서 협박하도록 하겠습니다....ㅎㅎㅎ

자 그럼 본론으로 들어가겠습니다.
==========================================================================
시작하기 전에....^^

기본사항: android용 커널과 일반 linux kernel은 틀립니다.
즉, android용 커널은 일반 커널을 android에 알맞게 수정되었다고 보시면 됩니다.


안드로이드를 포팅하는데는 두가지 방향이 있습니다.

1. target에 맞춰진 커널 version에 android용 코드를 포팅한다.
(ex> 2.6.24 samsung kernel에 2.6.25의 android 코드를 이식)

2. android용 커널에 target부분을 포팅한다
(ex> 2.6.29 android kernel에 aesop-6410 코드를 이식)

 

현재 s3c6410용 커널은 다음과 같은 버전이 있습니다.

1. 2.6.21.5(samsung)
2. 2.6.24(samsung) - 이것도 공개는 되어 있습니다
3. 2.6.28-rc8(samsung의 git용 커널) - 공개용
4. 2.6.28-rc4(openmoko) - ben dooks씨의 openmoko용 작업 커널
5. 2.6.28.6(samsung) - 2009/03/09 version과 2009/03/24 version 두개가 있습니다.

 

구글의 Android는 날짜에 따라 약간 커널 버전에 차이가 있습니다.

1. 2.6.23 - 2009년 10월 21일 android 공개용 버전이 나오기 전의 커널인 듯
2. 2.6.25 - android 초기 release 버전
3. 2.6.27 - 2009/02/09 android 1.1버전서부터 바뀐 듯(정확히 다시 살펴봐야함...^^)
4. 2.6.29 - 2009/04/10 android kernel 개발 버전에서의 upgrade


대략 이정도로 정리할 수 있겠네요.

 

현재 s3c6410용으로 포팅되어서 공개된 커널은

1. kandroid의 invain님께서 포팅하신 2.6.24(samsung)커널에 android를 포팅한 커널이 유일합니다.

 

=======================================================================================

자 이제서부터 포팅을 해야하는데 어떤 방향으로 나가야 할지 결정을 해야합니다.
위에서 언급한 android를 포팅하는 두가지 방향에서 어떤방식으로 할지를 결정해야합니다.


1. android kernel이 2.6.27이었을 시점에서는

2.6.27 android kernel의 특징부분을 ==> 2.6.28.6(혹은 2.6.28-rc8)로 포팅
2.6.28.6(혹은 2.6.28-rc8)의 6410의 특징부분을 ==> 2.6.27 android kernel로 포팅

이렇게 두가지 방향으로 나뉠 수 있습니다.

어떤게 낫느냐고 얘기한다면 전자가 낫다라고 보여지고, aesop-6410에서도 최종환님의 도움을 받아서
위와 같이 처리하였습니다.


2. android kernel이 2.6.29로 올라선 시점에서는

2.6.28.6의 s3c6410 특징부분을 ==> android 2.6.29로 올리는게 유일한 방법으로 보여집니다.

커널을 낮은버전에서 높은 버전으로 올리는 것은 잘 되는 경우가 많지만, 높은 버전에서 낮은 버전으로는
내리기 힘들기 때문입니다.

 

========================================================================================

android를 포팅하는데는 기존의 포팅이 가장 도움이 됩니다.

즉, 다른 사람의 도움이 가장 도움이 된다고 보여집니다.
제 경우는 2.6.24 kandroid(by invain)를 일단 참조를 많이했고요.

전체적인 것은 2.6.27 android kernel과 원본 2.6.27 커널을 비교하면서 다시 포팅 포인트를 잡았습니다.

최종적으로는 2.6.28-rc8에 포팅할때는 최종환님이 많은 도움을 주셨고요.
그 후에는 서로 핑퐁하면서 개발하였습니다....ㅎㅎ


포팅 포인트는 어떻게 되는가 하면

위의 두 방향중

1. android 2.6.27이었을 시점에서는

2.6.27 android kernel을 2.6.28.6로 올리는 작업이 낫습니다.

1> arch/arm 부분의 process.c와 signal.c의 바뀐 부분을 수정하고
2> memory 관련 부분을(DEVMEM/ASHMEM)등을 포팅하고
3> binder, logger등의 android 전용 device driver등을 포팅합니다.
4> target의 device driver들을 android에 맞게 재 포팅(ex> touchscreen)

이 경우 가끔 android에 적용되었던 부분을 포팅을 하면서 빼먹는 경우가 발생해서
굉장히 힘든경우가 있습니다.

뭐, 제대로 안드로이드가 안 뜨는거죠....ㅎㅎ


2. android가 2.6.29로 바뀐 후는

간단합니다...

2.6.29 android kernel에 target을 포팅하는겁니다.

물론, android쪽 테스트는 추후에 하고, 일단 일반적인 root filesystem으로 부팅해서
각종 디바이스 드라이버들의 동작을 확인한 후에

android부분을 살려서 android root filesystem으로 테스트해야합니다.

==========================================================================================


이 외에 별도의 삽질....

android kernel 2.6.29에서는 많은 patch가 이루어져서 run되면서 죽는 경우가 드물지만
예전 2.6.27에서는 android kernel자체에 버그가 많아서 패치들을 몇가지 해줘야
정상적인 동작을 하더군요.

==> 웹이 죽을 경우 등등....

꽤 삽질했습니다....쩝...


오늘은 대충 이정도로 마무리 하도록 하고요, 나중에 다시 다른 부분들에 대한 포팅가이드를 올리던지
하겠습니다...

어제 과도한 음주로 인하여 좀 일찍 자야하는데, 피곤만하고 잠도 안오네요...ㅠ.ㅠ

H.264 책 보던거 마저 정리해야겠습니다...쩝

그럼....

 


 


장석원

2009.04.23 16:08:09
*.186.65.152

고현철님 ....   오랜만에 답글 써 봅니다
안드로이드관련 좋은정보 잘 배우고 갑니다 ....
제가 얼마전에 지메일로 핸폰번호 드린걸로 한번 연락이나 주세요 ....  기다리께요 ....

노희준

2009.04.23 17:55:47
*.76.203.238

정리를 깔끔하게 해주셨네요. 내용은 대충 이해가네요. 아무래도 삽질을 많이 하신듯... 고생이 많네요.

유형목

2009.04.23 19:00:57
*.32.117.22

리눅스 커널 버전 2.6.30 이나 2.6.31에서는 안드로이드용 커널과 통합된다는 소식이 있습니다.
그 전까지는 어쩔수 없이 버전이 바뀔때마다 저 삽질을 매번해주어야 합니다. -_-;

업체마다 다들 안드로이드 올리느라고 연일 밤새우는게 보일정도이니..

2.6.31 나올때 까지 그냥 기다리자니 갑갑하고, 해보자니 삽질의 연속이고
진퇴양난 <- 이게 아마도 고도리님의 지금 심정이겠지요.

고달픈 4월도 이래저래 지나가는군요.
List of Articles
번호 제목 글쓴이 날짜 조회 수
24 Google Android 커널 버전별 Testing Report [2] 김재훈 2009-05-17 11493
23 Android 동작시 Battery 관련 /sys 파일 에러 & Power off ... [2] 2009-05-09 11010
22 Android 커널 2.6.27~28버젼에서 CONFIG_SUSPEND옵션시 죽는 문... [3] 2009-05-08 10026
» S3C6410 target으로의 Android porting에 대하여(1) [3] 고현철 2009-04-23 20133
20 Android 초보도 가능한 Touch 잡기. [1] 2009-04-23 12229
19 touch calibrate 방법 file [1] 전병환 2009-04-23 10442
18 Android에서의 Linux Network 환경 설정 방법 [1] 김재훈 2009-04-21 20515
17 PV와 Android [5] 이제현 2009-04-19 18163
16 OpenGL ES와 Android [3] 이제현 2009-04-18 22839
15 Android에서 yaffs2 image 만들때 oobfree 따르도록 수정 file [1] 2009-04-16 11896
14 안드로이드 6410 보드 관련 s3c-ts touch 잡기 [5] 김한철 2009-04-16 13738
13 Android yaffs image 흠..oob가 이상합니다. 2009-04-16 10888
12 File System 관련 문제 및 power off 문제 해결 [3] 김한철 2009-04-14 10202
11 Google Android Kernel-2.6.29 file 관리자 2009-04-14 12085
10 aesop-6410용 android 2.6.24 source file [12] 고현철 2009-04-12 12131
9 android를 6410에 포팅하면서... [7] 전병환 2009-04-10 18227
8 Android Debug Bridge(ADB) 사용 가이드 김재훈 2009-04-09 18864
7 Android Initialization Process 최종환 2009-04-09 24638
6 Android 부팅 및 초기화 절차 김재훈 2009-04-09 17000
5 Android용 root filesystem으로 cramfs 구성 할 때의 주의사항 [7] 김영문 2009-04-09 21375

사용자 로그인