8/23/2014

IPTIMEn150ua on ODROID (기본동작확인)

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 정보 및 관련 사이트 
  1. 모델명:  RT3070  
  2. Device Driver : 2011_0107_RT3070.tar

  • IPTIME 사용되는 CHIP이름알기 
IPTIME에 아래와 같이 직접 물어보았더니, 친절하게 답변을 해주셨다.
감사할 뿐이다. 그래서 위와 같이 Linux Driver를 구하고 이 일을 시작하게됨      

오랜만에 다시 링크하니, 내가 질문한 것이 없어져서, 다른 것으로 대체, 
  http://www.iptime.co.kr/~iptime/bbs/view.php?id=qna&no=292133


  • 기능설명, WPS란?
  http://iptime.co.kr/bbs/view.php?id=faq_setup&no=266

  • Download Linux Driver
  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를 하면 원하는 모듈을 얻을 수 있을 것이다.
  • rt3070sta.ko

3.1 Makefile 수정

아래의 변수 PLATFORMTARGET PLATFORM은 기존의 것을 가지고 수정하여 만들면된다.
어차피 Linux Kernel source path 문제로 인하여 아래와 같이 수정해야한다.
PLATFORM을 새로 만들어서 하면, 이상하게도 내 환경변수들이 제대로 설정이 안되어서,
기존 에 존재하던 것을 수정하여 Build를 시도.
  • PLATFORM : 5VT로 선정하여 수정
  • LINUX_SRCCROSS_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)

      관련사항
        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