- vi .bash_profile or bashrc
PATH="/home/jhlee/CodeSourcery/Sourcery_G++_Lite/bin:${PATH}" PATH=${HOME}/bin:${PATH} ## add tail export PATH export ARCH=arm export CROSS_COMPILE=arm-none-eabi-
2. Build 환경 및 HAL 확인 (Android)
- vi BoardConfig.mk 확인 (Odroid 인 경우)
기본 WPA_SUPPLICANT의 빌드환경을 확인
만약 다른 driver를 사용시 이름변경. (MADWIFI, PRISM )
BOARD_WPA_SUPPLICANT_DRIVER := WEXT
(이는 external/wpa_supplicant/Android.mk 에서 driver_wext.c 동작 )
(이는 external/wpa_supplicant/Android.mk 에서 driver_wext.c 동작 )
- WIFI_DRIVER 정보확인
- WIFI_DRIVER_MODULE_NAME
- WIFI_DRIVER_MODULE_PATH
- WIFI_DRIVER_MODULE_ARG
- vi Boardconfig.mk (WIFI Driver 설정 예)
# # Wifi related defines # # ralink module = rt5370sta, realtek = rtl8191su # BOARD_WIFI_VENDOR := realtek BOARD_WLAN_DEVICE := rtl819xxu WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_WPA_SUPPLICANT_DRIVER := WEXT BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_rtl WIFI_DRIVER_MODULE_NAME := "rtl8191su" WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/rtl8191su.ko" WIFI_DRIVER_MODULE_NAME2 := "rtl8192cu" WIFI_DRIVER_MODULE_PATH2 := "/system/lib/modules/rtl8192cu.ko" WIFI_DRIVER_MODULE_NAME3 := "rt5370sta" WIFI_DRIVER_MODULE_PATH3 := "/system/lib/modules/rt5370sta.ko" # Realtek driver has FW embedded inside, and will automatically load FW # at NIC initialization process. So there is no need to set these # 5 variables. WIFI_DRIVER_MODULE_ARG := "" WIFI_FIRMWARE_LOADER := "" WIFI_DRIVER_FW_PATH_STA := "" WIFI_DRIVER_FW_PATH_AP := "" WIFI_DRIVER_FW_PATH_P2P := "" WIFI_DRIVER_FW_PATH_PARAM := ""
- Android의 HAL Layer 부분확인
아래는 다른 Android HAL 예제
https://android.googlesource.com/platform/hardware/libhardware_legacy/+/64cca04dcbf4e21a51131224b9d0f0c596f876d4/wifi/wifi.c
Serial에서 service를 동작 가능하며, sta의 경우 wpa_suplicant를 쉽게 Control
# start wpa_supplicant
# stop wpa_suppilcant
vi init.odroidx2.rc (odroid 예제)
PATH:
- init.rc 확인 (init.odroidx2.rc)
Serial에서 service를 동작 가능하며, sta의 경우 wpa_suplicant를 쉽게 Control
# start wpa_supplicant
# stop wpa_suppilcant
vi init.odroidx2.rc (odroid 예제)
service wpa_supplicant /system/bin/wpa_supplicant \ -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf \ -O/data/misc/wifi/sockets \ -e/data/misc/wifi/entropy.bin -g@android:wpa_wlan0 # we will start as root and wpa_supplicant will switch to user wifi # after setting up the capabilities required for WEXT # user wifi # group wifi inet keystore class main socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot service dhcpcd_wlan0 /system/bin/dhcpcd -aABDKL class main disabled oneshot service iprenew_wlan0 /system/bin/dhcpcd -n class main disabled oneshot # eth0 service dhcpcd_eth0 /system/bin/dhcpcd -ABDKL class main disabled oneshot # IP Renew # eth0 service iprenew_eth0 /system/bin/dhcpcd -n class main disabled oneshot
init문법 관련내용(systemd의 경우는 다름)
http://taehyo.egloos.com/4129642
http://taehyo.egloos.com/4129642
2.1 WIFI STA의 WPA Supplicant 의 설정
위에서 init.rc에 보면 사용하는 wpa_supplicant.conf는 /data/misc/wifi/wpa_supplicant.conf이다.
- vi wpa_supplicant.conf
위에서 init.rc에 보면 사용하는 wpa_supplicant.conf는 /data/misc/wifi/wpa_supplicant.conf이다.
PATH:
/data/misc/wifi/wpa_supplicant.conf
/etc/wifi/wpa_supplicant.conf
확인사항:
/etc/wifi/wpa_supplicant.conf
확인사항:
ctrl_interface의 path 의 권한 및 소유를 확인하자. ( ls -ah)
HAL과 Kernel 모듈도 권한 및 소유 확인.
/lib/libhardware_legacy.so
/lib/modules/rtl8191su.ko
Ref. (Android WIFI Porting 시 참고사항)
http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html
http://processors.wiki.ti.com/index.php/TI-Android-GingerBread-2.3.4-DevKit-2.1_PortingGuides#WLan
http://pds22.egloos.com/pds/201205/17/14/Android_Device_Driver_Collage8.pdf
3. WIFI TEST 및 동작확인 (Tool 사용)
각각 의 wlan의 status 확인하자 (init.rc , hal 하고 관련)
손쉽게 wpa_supplicant.conf에서 직접 설정해서 해도 된다.
DHCP Success
반드시 ack를 확인하고 해당 IP 확인하자
test 시 ps 확인하고 kill로 해당 프로세스를 없애자.
만약 지속적으로 dhcpcd 문제가 발생시 dhcpcd -n ( renew하고 다시 실행)
( kernel 포함가능성 확인 , make menuconfig 확인 )
- ifconfig wlan0 명령으로 연결확인
(ifconfig wlan0 up 시도 및 다른 이름 찾기:wlan0 이 아닐 경우)
SIOCGIFFLAGS : Link 에러로 Module 이상이나, 연결이 안되었을 가능성 있음. 기본문제
wlan0: Cannot assign requested address : wpa_supplicant 문제
HAL과 Kernel 모듈도 권한 및 소유 확인.
/lib/libhardware_legacy.so
/lib/modules/rtl8191su.ko
ctrl_interface=/data/misc/wifi/sockets update_config=1 device_name=odroidx2 manufacturer=HARDKERNEL Co., Ltd. model_name=ODROID-X2 model_number=ODROID-X2 serial_number= device_type=10-0050F204-5 config_methods=physical_display virtual_push_button network={ ssid="CWPW" key_mgmt=NONE priority=1 } network={ ssid="U+Net6AFB" psk="5000050330" key_mgmt=WPA-PSK priority=2 }
http://blog.linuxconsulting.ro/2010/04/porting-wifi-drivers-to-android.html
http://processors.wiki.ti.com/index.php/TI-Android-GingerBread-2.3.4-DevKit-2.1_PortingGuides#WLan
http://pds22.egloos.com/pds/201205/17/14/Android_Device_Driver_Collage8.pdf
3. WIFI TEST 및 동작확인 (Tool 사용)
- wpa_supplicant test 및 module test
각각 의 wlan의 status 확인하자 (init.rc , hal 하고 관련)
# lsmod //확인
# insmod /lib/modules/rtl8191su.ko
# getprop wifi.interface // wlan0 , 이 값은 driver에 따라 변경이 가능하다. eth0, usb0, 제조사이름
# getprop wlan.interface // wlan0
# getprop wlan.driver.status // ok
# getprop init.svc.wpa_supplicant // wpa_supplicant의 상태를 나타낸다, stopped or running 체크하자.
# setprop wlan.interface "wlan0" // HAL에서도 설정이 존재한다.
# setprop wifi.interface "wlan0" // HAL에서도 이 설정 존재하며, 중요하다.
# setprop wlan.driver.status "ok" // HAL 및 init.rc에 이 설정이 존재
# ifconfig wlan0 up
# start wpa_supplicant // 위의 init.rc의 service를 실행할 수 있다.
# stop wpa_supplicant //
or
# wpa_supplicant -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf -dd &
- wpa_cli test
손쉽게 wpa_supplicant.conf에서 직접 설정해서 해도 된다.
# wpa_cli -p /data/misc/wifi/sockets -iwlan0 // data/misc/wifi/wpa_supplicant.conf, ctrl_interface 참조 > scan // scan 시작한다. <3>WPS-AP-AVAILABLE <3>CTRL-EVENT-SCAN-RESULTS <3>WPS-AP-AVAILABLE <3>CTRL-EVENT-SCAN-RESULTS <3>CTRL-EVENT-SCAN-RESULTS <3>CTRL-EVENT-SCAN-RESULTS <3>CTRL-EVENT-SCAN-RESULT ...... > scan_results // scan 결과를 아래와 같이 보자 00:40:5a:9c:6a:fa 2422 -69 [WPA2-EAP-CCMP][ESS] U+zone 00:40:5a:9c:6a:f9 2422 -70 [WPA2-PSK-CCMP][ESS] U+Net6AFB 00:40:5a:9c:6a:f8 2422 -69 [WPA-PSK-TKIP][ESS]00:26:66:a0:35:ba 2432 -88 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] iptime89 6c:fd:b9:30:ba:82 2457 -76 [WEP][ESS] SAMSUNG 00:90:a2:12:b5:b1 2457 -92 [WPA2-PSK-CCMP][ESS] U+NetB5B3 00:27:1c:55:71:ed 2412 -91 [WPA2-PSK-CCMP][ESS] U+Net71EF 00:27:1c:55:71:ee 2412 -90 [WPA2-EAP-CCMP][ESS] U+zone 00:24:a5:34:2f:b3 2462 -92 [WPS][ESS] 0024A5342FB3 > list_networks // 현재 나의 network를 점검, wpa_supplican.conf 기반으로 점검이 된다. network id / ssid / bssid / flags 0 CWPW any > add_network // 현재 내가 접속하고자 하는 Network이 없기에 추가. 1 > set_network 1 ssid "U+Net6AFB" // add_network 에서 받은 번호를 입력하고, SSID를 입력하자!, scan_result 참조. OK > set_network 1 psk "5000050330" // 암호를 입력하자. psk 형태이다. scan_result 참조. OK > select_network 1 // 설정된 1번 을 선택하자 , select_network를 이용하여 여러 접속가능. OK > status // 상태 확인 bssid=00:40:5a:9c:6a:f9 ssid=U+Net6AFB id=1 mode=station pairwise_cipher=CCMP group_cipher=CCMP key_mgmt=WPA2-PSK wpa_state=COMPLETED address=e8:4e:06:0a:96:14 > disconnect // 현재 연결된 AP 종료 > reconnect // 현재 연결된 AP 재연결 > remove_network 1 // 1 번 network 제거 > quit // wpa_cli 종료 3>3>3>3>3>3>3>
- dhcpcd 설정
DHCP Success
# dhcpcd wlan0 & // dhcpc service 성공. [1] 2771 dhcpcd[2771]: version 5.5.6 starting dhcpcd[2771]: wlan0: sending IPv6 Router Solicitation dhcpcd[2771]: wlan0: rebinding lease of 192.168.123.164 dhcpcd[2771]: wlan0: acknowledged 192.168.123.164 from 192.168.123.254 dhcpcd[2771]: wlan0: checking for 192.168.123.164 dhcpcd[2771]: wlan0: sending IPv6 Router Solicitation dhcpcd[2771]: wlan0: leased 192.168.123.164 for 86400 seconds dhcpcd[2771]: forked to background, child pid 2806DHCP Fail
# dhcpcd wlan0 // dhcpc service 에러. dhcpcd[2670]: version 5.5.6 starting dhcpcd[2670]: wlan0: sending IPv6 Router Solicitation dhcpcd[2670]: wlan0: checking for 169.254.155.41 dhcpcd[2670]: wlan0: sending IPv6 Router Solicitation dhcpcd[2670]: wlan0: using IPv4LL address 169.254.155.41 dhcpcd[2670]: forked to background, child pid 2695둘다 실행은 했지만 위에는 성공을 하고, 아래는 받지 못해, 169.254.155.41 IP설정된다.
반드시 ack를 확인하고 해당 IP 확인하자
test 시 ps 확인하고 kill로 해당 프로세스를 없애자.
만약 지속적으로 dhcpcd 문제가 발생시 dhcpcd -n ( renew하고 다시 실행)
- WIFI Module 점검
( kernel 포함가능성 확인 , make menuconfig 확인 )
- ifconfig wlan0 명령으로 연결확인
(ifconfig wlan0 up 시도 및 다른 이름 찾기:wlan0 이 아닐 경우)
SIOCGIFFLAGS : Link 에러로 Module 이상이나, 연결이 안되었을 가능성 있음. 기본문제
wlan0: Cannot assign requested address : wpa_supplicant 문제
- wpa_supplicant 점검
wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wifi/wpa_supplicant.conf
wpa_supplicant -Dwext -iwlan0 -c/etc/wifi/wpa_supplicant.conf
wpa_supplicant -Dwext -iwlan0 -c/etc/wifi/wpa_supplicant.conf