드라이버 레벨에서 Wi-Fi Direct 동작을 검증할 수 있는 방법에 대해 설명한다.

빌드하기(x86)

P2P 의 경우, 최소 2 대 이상이 필요하기 때문에 TV Set 를 제외한 다른 Wi-Fi 디바이스가 필요하다. 여기서는 PC 를 예로 들겠다.
사양은 다음과 같다.

OS Fedora 11(Leonidas)
Kernel 2.6.29.4-167.fc11
Model XNOTE LB50
Driver kirin_rel_5_100_68_31_GP3.tar.gz

처음에 우분투를 설치하였다가, 몇 번의 삽질 끝에 Fedora 를 선택했다. 별도의 커널 빌드가 필요하지 않기 때문에, 빠른 시간에 원하는 결과물을 얻을 수 있다.
바로 빌드를 할 수 있을 것 같지만, 몇 가지 수정사항이 필요했다.

L.21
...
elif [ "$1" == direct ] ; then
        source setenv-x86.sh 4323
        ./build-drv-embed-p2p.sh
        ./build-app-p2p.sh
#!/bin/bash
 
if [ "${TARGETARCH}" == x86 ] ; then
        export BUILDCFG=
        export STBLINUX=0
else
        export BUILDCFG=mipsel-mips-
        export STBLINUX=1
fi
 
export BUILDCFG=${BUILDCFG}apdef-stadef-high-dnglimage-media-p2p
export BRAND=linux-external-wl
export WLTEST=0
export FIRMWARE=${CHIPVER}-bmac/roml-ag-nodis-media-p2p
 
echo ""
echo "************************************************"
echo "      FIRMWARE = ${FIRMWARE}                   "
echo "************************************************"
echo ""
sleep 3
 
mkdir ${TARGETDIR}
make -C ./src/linuxdev LINUXVER=${LINUXVER} TARGETARCH=${TARGETARCH} V=1
cp -v ./src/linuxdev/obj-bcm_usbshim-${LINUXVER}-${TARGETARCH}/bcm_usbshim.ko ${TARGETDIR}
 
make -C ./src/wl/linux ${BUILDCFG} WLTEST=${WLTEST} FIRMWARE="${FIRMWARE}" WLLXIW=${WLLXIW} LINUXVER=${LINUXVER} USBSHIM=${USBSHIM} V=1 $1
cp  -v ./src/wl/linux/obj-${BUILDCFG}-${LINUXVER}/wl.ko ${TARGETDIR}
cp  -v ./src/wl/linux/obj-${BUILDCFG}-${LINUXVER}/wl.ko ${TARGETDIR}/${CHIPVER}-${BUILDCFG}-wl.ko
 
make -C ./src/wl/exe                                    // 추가
cp -v ./src/wl/exe/wl ${TARGETDIR}                      // 추가
cp -v ./src/wl/exe/led ${TARGETDIR}                     // 추가
cp -v ./src/wl/exe/ibss_status ${TARGETDIR}             // 추가
cp -v src/p2p/p2plib/linux/sampleapp/obj-intsec-${LINUXVER}-debug-x86/bcmp2papp ${TARGETDIR}     // 수정

빌드하기(mips)

bcmp2papp 를 사용시, 여러가지 명령어들을 함께 사용한다. 이때 Path 를 맞춰주기 위해 src/p2p/p2plib/linux/sampleapp/Makefile 파일을 수정한다.

ifneq ($(findstring mipsel, $(CC)),)
  CFLAGS += -DTARGETENV_BCMSTB = 1      // 주석 처리
endif

마찬가지로 src/p2p/p2plib/linux/Makefile 파일을 수정한다.

ifneq ($(findstring mipsel, $(CC)),)
  CFLAGS += -DTARGETENV_BCMSTB = 1      // 주석 처리
endif

준비운동 하기

드라이버 레벨에서 동작 확인을 해야하기 때문에, 불가피하게 NM 을 실행하지 않도록 한다. root.c 파일을 아래와 같이 해당 루틴을 주석처리 한다.

L.684
#ifdef INCLUDE_NM
/*
 if(OSA_MD_IsSupportNetworkSpec())
 {
  MAIN_DoPostInitTaskDebug("CheckNM Start");
  checkNMTaskID = OSA_CreateTask("CheckNM", NULL, NULL, 1);
 }
*/
#endif

또한 'NetworkManager, NetworkManager.basic' 파일을 삭제하고 빈파일을 생성한다.

# touch NetworkManager.basic

이후 NM 이 실행되지 않을 것이다. 'bcmp2papp, wlmips' 파일을 추가한다.

bcmp2papp 사용하기

Wi-Fi Direct 를 테스트하기 위해서는 아래와 같이 실행한다.

#./wlmips down
#./wlmips apsta 1
#./wlmips up
#./bcmp2papp -d --pif wlan0
 
****************************************************
Broadcom Wi-Fi Direct Host Support Library Test App
Version: P2P_REL_1_132_0
****************************************************
--> Friendly name    : 'BcmDevice3'
--> Discovery timeout: 3600 seconds
--> Listen channel   : 11
--> Operating channel: 11
--> WPS mode         : PBC
00000.000 ****************************************************
00000.000 Broadcom Wi-Fi Direct Host Support Library Test App
00000.000 Version: P2P_REL_1_132_0
00000.000 ****************************************************
00000.000 Compile options:
00000.000   P2PAPI_ENABLE_WPS=1
00000.000   P2PAPI_ENABLE_GO_NEGOTIATION=1
00000.000   P2PAPI_ENABLE_MULTI_CHANNEL=1
00000.000   P2PAPI_ENABLE_BLIND_CHANNEL_SYNC=0
00000.000   P2PAPI_ENABLE_DHCPD=0
00000.000   P2PAPI_ENABLE_DRIVER_EVENTS=1
00000.000   P2PAPI_USE_IDAUTH=1
00000.000   P2PAPI_USE_IDSUP=1
00000.000   P2PAPI_ENABLE_SERVICE_DISCOVERY=1
00000.000 p2papi_open: if_name=wlan0, primary_if_name=wlan0, sz=390428
00000.003 p2papi_reset_state
00000.003 p2papi_open: gon_dialog_token = 215
00000.003 p2posl_open: pri_ifname=wlan0
00000.003 p2papi_osl_init_go_neg
00000.003 p2posl_open: hdl=0x2ab75008 osl_hdl=0x52a068 wl=0x52a0f8
00000.003     osl->app_hdl=0x2ab75008 ->magic=0xa2d2 ->wl->wl_magic=0xe1c1
00000.003 p2pwl_iovar_getbuf_bss: iovar=cur_etheraddr, bssidx=0
00000.003 ---wl -i wlan0 cur_etheraddr   ==> 00:e0:91:d0:be:c0
00000.003 p2papi_osl_open: P2P Device addr=02:e0:91:d0:be:c0
00000.003               P2P Interface addr=02:e0:91:d0:3e:c0
00000.003 ---wl p2p_if 02:e0:91:d0:3e:c0
00000.004 p2pwl_iovar_getbuf_bss: iovar=p2p_if, bssidx=0
00000.004 wl_ioctl: ioctl error -1
00000.004 p2pwl_iovar_getbuf_bss: iovar=bcmerrorstr, bssidx=0
00000.004 wl: Not Found
00000.004   s=5 cmd=262 buf=0x7fd36574 len=64 set=0 wl=0x52a0f8, ret=-1
00000.004   pri/dis/con ifidx=0/0/0 ifnames=wlan0//, ioctl ifname=wlan0
00000.004     WLC_GET_VAR p2p_if
00000.004 An ioctl error here is normal - it means no leftover BSS was found
00000.004 p2papi_fsm_reset
00000.004 ---wl WLC_GET_MAGIC
00000.004 ---wl WLC_GET_VERSION
00000.004 p2pwlu_p2p_apsta_setup: disc-bssidx=0 conn-bssidx=0
00000.004 p2pwl_iovar_getbuf_bss: iovar=apsta, bssidx=0
00000.004 ---wl -i wlan0 apsta   ==> 1
00000.004 p2pwlu_enable_apsta: APSTA already on
00000.004 ---wl -i wlan0 p2p_disc 0
00000.005 p2pwlu_p2p_apsta_setup: done
00000.005 ---wl isup   ==> 0
00000.005 ---wl up
00000.105 ---wl isup   ==> 0
00000.105 ---wl -i wlan0 event_msgs
00000.105                        ==> 0x0000000000000000
00000.105 p2papi_init_driver_event_masks: enab WLC_E_PROBREQ_MSG
00000.105 p2pwl_iovar_getbuf_bss: iovar=cur_etheraddr, bssidx=0
00000.106 ---wl -i wlan0 cur_etheraddr   ==> 00:e0:91:d0:be:c0
00000.106 p2papi_open: my MAC=00:e0:91:d0:be:c0
00000.106 initialize_channel_list: country code=US
00000.106 ---wl p2p
00000.106 p2pwl_iovar_getbuf_bss: iovar=p2p, bssidx=0
00000.106 p2pwl_get_p2p_supported=1
00000.106 p2posl_start_raw_rx_mgr
00000.106 p2papi_linux_brcm_open: socket 9 opened
00000.106 p2papi_enable_driver_events: enab_prob_req=0
00000.106 p2papi_linux_rx_thread: begin
00000.107 ---wl -i wlan0 event_msgs 0x1050501002011be9
00000.107 ---wl isup   ==> 0
00000.107 ---wl up
00000.107 p2papp_get_link_config: p2papp_go_intent=8 override=1
00000.107 p2papi_save_link_config: pConfig=0x4c3170 ssid=BcmDevice3 di=0 cg=0 cd=0
00000.107 p2papi_enable_p2p: 1
00000.107 p2papi_generate_go_ssid: fname=BcmDevice3 ssid=DIRECT-2K-BcmDevice3
00000.107 p2papi_save_link_config: generated ssid=DIRECT-2K-BcmDevice3
00000.107 config_to_credentials
00000.108 p2papi_save_link_config: changing passphrase
00000.108 passphrase_to_pmk: pp=22ndStStation
00001.345 p2pwl_iovar_getbuf_bss: iovar=cur_etheraddr, bssidx=0
00001.345 ---wl -i wlan0 cur_etheraddr   ==> 00:e0:91:d0:be:c0
00001.345 p2papi_save_link_config: ch=11 rnd=0 auth=3 enc=3 ix=0 cm=392,0
00001.345     key=C9B3B0E2BC7D3B7185B7A85DCAD7FFA2E36D16539F2EB7D26016D4D02606CBDE wpsPin=12345670
00001.345     we_want_persist_grp=0
00001.345     ssid=DIRECT-2K-BcmDevice3 hide=0 wpsEn=1 p2pEn=1 intent=8 pg=392
00001.345     DHCP: enab=1 subnet=0xc0a81000 range=0xab,b4
p2papp: disabling PBC overlap detection.
00001.346 p2papi_enable_pbc_overlap: disable_pbc_overlap=1
00001.346 p2papi_enable_driver_events: enab_prob_req=0
00001.346 ---wl -i wlan0 event_msgs 0x1050401002011be9
00001.346 p2pwl_iovar_getbuf_bss: iovar=cur_etheraddr, bssidx=0
00001.346 ---wl -i wlan0 cur_etheraddr   ==> 00:e0:91:d0:be:c0
--> Our MAC address  : 00:e0:91:d0:be:c0
00001.346 p2papp_redraw: (null)
00001.346 +-------------------------------------------------------------
00001.346 | Status:
00001.347 |
00001.347 | P2P Discovery: Off
00001.347 | Connected    : No, Pushbutton
00001.347 +-------------------------------------------------------------
 
+-----------------------------------------------------------------------------+
| Status:
|                                                   IntAddr=02:e0:91:d0:3e:c0
| P2P Discovery: Off                                DevAddr=02:e0:91:d0:be:c0
| Connected    : No                                 Pushbutton
| _____________________ P2P Commands _______________
| e) Enable discovery         l) Enter Listen state
| d) Disable discovery        pbc) Activate pushbutton
| g) Create P2P Group Owner
| <num>) Initiate connection to discovered peer <num>
| P <num>) Send provision discovery request to peer <num>
| Pi) Send provision discovery request on invite
| I <num>) Active GO/GC send InviteReq to P2P device <num>
| J) +A...H - Inactive GC send InviteReq to inactive GO
| K) +A...H, +1...9 - Inactive GO send InviteReq to inactive GC
| B) Enable extended listen timing
| S <num>) Send service discovery to peer <num>
| W) Join with WPS (after invite)
| Ycda <num> <client#>) Send dev discoverability to GO <num>
| ___________________ SoftAP Commands _____________
| s) Soft AP Create           t) Soft AP Teardown
| ___________________ Common Commands _____________
| r) Redraw screen            q) Quit
+-----------------------------------------------------------------------------+
>

'e' 를 입력하여 'Enable discovery' 를 선택한다.

> e
> 00268.381 p2papp_redraw: ........Discovery already on......
00268.381 +-------------------------------------------------------------
00268.381 | Status: ........Discovery already on......
00268.382 |
00268.382 | P2P Discovery: On
00268.382 | Connected    : No, Pushbutton
00268.382 | Discovered peers:
00268.382 |   1)  BcmDevice3                 02:e0:91:d0:54:fb          Ch.11  display
00268.382 +-------------------------------------------------------------
 
+-----------------------------------------------------------------------------+
| Status: ........Discovery already on......
|                                                   IntAddr=02:e0:91:d0:3e:c0
| P2P Discovery: On                                 DevAddr=02:e0:91:d0:be:c0
| Connected    : No                                 Pushbutton
| Discovered peers:
|   1)  BcmDevice3                 02:e0:91:d0:54:fb          Ch.11  display     // 찾은 디바이스 정보
| _____________________ P2P Commands _______________
| e) Enable discovery         l) Enter Listen state
| d) Disable discovery        pbc) Activate pushbutton
| g) Create P2P Group Owner
| <num>) Initiate connection to discovered peer <num>
| P <num>) Send provision discovery request to peer <num>
| Pi) Send provision discovery request on invite
| I <num>) Active GO/GC send InviteReq to P2P device <num>
| J) +A...H - Inactive GC send InviteReq to inactive GO
| K) +A...H, +1...9 - Inactive GO send InviteReq to inactive GC
| B) Enable extended listen timing
| S <num>) Send service discovery to peer <num>
| W) Join with WPS (after invite)
| Ycda <num> <client#>) Send dev discoverability to GO <num>
| ___________________ SoftAP Commands _____________
| s) Soft AP Create           t) Soft AP Teardown
| ___________________ Common Commands _____________
| r) Redraw screen            q) Quit
+-----------------------------------------------------------------------------+

기본 접속 설정은 'PBC' 이다. 'PIN' 으로 접속 시에는 다음과 같이 명령한다.

#./bcmp2papp -d --pif wlan0 --pin 12345670

bcmp2papp 는 기본적으로 intent 값이 8 로 설정되어 있다. 이 값을 수정할 수 있는데, 값이 높을 수록 GO 가 된다.
src/p2p/p2plib/linux/sampleapp/p2p_app.c 파일을 아래와 같이 수정한다.

...
static BCMP2P_UINT8 p2papp_go_intent = 8;   # intent value
...
  • computer/lg/wi-fi_direct_동작_확인하기_driver_level.txt
  • Last modified: 3 years ago
  • by likewind