이지랑드로랑 - 6장. System Halted 문제 해결하기

 

이거 또 얼마만 입니까?
여러분과 만나는것이 쉽지 않네요. 이것이 다 날씨가 추워서죠! (응?!)
죄송합니다. 핑계가 많습니다.

 

자! 말이 길면 재미 없습니다.
오늘은 안드로이드를 직접 컴파일 해서 올려보도록 할 겁니다.
첫날 안드로이드를 올려봤었죠?
그땐 CD에 제공된 것을 올렸지만 오늘은 성탄절도 오고 하니까 우리가 직접 해봐요!
안드로이드랑 성탄절을 보내는 것도 나쁘지 않잖아요? (ㅡ_ㅡ)

일단 아래 파일을 열어보도록 합시다.
이 파일을 컴파일 될 때 보드의 설정을 맞춰주게 될 파일이 되겠습니다.

vi {Android_SRC}/build/target/board/generic/BoardConfig.mk

내용은 아래와 같습니다.

# config.mk
#
# Product-specific compile-time definitions.
#

# The generic product target doesn't have any hardware-specific pieces.
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
TARGET_NO_RADIOIMAGE := true
HAVE_HTC_AUDIO_DRIVER := true
BOARD_USES_GENERIC_AUDIO := true
  

영어로도 친절하게 설명이 되어 있어요.
컴파일시 정의될 제품의 특징입니다.
일반적인 제품은 각각의 하드웨어 스팩에 대한 사항을 포함하지 않는데요.
이정돈 영어 다 되시잖아요. (사실 전 잘 안되요. ^^)

 

지금 5개가 기본으로 설정되어 있는데 더 추가하거나 뺄 수 있도록 되어 있습니다.
일단 추가하는거도 차후에 차차 해보도록 할 께요.
그렇다면 일단 기본적으로 추가된 저 옵션들이 뭔지 설명을 드릴께요.

TARGET_NO_BOOTLOADER := 부트로더를 포함하지 않습니다. (우린 자랑스러운 이지부트 매니아!)
TARGET_NO_KERNEL := 커널을 포함하지 않습니다. (저희 FALiNUX가 제공합니다!)
TARGET_NO_RADIOIMAGE := 라디오 이미지를 포함하지 않습니다.
HAVE_HTC_AUDIO_DRIVER := HTC 오디오 드라이버를 사용합니다. (저희는 ALSA를 쓸겁니다!)
BOARD_USES_GENERIC_AUDIO := 일반적인 오디오 설정을 사용합니다. (ALSA를 쓴다구요!)  

이 파일을 작성하실 때 주의하실 점이 있습니다.
앞에 옵션과 뒤에 설정값, 그리고 := 사이는 모두 스페이스 하나를 줘야 합니다.
이쁘게 보이겠다고 TAB을 주면 큰일납니다.
안되요. ^^ (분명히 저처럼 이런 삽질 하실 분 계십니다! 명심하세요!) 하하하.

 

우리가 여기서 잠깐 바꿔줄 것은 바로 오디오 쪽 드라이버 입니다.
이지보드는 ALSA 를 사용해서 오디오를 제어합니다.
안드로이드도 그런것들을 지원하고 있는데요, 일단은 차근차근 하기위해서...
HTC 오디오 드라이버를 빼버립시다! (두둥!)

#HAVE_HTC_AUDIO_DRIVER := true

위와 같이 HTC 오디오 드라이버 옵션을 주석처리해서 false로 바꿔줍니다.
그럼 안드로이드는 빌드될 때 HTC 오디오 드라이버는 함께 컴파일 되지 않습니다.

이제 빌드해 봅시다.

 

[그림5-1. 컴파일이 된 직후의 모습]

 

오랜시간 기다리고 나면 위 위와 같이 파일시스템 이미지가 설치되었다는 메시지를 볼수 있게 됩니다.
컴퓨터가 안좋으시면 꽤 오래 기다리셔야 할 꺼에요.
다들 코어2듀오급 이상은 쓰시잖아요.
그 이하는 씨피유가 아니잖아요! ^^
농담이구요, 피시 성능이 낮으신 분들은 정말 좀 오래 기다리셔야 하니까요 인내하세요.

 

우리가 원하는 파일들은 이제 모두 아래 두 경로에 모여지게 됩니다.
다른 안드로이드 강좌는 어떻게 하는지 모르겠으나 전 이지보드에 올릴꺼니까 제 방식대로 합니다.
아래 두 경로면 충분해요. 하하핫!

 

{Android_SRC}out/target/product/generic/root
{Android_SRC}out/target/product/generic/system

 

자, 그럼 진짜로 그런지 한번 테스트를 해 볼 까요?

먼저 NFS로 마운트해서 파일 시스템을 복사할 수 있도록 아래 위치에 디렉토리를 만들고 본격적으로 복사를 시작해 봅시다!

 

# mkdir /nfs/ezrang_drorang_rootfs
# cd {Android_SRC}out/target/product/generic/root
# cp * /nfs/ezrang_drorang_rootfs -a
# cd {Android_SRC}out/target/product/generic/system
# cp * /nfs/ezrang_drorang_rootfs/system -a

 

자! 이걸로 끝이에요!
정말인지 한번 해볼까요?

이지보드를 램디스크로 부팅합니다.

 

[그림5-2. 부팅이 완료된 후 NFS로 마운트]

 

자! 익숙한 로그인 화면이죠?
우리의 친절한 이지보드는 NFS로 곧 바로 붙을 수 있도록 쉘 스크립트를 제공하고 있어요.
부트로드에서 설정된 IP 대역을 보고 서버 아이피 영역을 알아서 붙도록 해주잖아요.
뭐, 간단하게 아래와 같은 명령이 자동 수행된거에요.

 

$ mount -t nfs -o nolock {YOUR_NFS_SERVER_IP}:/nfs /mnt/nfs

 

자, 그럼 이제 우리가 아까 복사해 놓은 파일들을 죄다 /app 영역으로 복사해 보도록 할까요?
/app 영역은 /dev/mtdblock2 영역으로 마운트되어 있습니다.
NAND 부팅영역에 복사해 넣을꺼에요.

 

$ cd /mnt/nfs/ezrang_drorang_rootfs/
$ cp * /app/. -a

 

이렇게 복사 명령을 내리고 나면 한참동안 복사를 하게 됩니다.
용량이 40MB가 조금 넘습니다.
차분하게 기다리셔야 할 필요성이 있어요.
복사가 다 완료되고 나면 끝 입니다.
리부팅하면 되요!

 

참고로 이더넷이 안되면 USB 메모리나 SD카드를 이용해서 복사해도 무방합니다.

복사가 다 되었다면, 이지보드를 NAND 로 부팅할 수 있도록 해봅시다.
이건 첫시간에 한거니까 따로 설명하지 않을께요.
LF만 기억하시면 되요. ^^

 

자! 그리고 나서 부팅을 하면...
드디어 안드로이드 로고가 나타납니다.
최초 부팅시에는 엄청나게 시간이 오래 걸려요. 이상한거 아니니까 차분히 기다려 봐요.

야호!!! 화면이 뜹니다... 만...

 

[그림5-3. System Halted?! 허억! 뭐지!]

 

아아아아아악!!!!

System Halted... 이거 머죠? ㅜ_ㅜ
엉엉엉... 이렇게 안드로이드는 우리를 떠나가는 걸까요? GG Timing 인가요!
'이 사기 강좌!' '악덕 강의!' 여기저기서 이런 비난의 여론이 일고 있군요.

울지말고 함께 방도를 찾아봐요.
다음 시간에는 우리의 첫번째 걸림돌, System Halted 부터 없애보도록 해요. 없앨수 있겠죠?!
진짜로~ ^^