이지랑드로랑 - 12장. RT73 모듈을 이용해 무선랜을 활성화 시켜보자!

 

자주 쓴다고 쓴다고 말만 하고 자주 강좌를 올리지 못하고 있는 슬픈 현실에 다시한번 죄송합니다.

아무래도 먹고사는게 힘겨워서 그런가 보다 하고 너그러이 이해해 주시면 정말 감사하겠습니다.

그래서 오늘도 간만에 어떤 글을 쓸까~ 하고 간만에 이렇게 강좌를 써내려 갑니다.

 

이번엔 어떤 주제를 올려볼까~ 하고 고민을 많이 하다보니 어느덧 개강 시즌이 되었다는 것을 알게 되었습니다.

물론 전 이제 학생이 아니지만 뭐, 공돌이들이야 4학년 개강하면 뻔하죠, 졸업작품 해야잖아요.

음~ 그렇다면 졸업작품을 앞두고 있는 우리 전국의 IT 전공학생들이 저희 EZ-S3C6410과 안드로이드를 이용해 Very Very Creative 하면서 Sensitive 한 그런 작품을 만들수 있으면 좋겠다 라고 생각했습니다.

 

그래서 오늘의 주제는 무선랜을 이용할수 있게 설정하는 시간을 갖도록 하겠습니다.

그리고 다음 시간은 이클립스와 연동해서 개발한 안드로이드 어플리케이션을 이지보드에 올리는 것을 해보도록 할께요.

자, 그럼 무선랜을 한번 잡아보도록 할까요?

 

Step1. RT73 모듈이 탑재된 USB 무선랜 구하기

자! 먼저 중요한 것이 RT73 모듈이 탑재된 USB 타입의 무선랜을 구하셔야 합니다.

왜냐구요?

오늘 제가 이 강좌와 함께 제공할 무선랜 모듈 드라이버 소스코드가 RT73 이기 때문입니다.

'난 다른게 있다, 다른걸 해달라!' '왜 무선랜은 함께 제공하지 않는 것이냐!' 이런 말씀들을 하시면 제가 곤란합니다.

포팅하는걸 본 강좌에서 설명할 수도 없으려니와, 저희 이지보드가 무지막지하게 저렴하잖아요. ^^

무선랜까지 함께 제공하자고 건의하면 저 영업팀장님한테 얼차려를 받을지도;;;

 

하하하! 그래도 너무 걱정하지 마세요, USB 무선랜 카드가 그렇게 고가의 장비는 아니니까요.

학생이라면 지도교수님에게 '하나 사주세요~' 하고 애교부리면 쉽게 사주실 수 있고, 직장인이면 술한번 덜 마시면 되요. ^^

 

[그림12-1. D사의 RT73 모듈이 탑재된 USB 무선랜]

 

전 위 제품을 사용할 꺼에요.

쓸만한 모뎀인것 같아요. 여러분도 모듈만 같다면 여러분이 원하는 모델을 찾아서 붙이시면 됩니다.

 

Step2. RT73 드라이버 컴파일

무선랜을 사용하기 위해서는 당연히 디바이스 드라이버가 있어야 합니다.

그런데 이 드라이버 소스가 특정 커널 버전에 맞춰져 있기 때문에 구해서 컴파일 하려고 해도 잘 안되기 일쑤죠.

사실 그럴땐 정말 눈앞이 캄캄해지시는 분들이 많이 있을 겁니다.

제가 RT73 모듈이 탑재된 USB 무선랜을 구하라고 한 이유는 바로 여기 있습니다.

저희 회사에서 패치해서 포팅해 둔 모듈을 첨부하니 다운로드 받아서 컴파일만 하시면 되겠습니다.

# tar xvfzp rt73_linux_sta_drv1.1.0.3.tar.gz

다운로드 받은 드라이버 소스의 압축을 풉니다.

자, 그리고 컴파일을 준비해 보도록 하죠.

Module 소스 디렉토리로 이동해서 Makefile 을 열어봅시다.

# cd rt73_linux_sta_drv1.1.0.3/Module/
# vi Makefile

아래와 같이 45번 라인의 내용을 수정 합니다.

딱 보시면 아시겠지만 커널 디렉토리를 지정하는 겁니다. (빌드하시기 전에 커널 컴파일 잊지 마시구요!)

LINUX_SRC = /project/ezrang_drorang/linux-2.6.29-ez-s3c6410
# make

이렇게 하고 make 하시면 컴파일이 진행됩니다.

컴파일이 다 되면 rt73.ko 파일이 만들어 집니다.

일단 이 파일을 만들어 놓은 안드로이드 파일 시스템의 /system/lib 디렉토리에 넣어두도록 합시다.

 

Step4. Wireless Tools 포함시키기

우리가 리눅스에서 무선랜을 사용하기 위해서는 그냥 ifconfig 를 사용할 수는 없습니다.

필요한 몇몇 무선 전용 툴들이 있는데 그것을 함께 모아놓은 팩키지가 우리가 잘 알고 있는 Wireless Tools 가 되겠습니다.

iwconfig, iwlist 등등... 이름만 들어도 익숙한 명령어들이죠?

우린 이것들을 빌드해서 안드로이드에서도 사용할 수 있도록 할 계획 입니다.

# wget http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz 
# tar xvfzp wireless_tools.29.tar.gz
# cd wireless_tools.29
# vi Makefile

Wireless Tools 를 다운로드 받아서 압축을 해제 합니다.

그리고 이번에도 역시 Makefile 을 수정해서 우리가 원하는데로 컴파일이 될 수 있도록 해보지요.

## Compiler to use (modify this for cross compile).
CC = arm-generic-linux-gnueabi-gcc -static
## Other tools you need to modify for cross compile (static lib only).
AR = arm-generic-linux-gnueabi-ar
RANLIB = arm-generic-linux-gnueabi-ranlib

## Uncomment this to build tools using static version of the library.
## Mostly useful for embedded platforms without ldd, or to create
## a local version (non-root).
BUILD_STATIC = y

## Uncomment this to build without using libm (less efficient).
## This is mostly useful for embedded platforms without maths.
BUILD_NOLIBM = y

## Uncomment this to strip binary from symbols. This reduce binary size.
## by a few percent but make debug worse...
BUILD_STRIPPING = y

일단 CC, AR, RANLIB 에 대한 값을 우리가 사용하는 컴파일러에 맞게 수정해 줍니다.

그리고 아래에 있는 BUILD_STATIC, BUILD_NOLIBM, BUILD_STRIPPING 옵션을 활성화 시킵니다.

그리고 신경 써 줘야 할 것은 CC 에 컴파일러를 입력하면서 -static 을 넣어주도록 한다는 것 입니다.

테스트를 해보니까 분명 옵션이 BUILD_STATIC과 BUILD_NOLIBM 옵션을 활성화 했는데도 안드로이드에서 실행이 안되요.

그래서 강제로다가;;;

 

make 를 한 이후에 ifrename, iwconfig, iwevent, iwlist, iwpriv, iwspy 파일이 생성되게 되는데 이것을 안드로이드 파일 시스템의 /system/bin/ 에 복사합니다.

그리고 이제 이지보드를 통해 확인해 볼까요?

 

Step5. 이지보드에서 무선랜 올려서 사용하기

일단 아까 우리가 빌드한 모듈을 insmod 로 올려보도록 할 까요?

sh-4.0# insmod /system/lib/rt73.ko 
idVendor = 0x7d1, idProduct = 0x3c07
rausb0 (rt73): not using net_device_ops yet
usbcore: registered new interface driver rt73 sh-4.0# iwconfig rausb0 RT73 WLAN ESSID:off/any Nickname:"" Mode:Auto Frequency=2.412 GHz RTS thr:off Fragment thr:off Encryption key:off Link Quality=0/100 Signal level:-121 dBm Noise level:-111 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0

insmod와 iwconfig 를 했을 때 위와 같은 메시지를 봤다면 성공!

 

[그림12-2. 무선랜에 빤짝 불이 들어왔네요]

 

이제 무선랜을 이용해 IP 도 잡고 한번 해보도록 하죠.

# ifconfig rausb0 up
# ifconfig rausb0 192.168.10.89 up
# iwconfig rausb0 essid "your_access_pointer" # route add default gw 192.168.10.1 dev rausb0 # setprop net.dns1 168.126.63.1

위와 같이 명령어를 입력하면 이제 무선랜으로도 이더넷을 사용할 수 있는 겁니다.

행복하죠?

정말이에요. 핑도 한번 쏴 보세요. ^^

 

[그림12-3. 무선랜을 이용해 인터넷을 사용하는 모습]

 

이제 무선랜까지 연결하는 방법을 알았어요.

이걸로 우리는 정말 많은 것을 할 수 있을 것 같은 느낌이 팍팍 들지 않나요?

정말 재미있는, 안드로이드를 이용한 창의적인 제품을 오늘도 생각해보며 오늘 강좌는 여기서 마무리 하겠습니다.