1. IPTIME n150ua Porting
1.1 개요
ODROID X2 보드 위에 다른 USB LAN을 사용하기 위해서 남은 USB LAN을 집에서 찾기 시작했지만,
내집에서는 찾지를 못하고 때마침 대전 집에서 우연히 발견된 IPTIME n150ua을 가지고 이를 시작하게됨.
- 모델명: IPTIME n150ua
- USB device로 동작이되는 WLAN Card
우선 IPTIME n150ua 사의 이 칩명이 알아야 할 것 같아 아래와 같이 IPTIME 사이트에서 질문을 했더니 정확한 칩명과 관련 Driver를 제공을 해주셨다.
집에서 심심해서 우연히 시작한일인데, 정보를 제공해주신 IPTIME에 감사할 뿐이다,
1.2 IPTIME n150ua 정보 및 관련 사이트
- 모델명: RT3070
- Device Driver : 2011_0107_RT3070.tar
IPTIME에 아래와 같이 직접 물어보았더니, 친절하게 답변을 해주셨다.
감사할 뿐이다. 그래서 위와 같이 Linux Driver를 구하고 이 일을 시작하게됨
오랜만에 다시 링크하니, 내가 질문한 것이 없어져서, 다른 것으로 대체,
http://www.iptime.co.kr/~iptime/bbs/view.php?id=qna&no=292133
http://iptime.co.kr/bbs/view.php?id=faq_setup&no=266
http://www.mediatek.com/en/downloads/
2. WLAN Linux Driver 구성
2.1 기본숙지문서
- README_STA_usb
- iwpriv_usage.txt
Driver Build 방법 및 Test 하는 방법은 인터넷 및 책에 설명이 너무 잘 나와있다
Linux Driver의 상위 두 문서를 제대로 읽는다면, 기본 Build 및 Test 진행에 어려움이 없다.
1. Build 사항 및 How to install
2. RT2870STA.dat 설정 파일 설명
2.2 Makefile 기본구성
Makefile // Main 구성 (PLATFORM 설정 및 기본 TEST)
./os/linux/config.mk // 각 설정
./os/linux/Makefile.4 or 6 // kernel version 에 따라 설정되며, 실제 빌드
3. WLAN Linux Driver 환경설정 및 빌드
수정은 아래와 같이 순서대로 하고 빌드는 make를 하면 원하는 모듈을 얻을 수 있을 것이다.
3.1 Makefile 수정
아래의 변수
PLATFORM과
TARGET PLATFORM은 기존의 것을 가지고 수정하여 만들면된다.
어차피 Linux Kernel source path 문제로 인하여 아래와 같이 수정해야한다.
PLATFORM을 새로 만들어서 하면, 이상하게도 내 환경변수들이 제대로 설정이 안되어서,
기존 에 존재하던 것을 수정하여 Build를 시도.
- PLATFORM : 5VT로 선정하여 수정
- LINUX_SRC 및 CROSS_COMPILE 환경설정
ifeq ($(PLATFORM),5VT)
LINUX_SRC = /home/jhlee/mywork/kernel/linux
CROSS_COMPILE = arm-none-eabi-
endif
LINUX: // TARGET LINUX에서 변수 TEST
echo ">>> PLATFORM $(PLATFORM)" // 각종 변수 TEST
echo ">>> TEST_INC $(TEST_INC)"
echo ">>> LINUX_SRC $(LINUX_SRC)"
....
echo " TEST my plaform LINUX_SRC=$(LINUX_SRC) CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH) " // 변수 TEST , 처음에 제대로 안들어옴
$(MAKE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
3.2 vi os/linux/config.mk 수정
WPA_SUPPLICANT 기능 지원을 위해 아래와 같은 기능을 추가.
(주의: HAS_WPA_SUPPLICANT=y 바로 옆에 주석을 달았더니, 환경변수가 미설정됨)
# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y
# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
ifeq ($(PLATFORM),5VT)
EXTRA_CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -DMODULE $(WFLAGS)
endif
3.3 vi os/linux/usb_main_dev.c 수정
#include "rt_config.h"
......
MODULE_AUTHOR("Paul Lin ");
MODULE_DESCRIPTION("RT2870 Wireless Lan Linux Driver");
MODULE_LICENSE("GPL");
참조사항
http://www.linuxforums.org/forum/wireless-internet/161550-rt3070sta-module-license-unspecified-taints-kernel-solved.html
참고사항 A.
CFLAG를 사용할 경우 에러, CFLAGS -> EXTRA_CFLAGS 변경해줌
scripts/Makefile.build:49: *** CFLAGS was changed in "/home/jhlee/mywork/2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO/os/linux/Makefile". Fix it to use EXTRA_CFLAGS. Stop.
참고사항 B.
WLAGS 값이 제대로 동작이 안되어 이를 Debugging.
- vi os/linux/Makefile.6 (맨 아래에 추가, 각 변수확인 후 지움)
%.o:
echo "WLAGS=$(WLAGS)"
echo "EXTRA_CFLAGS=$(EXTRA_CFLAGS)"
참고사항 C.
아래와 같이 insmod시 에러시 MODULE_LICESE("GPL") 추가
# insmod /lib/modules/rt3070sta.ko
[ 2152.229076] rt3070sta: Unknown symbol usb_alloc_urb (err 0)
[ 2152.229239] rt3070sta: Unknown symbol usb_free_urb (err 0)
[ 2152.234685] rt3070sta: Unknown symbol usb_alloc_coherent (err 0)
[ 2152.240690] rt3070sta: Unknown symbol usb_register_driver (err 0)
[ 2152.246849] rt3070sta: Unknown symbol usb_put_dev (err 0)
[ 2152.252033] rt3070sta: Unknown symbol usb_get_dev (err 0)
[ 2152.257417] rt3070sta: Unknown symbol usb_submit_urb (err 0)
[ 2152.263094] rt3070sta: Unknown symbol usb_free_coherent (err 0)
[ 2152.269011] rt3070sta: Unknown symbol usb_control_msg (err 0)
[ 2152.274745] rt3070sta: Unknown symbol usb_deregister (err 0)
[ 2152.280535] rt3070sta: Unknown symbol usb_kill_urb (err 0)
3.4 Android 관련수정
Android 수정관련사항
http://ac100.wikispaces.com/Android+rt3070+or+rt2x00
4. 기본 TEST on the ODROID
RT3070이 기본이 STA로 설정이 되어있게 되어있어서, 기본 네트워크 동작을 확인을 했으며, AP는 설명했지만 Test를 하지 못했다.
RT2870STA.dat 파일을 Loading 하는 시점은 ifconfig ra0 up 이다.그리고, 이와 관련된 설정은 iwpriv로 변경이 가능하다.
WPS설정 iwpriv에서 command 형식으로 지원을 하는데, 이부분도 Test 못함.
급히 다른 회사일 때문에 모든것을 마무리 했으며, 추후에 더 시간이 있다면 그때 하도록하자.
4.1 copy rt3070sta.ko to odroid
on serial or adb shell
# su
# mount -o rw,remount -t ext4 /dev/block/mmcblk0p2 /system
# mount -o rw,remount -t ext4 /dev/root /
Send the driver & data to the device on Window
Y:\WORKS\LINUX\SHARED> adb push rt3070sta.ko /system/lib/modules
Y:\WORKS\LINUX\SHARED> adb push RT2870STA.dat /etc/Wireless/RT2870STA
4.2 USB 연결확인 및 기본설정확인.
on serial or adb shell
root@odroidx2:/etc/Wireless/RT3070STA # lsusb // 연결확인
Bus 001 Device 001: ID 1d6b:0002
Bus 002 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 0424:3503
Bus 001 Device 003: ID 0424:9514
Bus 001 Device 004: ID 0424:ec00
Bus 001 Device 006: ID 148f:3070
# vi RT2870STA.dat
AuthMode OPEN ->WPA2
# cat /data/misc/wifi/wpa_supplicant.conf
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
}
4.3 connect to AP with wpa_suppicant
on serial or adb shell
# su
# insmod /lib/modules/rt3070sta.ko
# ifconfig ra0 up
# wpa_supplicant -Dwext -ira0 -c/data/misc/wifi/wpa_supplicant.conf -dd &
# wpa_cli -p/data/misc/wifi/sockets -ira0
.....
Interactive mode
> scan
OK
> scan_result
bssid / frequency / signal level / flags / ssid
00:40:5a:9c:6a:f8 2422 -51 [WPA-PSK-TKIP][ESS]
00:40:5a:9c:6a:fa 2422 -55 [WPA2-EAP-CCMP][ESS] U+zone
00:40:5a:9c:6a:f9 2422 -55 [WPA2-PSK-CCMP][ESS] U+Net6AFB
00:26:66:a0:35:ba 2432 -73 [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS] iptime89
6c:fd:b9:30:ba:82 2457 -69 [WEP][ESS] SAMSUNG
00:24:a5:34:2f:b3 2462 -81 [WPS][ESS] 0024A5342FB3
> list_network // wpa_supplicant.conf 의 list
network id / ssid / bssid / flags
0 CWPW any
1 U+Net6AFB any [CURRENT]
> select_network 1 // list 중 선택
OK
> add_network // 아래와 같이 WPA-PSK로 추가 가능
2
> set_network 2 ssid "U+NetE3CD"
OK
> set_network 2 key_mgmt WPA-PSK
OK
> set_network 2 psk "1122333353" //
OK
> select_network 1 // 추가했으나, 기존것으로 연결
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=00:26:66:41:26:12
관련사항
http://sirlagz.net/2012/08/27/how-to-use-wpa_cli-to-connect-to-a-wireless-network/
http://lists.shmoo.com/pipermail/hostap/2009-December/020817.html
4.4 connect to AP without wpa_suppicant
# ifconfig ra0 up
# iwconfig ra0 essid "U+NetE3CD" // iwpriv ra0 set SSID="U+NetE3CD" 동일
# iwpriv ra0 set AuthMode=WPA2PSK .
# iwpriv ra0 set EncrypType=AES
# iwpriv ra0 set WPAPSK="1000003353"
# iwconfig ra0 // 확인
ra0 Ralink STA ESSID:"U+NetE3CD" Nickname:"RT2870STA"
Mode:Managed Frequency=2.412 GHz Access Point: 00:27:1C:CC:E3:CB
Bit Rate=135 Mb/s
RTS thr:off Fragment thr:off
Encryption key:533A-C4F7-1FC2-8647-DE03-0301-329D-606C [2] Security mode:open
Link Quality=100/100 Signal level:-29 dBm Noise level:-32 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:
# dhcpcd -n ra0
dhcpcd[3816]: sending signal 14 to pid 3736
dhcpcd[3816]: version 5.5.6 starting
dhcpcd[3816]: ra0: sending IPv6 Router Solicitation
dhcpcd[3816]: ra0: rebinding lease of 192.168.219.109
dhcpcd[3816]: ra0: acknowledged 192.168.219.109 from 192.168.219.1
dhcpcd[3816]: ra0: checking for 192.168.219.109
dhcpcd[3816]: ra0: sending IPv6 Router Solicitation
dhcpcd[3816]: ra0: leased 192.168.219.109 for 86400 seconds
dhcpcd[3816]: forked to background, child pid 3850
# ping 192.168.219.1
64 bytes from 192.168.219.1: icmp_seq=1 ttl=64 time=8.91 ms
64 bytes from 192.168.219.1: icmp_seq=2 ttl=64 time=1.93 ms
64 bytes from 192.168.219.1: icmp_seq=3 ttl=64 time=1.92 ms
4.5 관련 기타사항 기록
dhcpd Manual
http://www.daemon-systems.org/man/dhcpcd.8.html
# iwpriv ra0 set EthConvertMode=clone
# iwpriv ra0 set EthCloneMac="00:00:00:00:00:00"
AuthMode=OPEN -> WPA2
Odroid 관련이슈
https://code.google.com/p/0xdroid/issues/detail?id=160
# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ip6tnl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
eth0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ra0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# cat /proc/net/wireless
Inter-| sta-| Quality | Discarded packets | Missed | WE
face | tus | link level noise | nwid crypt frag retry misc | beacon | 22
ra0: 0000 10. -256 -256 0 0 0 0 0 0
root@odroidx2:/ # netcfg
lo UP 127.0.0.1/8 0x00000049 00:00:00:00:00:00
sit0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00
ip6tnl0 DOWN 0.0.0.0/0 0x00000080 00:00:00:00:00:00
eth0 UP 0.0.0.0/0 0x00001003 1a:35:8f:c5:6e:b0
ra0 UP 0.0.0.0/0 0x00001043 00:26:66:41:26:12
255|root@odroidx2:/ # ifconfig ra0 up
[ 5851.355400] (Efuse for 3062/3562/3572) Size=0x2d [2d0-2fc]
[ 5851.867774] -->RTUSBVenderReset
[ 5851.868026] <--rtusbvenderreset p="">[ 5852.410959] RtmpOSFileOpen(): Error 2 opening /etc/Wireless/RT2870STA/RT2870STA.dat
[ 5852.412997] Open file "/etc/Wireless/RT2870STA/RT2870STA.dat" failed!
[ 5852.419480] 1. Phy Mode = 0
[ 5852.422330] ERROR!!! RTMPReadParametersHook failed, Status[=0x00000001]
[ 5852.486133] !!! rt28xx Initialized fail !!!
error: SIOCSIFFLAGS (Operation not permitted)--rtusbvenderreset>
관련사항
http://forum.samygo.tv/viewtopic.php?f=4&t=3979
http://www.korenixembedded.com/images/support/faq/JetBox_UM_Sparklan%20WPER-150GN%20wifi_v0.0.1.pdf
https://forums.gentoo.org/viewtopic-p-7290276.html
http://rhdxmr.tistory.com/48