기존의 DTV 에서 Usb-to-Wireless 동글 타입을 지원해야 한다는 요구에 대응하기 위해 Wireless 프로젝트가 시작되었다. 이 문서는 현재 시중에 나와있는 제품들 가운데 하나를 선정하여 현재 타겟에서 동작하는지 여부에 관해 검증하기 위함으로 작성되어졌다. 여기서는 RALINK 칩셋을 사용하고 있는 WLB5254USB 를 선정했다.
검증 방법은 각각 윈도우, 리눅스, 타겟에서 외부와의 네트워킹이 되는지 여부로 판단한다.
참고로 사내 네트워크의 경우, AD 인증을 통해 DHCP 로 IP 를 받아오는 방식이다. 윈도우의 경우, WPA 방식을 사용하고 리눅스의 경우, WEP 방식을 사용한다.

동작 테스트

구입시 동봉된 설치 CD 를 이용해서 드라이버를 설치해야 한다. 참고로 테스트는 윈도우 XP 기반에서 했다.
사내의 독특한(?) 환경때문에, 하드웨어 인식 이후에도 무선 AP 로 부터 IP 를 할당받지 못하는 문제가 발생했다. 가까스로 환경설정을 통해 인터넷에 접속할 수 있었다.
무선랜의 경우, 기본적으로 윈도우에서 제공하는 접속 프로그램이 있지만 이를 이용해서는 정상적인 IP 할당이 이루어지지 않았다.
그래서 설치 프로그램에서 제공되는 접속 프로그램을 사용하였다. 사내 무선 AP 의 경우, 자동으로 검색이 안되기 때문에 수동으로 등록해주어야 한다.

모든 설정이 완료되면, 위와 같은 화면이 출력된다.

접속이 되면, 위와 같이 접속 상태가 뜬다.

접속이 된 상태에서는 uLGE 라는 사내 무선 AP 가 검색된다.

위와 같이 설정했다면, 외부와 네트워킹이 가능할 것이다.

Fedora 10 을 기준으로 테스트를 수행했다. 리눅스 커널 2.6.28 기반이다.
테스트는 Live CD 를 사용하여 부팅한 후에 Usb-to-Wireless 를 연결하여 외부와의 네트워킹이 되는지 검증하는 것이었다.
다행스럽게도(?) 자동으로 해당 모듈이 모두 올라왔고, 자동으로 인식했다.
제조사에서 제공하는 접속 프로그램이 없기 때문에, 리눅스에서 기본적으로 지원하는 프로그램을 사용했다.
Fedora 10 Live 는 기본적으로 Gnome 이 기본 윈도우 매니져로 지정되어 있다. Usb-to-Wireless 를 인식하여, 모듈이 로딩되면, 오른쪽 상단의 네트워크 접속 마법사(?)에 검색한 주변 AP 들의 목록이 뜬다.
여기서 'Connect to Hidden Wireless Network' 를 선택하면, 접속 마법사 창이 뜬다. 아래와 같이 입력한다.

Network Name LGEWEP
Wireless Security WEP 40/128-bit Key
Key a1215a0824b0501b1009c0522d
Show key 체크

'Connect' 를 누르면, 패스워드를 입력하라는 창이 뜨는데, 여기서는 그냥 root 패스워드를 입력해주면 된다.
곧 접속되었다는 메세지가 뜨면, 'ifconfig' 를 통해 IP 할당이 제대로 이루어졌는지 확인해 본다.

참고로 타겟에서의 테스트 환경은 다음과 같다.

H/W Saturn 6
S/W GP1 (linux-2.6.26)

커널 2.6.26 커널에서는 기본적으로 ralink 칩셋 기반의 WLB5254USB 을 지원한다. 관련 커널 옵션을 지정해 주어야 한다.
'Networking → Wireless' 아래의 하위 옵션들을 모두 지정한다. 또한 'Device Drivers → Network device support → Wireless LAN → Wireless LAN(IEEE 802.11)' 을 선택하면, 커널에서 기본적으로 지원하는 목록들이 나온다.
'Ralink driver support' 라는 옵션이 보일 것이다. 만일 보이지 않는다면, 'Networking → Wireless' 아래의 하위 옵션들을 지정했는지 확인해보자. 여기서는 'Ralink rt73 usb support, RT73 leds support, Ralink debug output' 을 선택한다.

이후, 커널 컴파일 후에 이를 타겟에 올려서 WLB5254USB 를 테스트해보았다. 하지만, 다음과 같은 에러가 발생했다. 참고로 아래는 커널 컴파일 시 관련 옵션을 모두 모듈(M)로 처리했을 때의 경우이다.
커널 컴파일 시 관련 옵션을 모두 bulit-in(*) 으로 처리했을 때의 경우에도 발생하는 문제는 동일하다.

/mnt/lg/lgapp # lsmod
Module                  Size  Used by    Tainted: P
rt73usb                35344  -                   // 여기서는 모듈로 선택하여 빌드했기 때문에 관련 모듈들이 모두 load 된 상태다
rt2x00usb               9760  -
rt2x00lib              26096  -
mdrv_ve                18064  -
...
/mnt/lg/lgapp # ifconfig -a
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
wlan0     Link encap:Ethernet  HWaddr 00:0E:2E:4A:2E:74   // -a 옵션 시 wlan0 인터페이스가 출력되는 것으로 보아, init 은 된 것으로 보여진다
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
wmaster0  Link encap:UNSPEC  HWaddr 00-0E-2E-4A-2E-74-A0-8F-00-00-00-00-00-00-00-00
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
/mnt/lg/lgapp # ifconfig wlan0 up
[  158.581000] phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt73.bin'.  // open 시에 rt73.bin 이라는 firmware 파일이 필요하다
[  158.590000] firmware: requesting rt73.bin
[  218.607000] phy0 -> rt2x00lib_request_firmware: Error - Failed to request Firmware.       // 일정 시간 안에 찾지 못하면, open 이 실패한다
ifconfig: ioctl 0x8914 failed: No such file or directory                                     // 결국 제대로 i/o 할 수 없어 에러가 발생한다

Mstar 에 위의 문제를 리포팅 한 후, 첫번째로 문제 해결 방법을 피드백 받았다.

#ifconfig wlan0 up &  
(PS: After executing ‘ifconfig wlan0 up &’, you have only 60 seconds to type the following instructions)
 
#cd /sys/class/firmware/1-1.4\:1.0
#echo 1 > ./loading
#cat rt73.bin> ./data
#echo 0 > ./loading

위의 방법은 단순하게 커널이 firmware 파일을 찾는 약 60 초 동안 실제 rt73.bin 파일을 찾아 입력해주는 것이다. 하지만, 이 방법의 경우, 일일이 입력을 해주어야 한다는 점과 60 초 안에 입력을 해야한다는 점 때문에 그야말로 임시적인 방법이다.
실제로 위와 같이 실행하여, WLB5254USB 이 정상적으로 동작하였다.

/mnt/lg/lgapp/drivers/wireless_util # ifconfig wlan0 up &
/mnt/lg/lgapp/drivers/wireless_util # [  554.663000] phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt73.bin'.
[  554.672000] firmware: requesting rt73.bin
 
/mnt/lg/lgapp/drivers/wireless_util # cd /sys/class/firmware/2-1\:1.0/
/sys/class/firmware/2-1:1.0 # ls
data       device     loading    subsystem  uevent
/sys/class/firmware/2-1:1.0 # echo 1 > ./loading
/sys/class/firmware/2-1:1.0 # cd -
/mnt/lg/lgapp/drivers/wireless_util # cat rt73.bin > /sys/class/firmware/2-1\:1.0/data
/mnt/lg/lgapp/drivers/wireless_util # echo 0 > /sys/class/firmware/2-1\:1.0/loading
/mnt/lg/lgapp/drivers/wireless_util # [  606.004000] phy0 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 1.7.        // rt73.bin firmware 파일을 찾았다
 
/mnt/lg/lgapp/drivers/wireless_util # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
wlan0     Link encap:Ethernet  HWaddr 00:0E:2E:4A:2E:74
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
wmaster0  Link encap:UNSPEC  HWaddr 00-0E-2E-4A-2E-74-A0-8F-00-00-00-00-00-00-00-00
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

첫번째 방법에서의 단점을 보완하기 위해 rt73.bin 파일을 소스코드 안에 집어넣는 방법이다. 아래와 같이 rt2x00firmware.c 파일의 수정이 필요하다. 주석이 추가된 부분을 유의해서 보기 바란다.

#include <linux/kernel.h>
#include <linux/module.h>
 
#include "rt2x00.h"
#include "rt2x00lib.h"
 
/* 추가된 부분 시작 */
 
unsigned char rt73_bin[2048]={
0x02,0x13,0x25,0x12,0x10,0xD9,0x02,0x12,
0x58,0x02,0x13,0x58,0x02,0x13,0x5A,0xC0,
0xD0,0x75,0xD0,0x18,0x12,0x13,0x5C,0xD0,
0xD0,0x22,0x02,0x14,0x5C,0x02,0x14,0xE7,
0xED,0x4C,0x70,0x44,0x90,0x01,0xA8,0x74,
0x80,0xF0,0xEF,0x30,0xE5,0x07,0xE4,0x90,
0x00,0x0F,0xF0,0x80,0x2C,0xE5,0x40,0x24,
0xC0,0x60,0x13,0x24,0xC0,0x60,0x16,0x24,
0xC0,0x60,0x19,0x24,0xC0,0x70,0x1A,0xE4,
0x90,0x00,0x0B,0xF0,0x80,0x13,0xE4,0x90,
0x00,0x13,0xF0,0x80,0x0C,0xE4,0x90,0x00,
0x1B,0xF0,0x80,0x05,0xE4,0x90,0x00,0x23,
0xF0,0xE4,0x90,0x01,0xA8,0xF0,0xD3,0x22,
0x90,0x02,0x02,0xED,0xF0,0x90,0x02,0x01,
0xEF,0xF0,0xD3,0x22,0xEF,0x24,0xC0,0x60,
0x1F,0x24,0xC0,0x60,0x2E,0x24,0xC0,0x60,
0x3D,0x24,0xC0,0x70,0x53,0x90,0x00,0x0B,
0xE0,0x30,0xE1,0x02,0xC3,0x22,0x90,0x00,
0x09,0xE0,0xFE,0x90,0x00,0x08,0x80,0x37,
0x90,0x00,0x13,0xE0,0x30,0xE1,0x02,0xC3,
0x22,0x90,0x00,0x11,0xE0,0xFE,0x90,0x00,
0x10,0x80,0x24,0x90,0x00,0x1B,0xE0,0x30,
0xE1,0x02,0xC3,0x22,0x90,0x00,0x19,0xE0,
0xFE,0x90,0x00,0x18,0x80,0x11,0x90,0x00,
0x23,0xE0,0x30,0xE1,0x02,0xC3,0x22,0x90,
0x00,0x21,0xE0,0xFE,0x90,0x00,0x20,0xE0,
0xFD,0xEE,0xF5,0x37,0xED,0xF5,0x38,0xD3,
0x22,0x30,0x09,0x20,0x20,0x04,0x0B,0x90,
0x02,0x08,0xE0,0x54,0x0F,0x70,0x03,0x02,
0x12,0x57,0xC2,0x09,0x90,0x02,0x00,0xE0,
0x44,0x04,0xF0,0x74,0x04,0x12,0x0C,0x3A,
0xC2,0x04,0xC2,0x07,0x90,0x02,0x01,0xE0,
0x30,0xE0,0x03,0x00,0x80,0xF6,0x90,0x03,
0x26,0xE0,0x20,0xE2,0x03,0x02,0x12,0x57,
0x90,0x02,0x08,0xE0,0x70,0x1B,0x20,0x07,
0x03,0x02,0x12,0x57,0x90,0x03,0x12,0xE0,
0x64,0x22,0x60,0x03,0x02,0x12,0x57,0xD2,
0x09,0xC2,0x07,0x74,0x02,0x12,0x0C,0x3A,
0x22,0x90,0x02,0x03,0xE0,0x30,0xE4,0x47,
0x20,0x06,0x44,0xE5,0x3C,0x60,0x34,0xE5,
0x40,0x24,0xC0,0x60,0x14,0x24,0xC0,0x60,
0x18,0x24,0xC0,0x60,0x1C,0x24,0xC0,0x70,
0x22,0x90,0x00,0x0B,0xE0,0x30,0xE1,0x1B,
0x22,0x90,0x00,0x13,0xE0,0x30,0xE1,0x13,
0x22,0x90,0x00,0x1B,0xE0,0x30,0xE1,0x0B,
0x22,0x90,0x00,0x23,0xE0,0x30,0xE1,0x03,
0x02,0x12,0x57,0x90,0x02,0x03,0x74,0x01,
0xF0,0x00,0xE0,0x54,0xC0,0xF5,0x40,0xE5,
0x40,0x24,0xC0,0x60,0x20,0x24,0xC0,0x60,
0x30,0x24,0xC0,0x60,0x40,0x24,0xC0,0x70,
0x56,0x90,0x00,0x0B,0xE0,0x30,0xE1,0x03,
0x02,0x12,0x57,0x90,0x00,0x09,0xE0,0xFE,
0x90,0x00,0x08,0x80,0x3A,0x90,0x00,0x13,
0xE0,0x30,0xE1,0x03,0x02,0x12,0x57,0x90,
0x00,0x11,0xE0,0xFE,0x90,0x00,0x10,0x80,
0x26,0x90,0x00,0x1B,0xE0,0x30,0xE1,0x03,
0x02,0x12,0x57,0x90,0x00,0x19,0xE0,0xFE,
0x90,0x00,0x18,0x80,0x12,0x90,0x00,0x23,
0xE0,0x30,0xE1,0x03,0x02,0x12,0x57,0x90,
0x00,0x21,0xE0,0xFE,0x90,0x00,0x20,0xE0,
0xFD,0xEE,0xF5,0x37,0xED,0xF5,0x38,0x90,
0x03,0x27,0x74,0x82,0xF0,0x90,0x02,0x01,
0xE5,0x40,0xF0,0x90,0x02,0x06,0xE0,0xF5,
0x3C,0xC3,0xE5,0x38,0x95,0x3A,0xE5,0x37,
0x95,0x39,0x50,0x21,0xE5,0x40,0x44,0x05,
0xFF,0xE5,0x37,0xA2,0xE7,0x13,0xFC,0xE5,
0x38,0x13,0xFD,0x12,0x10,0x20,0xE5,0x3C,
0x30,0xE2,0x04,0xD2,0x06,0x80,0x02,0xC2,
0x06,0x53,0x3C,0x01,0x22,0x30,0x0B,0x07,
0xE4,0x90,0x02,0x02,0xF0,0x80,0x06,0x90,
0x02,0x02,0x74,0x20,0xF0,0xE5,0x40,0x44,
0x01,0x90,0x02,0x01,0xF0,0x90,0x02,0x01,
0xE0,0x30,0xE0,0x03,0x00,0x80,0xF6,0x90,
0x03,0x27,0x74,0x02,0xF0,0xAF,0x40,0x12,
0x10,0x74,0x40,0xA5,0x00,0x80,0xF6,0x22,
0x90,0x7F,0xF8,0xE0,0xB4,0x02,0x03,0x12,
0x16,0x38,0x90,0x02,0x01,0xE0,0x30,0xE0,
0x03,0x00,0x80,0xF6,0x90,0x03,0x26,0xE0,
0x20,0xE1,0x07,0xE5,0x3B,0x70,0x03,0x02,
0x13,0x24,0xE5,0x3B,0x70,0x15,0x90,0x03,
0x24,0xE0,0x75,0xF0,0x40,0xA4,0xF5,0x36,
0x85,0xF0,0x35,0x75,0x24,0x83,0x75,0x3B,
0x01,0x80,0x03,0x75,0x24,0x03,0xD3,0xE5,
0x36,0x95,0x3A,0xE5,0x35,0x95,0x39,0x40,
0x36,0x90,0x02,0x01,0xE0,0x30,0xE0,0x03,
0x00,0x80,0xF6,0x90,0x03,0x27,0xE5,0x24,
0xF0,0x90,0x00,0x0F,0xE0,0x30,0xE1,0x04,
0x30,0x0E,0xF6,0x22,0x30,0x0B,0x07,0xE4,
0x90,0x02,0x02,0xF0,0x80,0x06,0x90,0x02,
0x02,0x74,0x20,0xF0,0x90,0x02,0x01,0x74,
0x21,0xF0,0x75,0x24,0x03,0x80,0x3D,0xE5,
0x35,0xA2,0xE7,0x13,0xFE,0xE5,0x36,0x13,
0xFD,0xAC,0x06,0x90,0x02,0x01,0xE0,0x30,
0xE0,0x03,0x00,0x80,0xF6,0x90,0x03,0x27,
0xE5,0x24,0xF0,0x90,0x00,0x0F,0xE0,0x30,
0xE1,0x04,0x30,0x0E,0xF6,0x22,0x7F,0x25,
0x12,0x10,0x20,0xE5,0x36,0xB5,0x3A,0x08,
0xE5,0x35,0xB5,0x39,0x03,0x00,0x80,0x04,
0xE4,0xF5,0x3B,0x22,0xC3,0xE5,0x36,0x95,
0x3A,0xF5,0x36,0xE5,0x35,0x95,0x39,0xF5,
0x35,0x02,0x12,0x96,0x22,0x75,0xA8,0x0F,
0x90,0x03,0x06,0x74,0x01,0xF0,0x90,0x03,
0x07,0xF0,0x90,0x03,0x08,0x04,0xF0,0x90,
0x03,0x09,0x74,0x6C,0xF0,0x90,0x03,0x0A,
0x74,0xFF,0xF0,0x90,0x03,0x02,0x74,0x1F,
0xF0,0x90,0x03,0x00,0x74,0x04,0xF0,0x90,
0x03,0x25,0x74,0x31,0xF0,0xD2,0xAF,0x22,
0x00,0x22,0x00,0x22,0x90,0x03,0x05,0xE0,
0x30,0xE0,0x0B,0xE0,0x44,0x01,0xF0,0x30,
0x09,0x02,0xD2,0x04,0xC2,0x07,0x22,0x8D,
0x24,0xA9,0x07,0x90,0x7F,0xFC,0xE0,0x75,
0x25,0x00,0xF5,0x26,0xA3,0xE0,0x75,0x27,
0x00,0xF5,0x28,0xA3,0xE0,0xFF,0xA3,0xE0,
0xFD,0xE9,0x30,0xE5,0x14,0x54,0xC0,0x60,
0x05,0x43,0x05,0x03,0x80,0x03,0x53,0x05,
0xFC,0xEF,0x54,0x3F,0x44,0x40,0xFF,0x80,
0x06,0x53,0x07,0x3F,0x53,0x05,0xF0,0xE5,
0x24,0x30,0xE0,0x05,0x43,0x05,0x10,0x80,
0x03,0x53,0x05,0xEF,0x90,0x7F,0xFC,0xE5,
0x26,0xF0,0xA3,0xE5,0x28,0xF0,0xA3,0xEF,
0xF0,0xA3,0xED,0xF0,0x22,0x8F,0x24,0xA9,
0x05,0x90,0x7F,0xFC,0xE0,0x75,0x25,0x00,
0xF5,0x26,0xA3,0xE0,0x75,0x27,0x00,0xF5,
0x28,0xA3,0xE0,0xFF,0xA3,0xE0,0xFD,0xE5,
0x24,0x30,0xE5,0x0B,0x43,0x05,0x0F,0xEF,
0x54,0x3F,0x44,0x40,0xFF,0x80,0x06,0x53,
0x05,0xF0,0x53,0x07,0x3F,0xE9,0x30,0xE0,
0x05,0x43,0x05,0x10,0x80,0x03,0x53,0x05,
0xEF,0x90,0x7F,0xFC,0xE5,0x26,0xF0,0xA3,
0xE5,0x28,0xF0,0xA3,0xEF,0xF0,0xA3,0xED,
0xF0,0x22,0x90,0x7F,0xFC,0xE0,0xF9,0xA3,
0xE0,0xFE,0xA3,0xE0,0xFC,0xA3,0xE0,0xFB,
0xEF,0x30,0xE5,0x0B,0x43,0x03,0x0F,0xEC,
0x54,0x3F,0x44,0x40,0xFC,0x80,0x06,0x53,
0x03,0xF0,0x53,0x04,0x3F,0xED,0x30,0xE0,
0x07,0xEF,0x54,0xC0,0x60,0x07,0x80,0x0A,
0xEF,0x54,0xC0,0x60,0x05,0x43,0x03,0x10,
0x80,0x03,0x53,0x03,0xEF,0x90,0x7F,0xFC,
0xE9,0xF0,0xA3,0xEE,0xF0,0xA3,0xEC,0xF0,
0xA3,0xEB,0xF0,0x22,0xE5,0x4B,0xFD,0x54,
0x1F,0x90,0x7F,0xF8,0xF0,0xE5,0x4A,0xF5,
0x09,0x90,0x30,0x38,0xE0,0x90,0x7F,0xFC,
0xF0,0x90,0x30,0x39,0xE0,0x90,0x7F,0xFD,
0xF0,0x90,0x30,0x3A,0xE0,0x90,0x7F,0xFE,
0xF0,0x90,0x30,0x3B,0xE0,0x90,0x7F,0xFF,
0xF0,0xED,0x30,0xE5,0x0C,0x54,0xC0,0x60,
0x0D,0x90,0x7F,0xF0,0xE5,0x47,0xF0,0x80,
0x05,0xE4,0x90,0x7F,0xF0,0xF0,0x90,0x7F,
0xF8,0xE0,0x14,0x60,0x08,0x24,0xFE,0x60,
0x0D,0x24,0x03,0x80,0x12,0xAF,0x05,0xAD,
0x09,0x12,0x13,0xC5,0x80,0x10,0xAF,0x05,
0xAD,0x09,0x12,0x14,0x12,0x80,0x07,0xAF,
0x05,0xAD,0x09,0x12,0x13,0x6F,0x90,0x7F,
0xFC,0xE0,0x90,0x30,0x38,0xF0,0x90,0x7F,
0xFD,0xE0,0x90,0x30,0x39,0xF0,0x90,0x7F,
0xFE,0xE0,0x90,0x30,0x3A,0xF0,0x90,0x7F,
0xFF,0xE0,0x90,0x30,0x3B,0xF0,0x22,0xE5,
0x4B,0x64,0x01,0x60,0x03,0x02,0x15,0x71,
0xF5,0x4B,0xE5,0x44,0x45,0x43,0x70,0x03,
0x02,0x15,0xA0,0x12,0x0C,0x14,0x12,0x0B,
0x86,0x50,0xFB,0x90,0x00,0x00,0xE0,0xF5,
0x25,0x12,0x15,0xB4,0xC2,0x92,0xE4,0xF5,
0x24,0xE5,0x24,0xC3,0x95,0x25,0x50,0x49,
0x7E,0x00,0x7F,0x4C,0x74,0x40,0x25,0x24,
0xF5,0x82,0xE4,0x34,0x01,0xAD,0x82,0xFC,
0x75,0x2B,0x02,0x7B,0x10,0x12,0x07,0x1E,
0xC2,0x93,0x12,0x15,0xA1,0x7D,0xA0,0x12,
0x15,0xD0,0xE5,0x24,0x54,0x0F,0x24,0x4C,
0xF8,0xE6,0xFD,0xAF,0x4B,0xAE,0x4A,0x12,
0x15,0xD8,0x05,0x4B,0xE5,0x4B,0x70,0x02,
0x05,0x4A,0x12,0x0A,0x5F,0x05,0x24,0xE5,
0x24,0x54,0x0F,0x70,0xD5,0xD2,0x93,0x80,
0xB0,0xC3,0xE5,0x44,0x95,0x25,0xF5,0x44,
0xE5,0x43,0x94,0x00,0xF5,0x43,0x02,0x14,
0xF2,0x12,0x15,0xB4,0xC2,0x93,0xC2,0x92,
0x12,0x15,0xA1,0x7D,0x80,0x12,0x15,0xD0,
0x7D,0xAA,0x74,0x55,0xFF,0xFE,0x12,0x15,
0xD8,0x7D,0x55,0x7F,0xAA,0x7E,0x2A,0x12,
0x15,0xD8,0x7D,0x30,0xAF,0x4B,0xAE,0x4A,
0x12,0x15,0xD8,0x12,0x0A,0x5F,0xD2,0x93,
0x22,0x7D,0xAA,0x74,0x55,0xFF,0xFE,0x12,
0x15,0xD8,0x7D,0x55,0x7F,0xAA,0x7E,0x2A,
0x12,0x15,0xD8,0x22,0xAD,0x47,0x7F,0x34,
0x7E,0x30,0x12,0x15,0xD8,0x7D,0xFF,0x7F,
0x35,0x7E,0x30,0x12,0x15,0xD8,0xE4,0xFD,
0x7F,0x37,0x7E,0x30,0x12,0x15,0xD8,0x22,
0x74,0x55,0xFF,0xFE,0x12,0x15,0xD8,0x22,
0x8F,0x82,0x8E,0x83,0xED,0xF0,0x22,0xE4,
0xFC,0x90,0x7F,0xF0,0xE0,0xAF,0x09,0x14,
0x60,0x14,0x14,0x60,0x15,0x14,0x60,0x16,
0x14,0x60,0x17,0x14,0x60,0x18,0x24,0x05,
0x70,0x16,0xE4,0xFC,0x80,0x12,0x7C,0x01,
0x80,0x0E,0x7C,0x03,0x80,0x0A,0x7C,0x07,
0x80,0x06,0x7C,0x0F,0x80,0x02,0x7C,0x1F,
0xEC,0x6F,0xF4,0x54,0x1F,0xFC,0x90,0x30,
0x34,0xE0,0x54,0xE0,0x4C,0xFD,0xA3,0xE0,
0xFC,0x43,0x04,0x1F,0x7F,0x34,0x7E,0x30,
0x12,0x15,0xD8,0xAD,0x04,0x0F,0x12,0x15,
0xD8,0xE4,0xFD,0x7F,0x37,0x02,0x15,0xD8,
0x02,0x15,0xDF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x07,0x29,0xE9};
static struct firmware rtfw;
 
/* 추가된 부분 끝 */
 
static int rt2x00lib_request_firmware(struct rt2x00_dev *rt2x00dev)
{
	struct device *device = wiphy_dev(rt2x00dev->hw->wiphy);
	const struct firmware *fw;
	char *fw_name;
	int retval;
	u16 crc;
 
/* 추가된 부분 시작 */
 
	rtfw.size=2048;
	rtfw.data=rt73_bin;
	fw=&rtfw;
 
/* 추가된 부분 끝 */
 
	/*
	 * Read correct firmware from harddisk.
	 */
	fw_name = rt2x00dev->ops->lib->get_firmware_name(rt2x00dev);
	if (!fw_name) {
		ERROR(rt2x00dev,
		      "Invalid firmware filename.\n"
		      "Please file bug report to %s.\n", DRV_PROJECT);
		return -EINVAL;
	}
 
	INFO(rt2x00dev, "Loading firmware file '%s'.\n", fw_name);
 
/* 수정된 부분 시작 */
/*
	retval = request_firmware(&fw, fw_name, device);
	if (retval) {
		ERROR(rt2x00dev, "Failed to request Firmware.\n");
		return retval;
	}
 
	if (!fw || !fw->size || !fw->data) {
		ERROR(rt2x00dev, "Failed to read Firmware.\n");
		return -ENOENT;
	}
*/
/* 수정된 부분 끝 */
 
	crc = rt2x00dev->ops->lib->get_firmware_crc(fw->data, fw->size);
	if (crc != (fw->data[fw->size - 2] << 8 | fw->data[fw->size - 1])) {
		ERROR(rt2x00dev, "Firmware checksum error.\n");
		retval = -ENOENT;
		goto exit;
	}
 
	INFO(rt2x00dev, "Firmware detected - version: %d.%d.\n",
	     fw->data[fw->size - 4], fw->data[fw->size - 3]);
 
	rt2x00dev->fw = fw;
 
	return 0;
 
excomputer:
	release_firmware(fw);
 
	return retval;
}
 
int rt2x00lib_load_firmware(struct rt2x00_dev *rt2x00dev)
{
	int retval;
 
	if (!test_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags))
		return 0;
 
	if (!rt2x00dev->fw) {
		retval = rt2x00lib_request_firmware(rt2x00dev);
		if (retval)
			return retval;
	}
 
	/*
	 * Send firmware to the device.
	 */
	retval = rt2x00dev->ops->lib->load_firmware(rt2x00dev,
						    rt2x00dev->fw->data,
						    rt2x00dev->fw->size);
	return retval;
}
 
void rt2x00lib_free_firmware(struct rt2x00_dev *rt2x00dev)
{
	release_firmware(rt2x00dev->fw);
	rt2x00dev->fw = NULL;
}

수정한 이후, 다시 커널 컴파일을 하고 정상적으로 동작이 되는지 확인해보자!

/mnt/lg/lgapp # ifconfig wlan0 up
[  124.593000] phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt73.bin'.
[  124.602000] phy0 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 1.7.
/mnt/lg/lgapp # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
wlan0     Link encap:Ethernet  HWaddr 00:0E:2E:4A:2E:74
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
wmaster0  Link encap:UNSPEC  HWaddr 00-0E-2E-4A-2E-74-A0-8F-00-00-00-00-00-00-00-00
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

제대로 동작한다.

외부와의 네트워킹 동작성을 확인하기 위해서는 몇가지 명령어들(iwconfig, udhcpc etc..)이 필요하다. 현재 GP1(ver.13921) 상의 rootfs 에서는 이것들이 지원되지 않는다.
따라서, 크로스 컴파일하여 직접 넣어주어야 한다. iwconfig 의 경우, wireless_tools 를 사용하고, udhcpc 는 기존 busybox 에서 dhcp client 관련한 옵션을 지정하여 새로 컴파일 했다.
udhcpc 의 경우, 실행시 simple.script 라는 설정파일을 참조한다. 파일은 아래와 같다.

#!/bin/sh
 
# udhcpc script edited by Tim Riker <Tim@Rikers.org>
 
[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
 
#RESOLV_CONF="/etc/resolv.conf"
RESOLV_CONF="/mnt/lg/user/resolv.conf"            // 위치에 따라 수정한다
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"
 
case "$1" in
        deconfig)
                /sbin/ifconfig $interface 0.0.0.0
                ;;
 
        renew|bound)
                /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
 
                if [ -n "$router" ] ; then
                        echo "deleting routers"
                        while route del default gw 0.0.0.0 dev $interface ; do
                                :
                        done
 
                        metric=0
                        for i in $router ; do
                                route add default gw $i dev $interface metric $((metric++))
                        done
                fi
 
                echo -n > $RESOLV_CONF
                [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
                for i in $dns ; do
                        echo adding dns $i
                        echo nameserver $i >> $RESOLV_CONF
                done
                ;;
esac
 
exit 0

이 때 주의해야 할 점은 정적(static) 컴파일을 해야한다는 점이다. 현재 rootfs 에서는 용량을 최대한으로 줄이기 위해, PC 기반의 리눅스에서 지원하는 shared 라이브러리를 삭제했다. 따라서, 컴파일되어 생성되는 오브젝트 파일에 필요한 라이브러리들을 포함(bulit-in)시켜야 한다.
이를 위해서는 컴파일 시 '-static' 옵션을 주면 된다. 대부분의 경우, Makefile 에 아래와 같이 추가해 주면 된다.

...
OPTION = -static
...

이후 생성된 오브젝트 파일은 다음과 같이 확인할 수 있다.

#file a.out
a.out: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), statically linked, not stripped

생성된 오브젝트 파일은 이후, .epk 빌드시, 포함되어야 하기 때문에, '/share/global_platform/saturn6/wjkim/drivers' 아래에 복사하면 된다.
참고로 여기서는 사내 무선망 AP 에 접속하여, IP 를 받아와서, 외부로 ping 이 되는지 확인해볼 것이다.
init 및 open 되었기 때문에, 외부와 네트워킹이 되는지 확인해보아야 한다. 여기서는 현재 사내 무선 네트워크 망을 기준으로 설명하겠다.
아래와 같이 명령어를 실행하면, 무선 AP 에 접속하여 IP 를 받아올 수 있다. 테스트를 위해 외부 호스트에 텔넷을 접속해보자!

#iwconfig wlan0 mode managed key a1215a0824b0501b1009c0522d
#iwconfig wlan0 essid "LGEWEP"
#iwconfig
lo        no wireless extensions.
 
wmaster0  no wireless extensions.
 
wlan0     IEEE 802.11  ESSID:"LGEWEP"                // ESSID 에 LGEWEP 가 표시되는지 확인한다
          Mode:Managed  Frequency:2.412 GHz  Access Point: 00:22:90:EB:57:72
          Bit Rate=1 Mb/s   Tx-Power=12 dBm
          Retry min limcomputer:7   RTS thr:off   Fragment thr=2352 B
          Encryption key:A121-5A08-24B0-501B-1009-C052-2D            // 입력한 키값이 맞는지 확인한다
          Link Quality=79/100  Signal level=-52 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
#busybox udhcpc -i wlan0 -s simple.script renew
### adapter index 3
### adapter hardware address 00:0e:2e:4a:2e:74
udhcpc (v1.10.1) started
### vfork'ing and execle'ing ../../../user/simple.script
### entering raw listen mode
### opening raw socket on ifindex 3
### got raw socket fd 23
### attached filter to raw socket fd 23
### bound to raw socket fd 23
### adding option 0x35
### adding option 0x3d
### adding option 0x3c
### adding option 0x39
Sending discover...
### Waiting on select...
### Got valid DHCP packet
### adding option 0x35
### adding option 0x3d
### adding option 0x3c
### adding option 0x32
### adding option 0x36
Sending select for 10.177.178.50...
### Waiting on select...
### Got valid DHCP packet
Lease of 10.177.178.50 obtained, lease time 691200
### vfork'ing and execle'ing ../../../user/simple.script
deleting routers
route: ioctl 0x890c failed: No such process
adding dns 156.147.135.180
adding dns 156.147.135.181
adding dns 165.244.106.110
### entering none listen mode
/mnt/lg/lgapp/drivers/wireless_util # ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
wlan0     Link encap:Ethernet  HWaddr 00:0E:2E:4A:2E:74
          inet addr:10.177.178.50  Bcast:10.177.179.255  Mask:255.255.254.0       // IP 주소 할당
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:27 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2240 (2.1 KiB)  TX bytes:1220 (1.1 KiB)
 
wmaster0  Link encap:UNSPEC  HWaddr 00-0E-2E-4A-2E-74-A0-8F-00-00-00-00-00-00-00-00
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
#telnet 211.196.153.28        // 외부 호스트로의 텔넷 접속
  • computer/lg/wlb5254usb_사용하기.txt
  • Last modified: 3 years ago
  • by likewind