이지랑드로랑 - 9장. 막장 쉘 바꿔버리기

 

와우! 드디어 안드로이드가 우리의 이지보드에서 어느정도 멀쩡하게 움직이기 시작했습니다.

그런데 이거, 이번 강좌 제목이 상당히 거칠죠?

제가 아무리 차가운 도시남자라고 할 지라도 이렇게 거칠게 나오는데는 다 이유가 있는데요, 다들 이해 하실듯 하기도 한데요.

 

[그림9-1. 허접한 ls 결과물과 그를 능가하는 입력방식]

 

이런 비빔밥을 비벼서 한입에 우겨넣어도 시원찮을 경우가 있나!

그렇잖아요!!! 작업을 좀 할려고 하면 키가 잘 안먹고, 자동 완성기능 쓰려고 Tab키를 눌렀더니 그냥 진짜로 탭이 눌리고 백스페이스도 안먹고... 이건 슬픔입니다.

도저히 이렇게는 놔눌수가 없습니다.

오늘 과감하게 안드로이드의 쉘을 바꿔버리겠습니다.

 

Setp 1. Busybox Make

안드로이드는 기본적으로 Toolbox라는 것을 사용하고 있는데요, 이게 상당히 간결합니다.

허나, 용량이 작다는 장점 빼고 저는 하나도 맘에 안들어요... 너무 부실하고 답답한게 사실이니까요.

쉘도 Toolbox에 있는 쉘을 써서 그런지 너무 맘에 안든단 말이죠.

그래서 여러분이 처음 이지보드를 받으면 만나는 리눅스의 그런 흔한 쉘, Bash Shell 과 Busybox 를 안드로이드에도 넣을 겁니다.

먼저 Busybox 를 넣어보죠.

인터넷에서 다운로드 받아봅시다.

 

[그림9-2. Busybox Project 홈페이지]

 

리눅스 소프트웨어의 대부분이 그렇듯, 오픈 프로젝트로 진행되고 있고 이렇게 구글링을 하면 해당 사이트를 쉽게 찾을 수 있어요.

Busybox는 htt://busybox.net 이라는 홈페이지에서 프로젝트를 공개하고 있군요.

Download Source 링크를 열어보시면 가장 최신버전 소스를 다운로드 받을 수 있도록 하고 있습니다.

주소를 확인하고 제 컴퓨터에 내려 받아서 한번 보도록 할께요.

 

root@android# wget http://busybox.net/downloads/busybox-1.14.1.tar.bz2
--2010-01-01 17:10:31--  http://busybox.net/downloads/busybox-1.14.1.tar.bz2
Resolving busybox.net... 140.211.167.224
접속 busybox.net|140.211.167.224|:80... 접속됨.
HTTP request sent, awaiting response... 200 OK
Length: 2201160 (2.1M) [application/x-tar]
Saving to: `busybox-1.14.1.tar.bz2'

100%[============================================>] 2,201,160    925K/s   in 2.3s

2010-01-01 17:10:34 (925 KB/s) - `busybox-1.14.1.tar.bz2' saved [2201160/2201160]

root@android#

자, 생각보다 쉽게 받아지죠?

압축을 풀고 한번 메뉴를 열어봅시다. 이거 뭐, 어렵지 않고 커널 이랑 비슷합니다.

# tar xvf busybox-1.14.1.tar.bz2
# cd busybox-1.14.1
# make menuconfig

[그림9-3. Busybox Menuconfig 화면]

 

자, 우리가 여기서 해줘야 할 작업이 있습니다.

안드로이드에서도 돌아갈 수 있도록 Static Compile을 해줘야 한다는 것 입니다.

공유 라이브러리가 안드로이드와 해피하게도 함께할 거라 생각하진 않으신거죠? ^^ 클랍니다. 안되요.

그래서 우리는 이것들을 Static 하게 컴파일 해서 안드로이드에 올려줄 겁니다.

 

Busybox Settings ---> Build Options --->

옵션 메뉴를 타고 들어가시면 Build Busybox as static binary (no shared libs) 라고 되어 있는 메뉴가 있어요.

활성화! 그리고 과감하게 make 해주시면 됩니다.

# make ARCH=arm CROSS_COMPILE=arm-generic-linux-gnueabi- install

하면 한번에 쾅 하고 컴파일이 되면 얼마나 좋겠습니까?

하지만 분명 오류가 날 꺼에요. 이럴때마다 마구 슬퍼지고 눈물이 앞을 가리우죠.

저도 좀 고민을 해보다 보니까 이게 ARM 용으로는 컴파일이 잘 안되는 녀석들이 있네요.

옵션에서 빼버립시다!

Miscellaneous Utilities --->
    [ ] inotifyd

Networking Utilities --->
    [ ] route

Menuconfig 에서 위 두 옵션을 제거해 버립니다.

그리고 다시 위에서 배운데로 컴파일을 하면 됩니다.

신난다! 이제 다 된거 같아요.

이제 한번 안드로이드로 복사해 넣어볼까요?

# cd _install
# cp ./bin/* /nfs/ezrang_drorang_rootfs/system/bin/. -a
# cp ./sbin/* /nfs/ezrang_drorang_rootfs/sbin/. -a

자, 이제 이지보드에 새롭게 바뀐 파일시스템을 복사하고 재부팅 해 봅시다.

아마도 쉘 명령어가 안먹힐 껍니다. (종종 그냥 될 때도 있을지도 몰라요)

그러나!!! 우리의 목표는 여기서 끝난게 아니에요. 아직 집중하셔야 합니다.

 

Step2. Bash Shell Make

우리의 오늘 목표인 Bash shell 을 집어넣어 보도록 합시다.

 

[그림9-5. Bash Shell 프로젝트 홈페이지]

 

역시 구글링을 해서 찾았습니다.

# wget http://ftp.gnu.org/gnu/bash/bash-4.0.tar.gz
# tar xvfzp bash-4.0.tar.gz
# cd bash-4.0
# ac_cv_sys_restartable_syscalls=yes ac_cv_func_setvbuf_reversed=yes bash_cv_have_mbstate_t=yes 
  ./configure --build=i686-linux --host=arm-linux --enable-readline 
  --enable-static-link
# make all
# cp bash /nfs/ezrang_drorang_rootfs/system/bin/. -a

자~ 이렇게 컴파일 하면 컴파일이 잘 됩니다.

주의할 껀 크로스컴파일러를 arm-generic-linux-gnueabi 를 사용하지 않는다는 점 입니다.

;이게 해보니까 아직 EABI 관련해서는 컴파일이 잘 안되더라구요.

일단 static으로만 컴파일 되면 돌아가는데는 문제가 없으니까요, 제공된 CD 에 있는 크로스컴파일러 말고 저희 포럼에서 3.4.3 버전의 툴체인을 이용해서 컴파일 하세요.

 

자 이제 만들어진 bash 파일을 보드로 옮기고 링크를 걸어주면 됩니다.

# cd /nfs/ezrang_drorang_rootfs/system/bin/
# rm sh
# ln -s bash sh

자! 그리고 이제 이지보드에 복사해 봅시다.

그리고 보드를 다시 안드로이드로 부팅되도록 설정하고 나면...

 

[그림9-6. 멋지게 바뀐 쉘의 모습]

 

야호!!! 신난다! 드디어 쉘이 이쁘게 바뀌었어요.

자동 완성기능도 되고, 키보드도 잘 먹고 우리가 흔히 사용하던 그런 것들이 되기 시작했습니다.

이제 안드로이드의 쉘 환경도 이지보드를 처음 받았을 때의 램 디스크의 환경과 매우 많이 비슷해졌습니다. ^^v

 

이렇게 해서 또 한 강좌가 지나갔네요.

다음 시간에는 이지랑드로랑 연재 횟수가 두자리수로 들어가는 강좌가 되겠군요!

어떤 강좌를 올리면 여러분들이 재미있어라 하실까요? ^^

오늘도 고민하며 잠 들어 보겠습니다.

 

호랑이의 2010! 새해 복 많이 받으세요!