Broadcom 에서 받은 13472 Dongle 의 사용방법에 대해서 설명한다. 참고로 타겟의 경우, Saturn6 / GP1 을 기반으로 한다.

윈도우

드라이버 파일 broadcom.zip 을 다운받아 설치하면 된다. 해당 AP 가 13 번 채널 이하라면, 자동으로 검색된다.

처음 샘플로 받은 Wi-Fi Dongle 의 VID, PID 는 각각 '0x0a5c, 0xbd13' 으로 설정되어 있다. 양산 시에는 다른 값이 들어갈 예정이기 때문에, 디바이스 드라이버쪽에서 바뀐 VID 와 PID 에 대응하기 위해서는 수정을 해주어야 한다.
여기서는 DV1 용 Wi-Fi Dongle 에 들어가 있는 VID(=0x043e), PID(=0x4826) 를 적용해보겠다.
윈도우용 드라이버는 .inf 파일을 수정해주면 된다.
먼저 수정할 .inf 파일을 찾아야 한다. 'C:\WINDOWS\inf' 디렉토리 아래에서 '0A5C' 로 검색한다.
그러면, 몇 개의 파일이 검색된다. 나의 경우는 'oem66.inf' 파일이었다. 아래와 같이 수정한다.

;-----------------------------------------------------------------
; x64 (AMD64, Intel EM64T) - WinVista
;
[BROADCOM.NTamd64.6.0]
	%BCM430ND_DeviceDesc% = BCM43XNMD_NT60, USB\VID_0A5C&PID_BD13
	%BCM430ND_DeviceDesc% = BCM43XNMD_NT60, USB\VID_043e&PID_4826    // 추가
 
;-----------------------------------------------------------------
; x86 - WinVista
;
[BROADCOM.NTx86.6.0]
	%BCM430ND_DeviceDesc% = BCM43XNMD_NT60, USB\VID_0A5C&PID_BD13
	%BCM430ND_DeviceDesc% = BCM43XNMD_NT60, USB\VID_043e&PID_4826    // 추가
 
;-----------------------------------------------------------------
; x64 (AMD64, Intel EM64T) - WinXP
;
[BROADCOM.NTamd64]
	%BCM430ND_DeviceDesc% = BCM43XNMD, USB\VID_0A5C&PID_BD13
	%BCM430ND_DeviceDesc% = BCM43XNMD, USB\VID_043e&PID_4826         // 추가
 
;-----------------------------------------------------------------
; x86 - Win9x, Win2K, WinXP
;
[BROADCOM]
	%BCM430ND_DeviceDesc% = BCM43XNMD, USB\VID_0A5C&PID_BD13
	%BCM430ND_DeviceDesc% = BCM43XNMD, USB\VID_043e&PID_4826          // 추가
 
;-----------------------------------------------------------------

저장 후에 기존의 Wi-Fi Dongle 을 한번 꼽아준다. 바뀐 내용을 다시 적용시키기 위함이다.
그리고 나서, DV1 Wi-Fi Dongle 을 꼽아본다. 기존에는 인식을 하지 못했지만, 자동으로 인식하여 드라이버 프로그램이 실행될 것이다.

리눅스(X86)

나의 환경은 다음과 같다.

Main OS Windows XP
Guest OS Fedora 10 (2.6.27.5-117.fc10.i686 / 2.6.26)
Driver 5_14_58_10_media_premium.tar.gz
ETC VMware Workstation 6.5.1 bulid-12630

결론 부터 얘기하자면, 문제는 VMware 에 있었다. 실제로 BCM 쪽 기술지원을 하기위해 파견된 엔지니어의 노트북(Native installed Ubuntu)에서 정상 동작하는 것이 확인되었다. 하지만, VMware 상에서는 동일하게 컴파일하여도 제대로 동작하지 않았다.
결국 USB 메모리에 리눅스를 설치하여, USB 부팅을 했다. VMware 에서 사용한 모듈을 복사하여 동작시켜 본 결과, 정상 동작 했다.

#tar xzf 5_14_58_10_media_premium.tar.gz -C bcm_test
#cd bcm_test/src/wl/linux
#make nodebug-native-embed
#cd ../usbabs
#make

에러없이 컴파일 되었다면, 총 2 개의 .ko 파일이 생성된다(wl.ko, usbabs.ko)
USB 로 부팅 후에, 2 개의 모듈을 올린다.

#ifconfig eth1 up
#iwconfig eth1 mode managed key a1215a0824b0501b1009c0522d
#iwconfig eth1 essid "LGEWEP"
#dhclient eth1
#ifconfig eth1

정상적으로 동작했다면, IP 가 할당될 것이다.

타겟(Mstar)

BCM 디바이스 드라이버에서는 크게 2 가지 방법의 모듈을 지원한다.

  1. firmware file(rtecdc.trx) 을 .ko 파일에 집어넣는 경우
  2. firmware file(rtecdc.trx) 을 .ko 파일에서 빼는 경우

1번이 일반적인 방법이고, 2번 방법은 모듈(.ko)을 올린 후, 명령어를 통해 수동으로 올려주는 방법이다. 각각의 방법에 따라 컴파일 방법이 다르다.

다음의 결과물들이 필요하다.

'wl.ko, usbabs.ko' : kernel module
'bcmdl' : firmware 로딩에 필요
'wl' : 인터페이스 초기화 및 AP 접속에 필요

#tar xzf 5_14_58_10_media_premium.tar.gz -C bcm_test
#cd bcm_test/src/wl/linux
#vi Makefile

Makefile 파일을 아래와 같이 수정해야 한다.

...
ifneq ($(STBLINUX), 1)
IFLAGS := -I$(LINUXDIR)/include -I$(LINUXDIR)/include/asm/mach-default -I. \
          -I$(SRCBASE)/wl/sys -I$(SRCBASE)/include -I$(SRCBASE)/shared
else
IFLAGS := -I$(LINUXDIR)/include -I$(LINUXDIR)/include/asm/mach-generic -I. \
      -I$(LINUXDIR)/include/asm/mach-mips \                                 // 수정할 것
          -I$(SRCBASE)/wl/sys -I$(SRCBASE)/include -I$(SRCBASE)/shared
endif
...

커널 코드를 수정해야 한다. 그렇지 않으면, 모듈 로딩시, '_dma_cache_inv' 심볼을 찾을 수 없다는 에러가 발생한다.
'linux-2.6.26-saturn6/arch/mips/mm/cache.c' 파일을 아래와 같이 수정한다.

#ifdef CONFIG_DMA_NONCOHERENT
 
/* DMA cache operations. */
void (*_dma_cache_wback_inv)(unsigned long start, unsigned long size);
void (*_dma_cache_wback)(unsigned long start, unsigned long size);
void (*_dma_cache_inv)(unsigned long start, unsigned long size);
 
EXPORT_SYMBOL(_dma_cache_wback_inv);
 
#endif /* CONFIG_DMA_NONCOHERENT */
 
EXPORT_SYMBOL(_dma_cache_inv);         // 추가할 것
 
/*
 * We could optimize the case where the cache argument is not BCACHE but
 * that seems very atypical use ...
 */

수정한 후, 아래와 같이 컴파일 한다.

#STBLINUX=1 make LINUXDIR=/vol/users/wjkim/work/gp/os/saturn6_linux/kernel/linux-2.6.26-saturn6 debug-mipsel-stadef-high

컴파일 후에, wl.ko 파일이 생성된다. 이제 usbabs.ko 파일을 생성해야 한다.

#cd ../usbabs
#make LINUXDIR=/vol/users/wjkim/work/gp/os/saturn6_linux/kernel/linux-2.6.26-saturn6 

컴파일 후에, usbabs.ko 파일이 생성된다. firmware 를 따로 올리는 경우에는 이를 올려주기 위한 프로그램(bcmdl)이 별도로 필요하다.

#cd bcm_test/src/usbdev/usbdl
#vi Makefile

Makefile 파일을 아래와 같이 수정해야 한다.

...
TARGET   := bcmdl
OBJECTS  := bcmdl.o adler32.o inffast.o inflate.o infcodes.o infblock.o inftrees.o infutil.o zutil.o crc32.o
CC       := mipsel-linux-gcc           // 추가할 것
 
VPATH    := $(SRCBASE)/shared/zlib
...

이 후, usb 라이브러리를 참조할 수 없어서 더 이상의 컴파일이 안된다. http://libusb.wiki.sourceforge.net 에서 libusb 를 받아서 크로스 컴파일한 후에, 컴파일 시 참조할 수 있도록 수정해야 한다. 여기서는 libusb-0.1.12.tar.gz 을 받았다.

#tar xzf libusb-0.1.12.tar.gz
#cd libusb-0.1.12
#mkdir test
#./configure --host=mipsel-linux --prefix=/vol/users/wjkim/fm/bcm_test/libusb-0.1.12/test --exec-prefix=/vol/users/wjkim/fm/bcm_test/libusb-0.1.12/test
#make
#make install
#cd test/lib
#cp libusb.a /vol/users/wjkim/fm/bcm_test/src/usbdev/usbdl
#cd ../..
#cp usb.h /vol/users/wjkim/fm/bcm_test/src/usbdev/usbdl
#cd /vol/users/wjkim/fm/bcm_test/src/usbdev/usbdl
#vi Makefile

아래와 같이 Makefile 파일을 수정해야 한다.

...
CFLAGS   := -Wall -Wstrict-prototypes -g -static -O2 -I$(SRCBASE)/include -I$(SRCBASE)/shared/zlib -I./         // 수정할 것
LIBS     := -L./ -lusb                       // 수정할 것
...

이후, 컴파일 하면, 'bcmdl' 파일이 생성된다. 이제 'wl' 프로그램을 컴파일할 차례다.

#cd /vol/users/wjkim/fm/bcm_test/src/wl/exe
#vi GNUmakefile

GNUmakefile 파일을 다음과 같이 수정한다.

#ifdef BCMWPA2
CFLAGS += -static -DBCMWPA2    // 수정할 것
#endif
...
# $(TARGETARCH) is set based on TARGETENV in src/Makerules.* files
WL_OBJS := wlu.o wlu_linux.o bcmutils.o bcmwifi.o wlu_cmd.o wlu_iov.o
WL_EXE  := wl
CC := mipsel-linux-gcc         // 수정할 것
...
$(WL_EXE): $(WL_OBJS)
        $(CC) -static $(LDFLAGS) -o $@ $^      // 수정할 것
...

에러없이 컴파일 되었다면, 'wl' 파일이 생성된다.

이 경우에 필요한 파일은 다음과 같다.

  1. 'wl.ko, usbabs.ko' : kernel module
  2. 'wl' : 인터페이스 초기화 및 AP 접속에 필요

'src/shared/dbus.c' 파일을 아래와 같이 수정한다.

...
static dbus_intf_t *g_busintf = NULL;
static probe_cb_t probe_cb = NULL;
static disconnect_cb_t disconnect_cb = NULL;
static void *probe_arg = NULL;
static void *disc_arg = NULL;
 
dbus_intf_t dbus_test;        // 추가할 것
 
static void  dbus_flowctrl_tx(dbus_info_t *dbus_info, bool onoff);
static void* q_enq(dbus_irbq_t *q, dbus_irb_t *b);
static void* q_enq_exec(struct exec_parms *args);
static dbus_irb_t*q_deq(dbus_irbq_t *q);
static void* q_deq_exec(struct exec_parms *args);
...
static int
dbus_do_download(dbus_info_t *dbus_info)
{
	int err = DBUS_OK;
 
	if (dbus_info == NULL)
		return DBUS_ERR;
 
	if (dbus_info->fw == NULL)
		return DBUS_ERR;
 
//	if (dbus_info->drvintf->dlstart && dbus_info->drvintf->dlrun) {
	if(dbus_test.dlstart && dbus_test.dlrun){                          // 수정할 것
		err = dbus_test.dlstart(dbus_info->bus_info,              // 수정할 것
			dbus_info->fw, dbus_info->fwlen);
 
		if (err == DBUS_OK)
			err = dbus_test.dlrun(dbus_info->bus_info);     // 수정할 것
	} else
		err = DBUS_ERR;
 
	return err;
}
...
 
	/* Use default firmware */
#if defined(BCM_DNGL_EMBEDIMAGE) || defined(BCMEMBEDIMAGE)
	dbus_info->fw = (uint8 *) dlarray;
	dbus_info->fwlen = sizeof(dlarray);
 
	if (dbus_info->drvintf->dlneeded) {
 
		memset((char*)&dbus_test,'0',sizeof(dbus_intf_t));      // 수정할 것
 
		dbus_test.dlstart = dbus_info->drvintf->dlstart;        // 수정할 것
 
		dbus_test.dlrun = dbus_info->drvintf->dlrun;            // 수정할 것
 
 
		if (dbus_info->drvintf->dlneeded(dbus_info->bus_info)) {
			err = dbus_do_download(dbus_info);
			if (err == DBUS_ERR) {
				DBUSERR(("attach: download failed=%d\n", err));
				goto error;
			}
		}
	}
#endif
 
	return (dbus_pub_t *)dbus_info;
 
error:
	dbus_detach((dbus_pub_t *)dbus_info);
	return NULL;
}
...

먼저 wl.ko 파일을 생성하기 위해 앞서와 같이 Makefile 을 수정하고 아래와 같이 컴파일 한다.

#STBLINUX=1 make LINUXDIR=/home/work/wjkim/gp/os/saturn6_linux/kernel/linux-2.6.26-saturn6 debug-mipsel-embed

이후 앞서와 같은 방법으로 'usbabs.ko, wl' 을 컴파일한다.

이제 필요한 파일들을 모두 갖췄다. Target 에 올리고 아래와 같이 .ko 파일을 커널에 로딩한다.

#insmod usbabs.ko
#insmod wl.ko
041.452:TIMER_E ] Firing EV Timer 81921, Exp= 41.199, Real= 41.451, Jit=252
041.463:TIMER_E ] findSymByAddr(87c2f0) takes 11 ms
041.466:TIMER_E ] Firing CB Timer(PQ_CheckDimmingPeriodic             ) 65, Exp= 40.741, Real= 41.451, Jit=710
041.476:TIMER_E ] Firing CB Timer(VIDEO_CheckAutoArcPeriodic          ) 65, Exp= 40.876, Real= 41.467, Jit=591
[   41.645000] wl_module_incomputer: msglevel set to 0x1
[   41.650000] wl_module_incomputer: msglevel2 set to 0x0
[   41.667000] usbcore: registered new interface driver dbus_usbdev
#./bcmdl ./rtecdc.trx                                               // 명령어를 사용하여 firmware 파일을 로딩한다
Vendor 0xa5c ID 0xbd13
usb_set_debug: Setting debugging level to 255 (on)
Found device: vend=0xa5c prod=0xbd13
File Length: 110592
ID : Chip 0x4322 Rev 0x1
start
rdl.state 0x4
elapsed download time 0.187601
[   63.203000] usb 2-1: USB disconnect, address 2
[   63.223000] root hub reinitial
[   63.887000] Plug in USB Port1
[   64.171000] usb 2-1: configuration #1 chosen from 1 choice
[   64.187000] ddddddddddddddddddddd
[   64.191000] wl_dbus_probe_cb:
[   64.203000] bcm_rpc_up: waiting to be connected
[   64.208000] bcm_rpc_buf_recv_mgn_high: Recvd:2 Version: 0x50e3a0a
[   64.208000] State: 1 Session:0
[   64.208000] bcm_rpc_buf_recv_mgn_high: Reason: 0 Dongle Version: 0x50e3a0a
[   64.208000] bcm_rpc_buf_recv_mgn_high: Connected!
[   64.279000] eth0: Broadcom BCM0bdc 802.11 Wireless Controller 5.14.58.10 (Compiled in /vol/users/wjkim/fm/bcm/src at 14:44:11 on May 28 2009)
[   64.313000] usb 2-1: New USB device found, idVendor=0a5c, idProduct=0bdc
[   64.321000] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   64.330000] usb 2-1: Product: BCMUSB 802.11 Wireless Adapter
[   64.340000] usb 2-1: Manufacturer: Broadcom
[   64.345000] usb 2-1: SerialNumber: 13472
#ifconfig -a
...
#ifconfig eth0 up
#ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1C:A8:83:34:A0
          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)
...

USB-to-Wireless Dongle 에 씌여진 MAC 주소와 동일하다면, 성공이다.

위와 같이 수정했음에도 불구하고, 커널 패닉이 발생할 수 있다. 이럴 경우, 아래와 '똑같이' 수정해준다.

static dbus_intf_t *g_busintf = NULL;
static probe_cb_t probe_cb = NULL;
static disconnect_cb_t disconnect_cb = NULL;
static void *probe_arg = NULL;
static void *disc_arg = NULL;
 
dbus_intf_t dbus_test;        // 추가할 것
 
static void  dbus_flowctrl_tx(dbus_info_t *dbus_info, bool onoff);
static void* q_enq(dbus_irbq_t *q, dbus_irb_t *b);
static void* q_enq_exec(struct exec_parms *args);
static dbus_irb_t*q_deq(dbus_irbq_t *q);
static void* q_deq_exec(struct exec_parms *args);

따로 firmware 를 올려줄 필요없이 아래와 같이 바로 두 개의 .ko 파일을 올려주면 된다.

# insmod usbabs.ko
/mnt/lg/lgapp/drivers/wireless # insmod wl.ko
280.170:TIMER_E ] Firing EV Timer 81921, Exp=279.392, Real=280.169, Jit=777
280.183:TIMER_E ] findSymByAddr(ad206c) takes 12 ms
280.187:TIMER_E ] Firing CB Timer(PQ_CheckDimmingPeriodic             ) 65, Exp=279.343, Real=280.169, Jit=826
280.197:TIMER_E ] Firing CB Timer(VIDEO_CheckAutoArcPeriodic          ) 65, Exp=279.457, Real=280.187, Jit=730
[  280.360000] wl_module_incomputer: msglevel set to 0x1
[  280.365000] wl_module_incomputer: msglevel2 set to 0x0
[  280.378000] usbcore: registered new interface driver dbus_usbdev
[  286.131000] Plug in USB Port1
[  286.425000] usb 2-1: configuration #1 chosen from 1 choice
[  286.448000] ddddddddddddddddddddd
[  286.452000] tttttttttttttttttt
[  286.456000] intf.dlstart_value = c08098ec
[  286.462000] intf.dlrun_value = c0809c40
[  286.469000] wl_dbus_probe_cb:
[  286.482000] 00000000
[  286.486000] fw_value = 0x48dlarry_value = 0x48-------dlstart_value =c08098ec
[  286.495000] -------dlrun = c0809c40
[  286.500000] ++++++++dlstart_value =c08098ec
[  286.508000] +++++++dlrun = c0809c40
[  286.515000] dbus_usb_dlneeded: chip 0x4322 rev 0x1
[  286.522000] 111111
[  286.524000] 222222
[  286.527000] ****************
[  295.286000] wwwwwwwwwwwwwwwwwwwwwwww
[  295.290000] xxxxxxxxxxxxxxxxxxxxxxxx
[  295.295000] yyyyyyyyyyyyyyyyyyyy
[  295.570000] 333333
[  295.574000] dbus_usb_dlrun: Issue DL_GO
[  295.782000] dbus_usb_dlrun: download done 10 ms chip 0xa123 rev 0x1
[  295.795000] 44444444
[  295.797000] 7777777
[  295.806000] bcm_rpc_up: waiting to be connected
[  295.811000] bcm_rpc_buf_recv_mgn_high: Recvd:2 Version: 0x50e3a0a
[  295.811000] State: 1 Session:0
[  295.811000] bcm_rpc_buf_recv_mgn_high: Reason: 0 Dongle Version: 0x50e3a0a
[  295.811000] bcm_rpc_buf_recv_mgn_high: Connected!
[  295.899000] eth0: Broadcom BCM0bdc 802.11 Wireless Controller 5.14.58.10 (Compiled in /vol/users/wjkim/fm/bcm/src at 17:28:37 on Jun  1 2009)
[  295.981000] usb 2-1: New USB device found, idVendor=0a5c, idProduct=bd13
[  295.990000] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  295.999000] usb 2-1: Product: Remote Download Wireless Adapter
[  296.007000] usb 2-1: Manufacturer: Broadcom
[  296.012000] usb 2-1: SerialNumber: 000000000001
# ifconfig eth0 up
/mnt/lg/lgapp/drivers/wireless # ifconfig
eth0      Link encap:Ethernet  HWaddr 00:1C:A8:83:34:A0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metri
          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)

WPS 를 사용하기 위해서는 별도의 컴파일이 필요하다.

$cd bcm_test/src/wps/linux/enr
$vi wps_enr_app.mk

'wps_enr_app.mk' 을 아래와 같이 수정한다.

CC = mipsel-linux-gcc
...
CFLAGS = -static -Wall -Wnested- ...       // -static 추가
CXXFLAGS = -static -Wall -Wnested- ...     // -static 추가
...
ifeq ($(CC), mipsel-linux-gcc)
STRIP = mipsel-linux-strip
OS = mipsel-linux_
endif
...
$(CC) -static $(OBJS) $(LIBS) -o $(CC)/wpsenr     // -static 추가
...
$(CC) -static $(REGOBJS) $(LIBS) -o $(CC)/wpsreg  // -static 추가
...
$(CC) -static $(OBJS) $(LIBS) -o $(CC)/wpsenr    // -static 추가
...
$(CC) -static $(REGOBJS) $(LIBS) -o $(CC)/wpsreg  // -static 추가
...
$(CC) -static -c $(CFLAGS) $(INCLUDE) $< -o $@    // -static 추가

수정했다면, 컴파일 한다. 생성된 실행파일을 복사한다.

$make -f wps_enr_app.mk
$cd ./mipsel-linux-gcc
$cp wpsenr /share/global_platform/saturn6/wjkim/drivers/wireless/bcm

앞에서 생성한 파일을 다운로드하여, 부팅한 후 관련 모듈 및 인페이스를 open 한다.

$wpsenr -if eth0 -pb      // AP 의 WPS 버튼 누름
*********************************************
WPS - Enrollee App Broadcom Corp.
Version: 5.14.58.5
*********************************************
[  206.189000] wl0: wlc_del_ie: IE not in list
-------------------------------------
 0 :  SSID:ASW  BSSID:0:8:9f:52:2a:e0  Channel:3  WEP
-------------------------------------
-------------------------------------
 0 :  SSID:ASW  BSSID:0:8:9f:52:2a:e0  Channel:3  WEP
-------------------------------------
-------------------------------------
-------------------------------------
-------------------------------------
 0 :  SSID:ASW  BSSID:0:8:9f:52:2a:e0  Channel:3  WEP
-------------------------------------
Joining network ASW - 16
[  220.468000] wl Link Up
[  220.470000] wl0: link up
Start enrollment for BSSID:0:8:9f:52:2a:e0
Send EAPOL-Start
Receive EAP-Request / Identity
Send EAP-Response / Identity
Receive EAP-Request(Start)
Send EAP-Response(M1)
Receive EAP-Request(M2)
Send EAP-Response(M3)
Receive EAP-Request(M4)
Send EAP-Response(M5)
Receive EAP-Request(M6)
Send EAP-Response(M7)
Receive EAP-Request(M8)
Send EAP-Response(DONE)
WPS Protocol SUCCEEDED !!
SSID = ASW
Key Mgmt type is OPEN
Key : 61616161616161616161616161
Encryption :  WEP
 
Apply security to driver ... Success !!

위와 같이 명령한 후에 AP 의 WPS 버튼을 누른다.

AP 쪽에서 Dongle 의 Pin 번호를 입력한다. 여기서는 '12345670' 이다. 이를 등록한 후에 아래 명령어를 실행한다.

$wpsenr -if eth0 -sec 1 -ssid ASW -pin 12345670
*********************************************
WPS - Enrollee App Broadcom Corp.
Version: 5.14.58.5
*********************************************
Joining network [  518.630000] wl Link Down
ASW - 1
[  518.634000] wl0: link down
[  520.798000] wl Link Up
[  520.800000] wl0: link up
Start enrollment for BSSID:0:8:9f:52:2a:e0
Send EAPOL-Start
Receive EAP-Request / Identity
Send EAP-Response / Identity
Receive EAP-Request(Start)
Send EAP-Response(M1)
Receive EAP-Request(M2)
Send EAP-Response(M3)
Receive EAP-Request(M4)
Send EAP-Response(M5)
Receive EAP-Request(M6)
Send EAP-Response(M7)
Receive EAP-Request(M8)
Send EAP-Response(DONE)
WPS Protocol SUCCEEDED !!
SSID = ASW
Key Mgmt type is OPEN
Key : 61616161616161616161616161
Encryption :  WEP
 
Apply security to driver ... Success !!

이후에 IP 를 받아오면 된다.

문제점

firmware 를 bulit-in 하여 모듈을 로딩하는 경우, 타이밍에 따라 커널 패닉이 발생한다.
이런 경우 수정이 가능하지만, printf 나 mdelay 함수를 주석처리하면, 커널 패닉이 발생한다. 앞으로 반드시 수정되어야 할 문제점이다.

기존의 경우, 커널 수정이 필요했었다. 하지만, 실제로 수정했던 함수는 필요없는 함수였다.
아래와 같이 수정하면, 굳이 커널을 수정할 필요가 없다.

$vi bcm_test/src/shared/linux_osl.c
...
#ifdef mips
//dma_cache_inv((uint)va, size);     주석 처리
return (virt_to_phys(va));
#else
return (pci_map_single(osh->pdev, va, size, PCI_DMA_FROMDEVICE));
#endif
}
}
...
  • computer/lg/broadcom_dongle_사용하기.txt
  • Last modified: 4 years ago
  • by likewind