学习目标:熟悉RT3070在S3C2440的移植和使用,以及其中的相关工具的安装和使用;

一、配置内核选择WIFI驱动

1. 将usb wifi插到电脑,在ubuntu使用命令:# lsusb 查看wifi的PID:0x148f, VID:0x3070

2. 搭建环境

(使用的是arm-linux-gcc 4.3.2,内核为:linux 3.4.2)

1) 内核源码打补丁

 在终端执行以下命令:
 # tar xjf linux-3.4.2.tar.bz2
 # cd linux-3.4.2
 # patch -p1 < ../linux-3.4.2_camera_jz2440.patch
 # cp config_ok .config

2) 配置内核
    进入内核目录,根据网卡的VID/PID确定使用哪一个源码,搜索usb-wifi的 0x3070:
    # cd /work/system/linux-3.4.2/drivers/net/wireless
    # grep "0x3070" * -nR

回复--> rt2x00/rt2800usb.c:1077: { USB_DEVICE(0x148f, 0x3070) },
进入到对应目录/drivers/net/wireless/rt2x00的Makefile:obj-$(CONFIG_RT2800USB)     += rt2800usb.o, 可知需要配置项:CONFIG_RT2800USB
查看对应的Kconfig文件: 
    config RT2800USB
tristate "Ralink rt27xx/rt28xx/rt30xx (USB) support"
depends on USB
select RT2800_LIB
select RT2X00_LIB_USB
select RT2X00_LIB_FIRMWARE
select RT2X00_LIB_CRYPTO
select CRC_CCITT
---help---
This adds support for rt27xx/rt28xx/rt30xx wireless chipset family.
Supported chips: RT2770, RT2870 & RT3070, RT3071 & RT3072
When compiled as a module, this driver will be called "rt2800usb.ko".

因此,可知CONFIG_RT2800USB在make menuconfig配置界面的字符提示为:"Ralink rt27xx/rt28xx/rt30xx (USB) support" ,执行make menuconfig,搜索 /RT2800USB

根据目录进行配置成模块,然后对依赖项搜索,配置:
  │ Symbol: RT2X00 [=m]                                                                                      
  │ Type  : tristate                                                                                                      
  │ Prompt: Ralink driver support                                                                              
  │   Defined at drivers/net/wireless/rt2x00/Kconfig:1                                             
  │   Depends on: NETDEVICES [=y] && WLAN [=y] && MAC80211 [=y]                                             
  │   Location:                                                                                                  
  │     -> Device Drivers                                                                                     
  │       -> Network device support (NETDEVICES [=y])                                                        
  │         -> Wireless LAN (WLAN [=y])

以此类推,对其依赖项进行配置。
还有一项:  Library routines  ---> 
          {*} CRC-CCITT functions

即:

3)编译内核:

  # make uImage
4) 编译模块:
    # make modules
5) 拷贝这生成的四个文.ko文件到nfs文件系统目录:
   # ls *.ko
   # cp *.ko /work/nfs_root/fs_mini_mdev_new/lib/

二、 kernel和驱动在开发板运行

1. 将uImage烧写到开发板中,插上wifi执行lsusb查看设备是否存在。
  uboot命令行(默认方式烧写):
  set bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.8:/work/nfs_root/fs_mini_mdev_new ip=192.168.1.17
  set bootcmd 'nfs 32000000 192.168.7.124:/work/nfs_root/uImage; bootm 32000000'
  save
  boot

2. mount命令挂在文件目录,并加载编译的驱动模块:
     insmod rt2x00lib.ko   ...4个
     注意:——> rt2870.bin固件需要拷贝到开发板 /lib/firmmware目录下

3.  启动网卡:ifconfig wlan0 up,并使用# ifconfig -a 命令查看网卡状态。

4. 为wlan0配置ip:
     # ifconfig wlan0 192.168.73.6
     注意:这里配置IP要根据后面的热点(或者使用DHCP工具自动配置)进行配置, eth0和wifi不在一个网段;

三、wifi模块的配置和使用

3.1 概念: 认证/加密
    无线加密的多种方法,包括:WEP WPA TKIP EAP,他们之间的区别:
        http://wenku.baidu.com/link?url=DlLntlD490hAeIIbE-CO4QfAzgUC-gOTA7FCwS_XanOJMFzkyhQrFIB38ULKCcQIVFyDqqSWNWyq5kVtYAoJKjjf9pmZLu17-hVQ922WeaG
     例如:手机上WIFI热点有4种常用的"认证/加密":1) OPEN;  2)WEP;3) WPA(TKIP);4)WPA2(AES)

无线网络的配置需要安装以下工具:iw, wpa_supplicant,dhcp

3.2 iw 工具
      旧工具iwconfig, iw是它的替代者, 可用于这2种"认证/加密": OPEN, WEP
  3.2.1 编译和安装
  a. 依赖库libnl安装
     -> tar xzf libnl-3.2.23.tar.gz
     -> cd libnl-3.2.23/
     -> ./configure --host=arm-linux --prefix=$PWD/tmp //配置编译目录为当前目录下的/tmp
      编译出现问题,方法:修改 lib/addr.c 添加宏(宏来自内核源码include/linux/socket.h)
     -> make
     -> make install

拷贝库文件和头文件到arm-linux-gcc的路径目录下,用于后面的编译iw工具:

把编译出来的头文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include(注意程序v里报错时,是需要直接拷贝netlink/)
     -> cd tmp/include/libnl3
     -> sudo cp netlink -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

把编译出来的库文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib  
    把编译出来的库文件应该放入NFS文件系统的lib目录:/work/nfs_root/fs_mini_mdev_new/lib

  b.安装iw
    -> tar xjf iw-3.11.tar.bz2
    -> cd iw-3.11/
    修改Makefile:
       CC = "arm-linux-gcc"
       NL3xFOUND := Y
       #LIBS += $(shell $(PKG_CONFIG) --libs $(NLLIBNAME))
       #CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME))
    在info.c的代码前面添加
       #define htole16(X)  (((((uint16_t)(X)) << 8) | ((uint16_t)(X) >> 8)) & 0xffff)

  将生成的iw工具拷贝到开发板;

  3.2.2 iw使用:
    iw list  // 列出WIFI网卡的性能
    ifconfig wlan0 up   //  ifconfig wlan0 down
    iw dev wlan0 scan   // 扫描WIFI AP
    iw wlan0 connect vivo  // 连接到WIFI AP:vivo (open)
    iw wlan0 connect vivo keys d:0:baiwenwang123 // 连接到WIFI AP:vivo (WEP) d: default, 0: 第0个密码  

iw dev wlan0 link查看连接状态
    ifconfig wlan0 192.168.1.55(配置前,可用电脑链接vivo热点,并在终端上查看ip网段)
    ping 192.168.1.1
    iw wlan0 disconnect

3.3. wpa_supplicant安装: 可用于上述4种"认证/加密"
  a. 编译依赖libopenssl
    -> tar xzf openssl-1.0.1d.tar.gz
    -> cd openssl-1.0.1d/
    -> ./config shared no-asm --prefix=$PWD/tmp
    修改Makefile:
       CC= arm-linux-gcc
       AR= arm-linux-ar $(ARFLAGS) r
       RANLIB= arm-linux-ranlib
       NM= arm-linux-nm
       MAKEDEPPROG= arm-linux-gcc

-> make

  -> make install     把编译出来的头文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

把编译出来的库文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把编译出来的库文件应该放入NFS文件系统的lib目录:/work/nfs_root/fs_mini_mdev_new/lib(需要拷贝到开发板的)

  b. 安装wpa_supplicant
    -> tar xzf wpa_supplicant-2.0.tar.gz
    -> cd wpa_supplicant-2.0/wpa_supplicant/
    -> cp defconfig .config
    修改.config加上一行:
        CONFIG_LIBNL32=y
    修改Makefile:
        CC=arm-linux-gcc
    -> make
    -> make DESTDIR=$PWD/tmp install   //安装到当前下目录的tmp目录下

  c.wpa_supplicant使用:
     将编译出的工具wpa_supplicant和wpa_cli拷贝到开发板的/bin/目录下,并修改执行权限
    -> mkdir -p /var/run/wpa_supplicant
    4种模式的使用:(需要修改并拷贝/work/netwoktool/wpa_supplicant-2.0/wpa_supplicant/examples下的.conf配置文件,并拷贝到开发板的/etc/目录下)
       ① OPEN
      ifconfig wlan0 up
      wpa_supplicant -B -c/etc/plaintext.conf -iwlan0
      wpa_cli -iwlan0 status  // 查看状态
      ifconfig wlan0 192.168.1.55(和iw的ip配置方法相同)
      ping 192.168.1.1

配置文件内容为:
       ctrl_interface=/var/run/wpa_supplicant
       network={
               ssid="hello"    //wifi ap的名字
               key_mgmt=NONE   
       }

② WEP/WEP
       wpa_supplicant -B -c/etc/wep.conf  -iwlan0
       wpa_cli -iwlan0 status  // 查看状态
       ifconfig wlan0 192.168.1.55
       ping 192.168.1.1

配置文件:
       ctrl_interface=/var/run/wpa_supplicant
       network={
                ssid="hello"
                key_mgmt=NONE
                wep_key0="12345678"   //密码
                wep_tx_keyidx=0
        }

③WPA(TKIP)
       wpa_supplicant -B -c/etc/wpa-psk-tkip.conf  -iwlan0
       wpa_cli -iwlan0 status  // 查看状态
       ifconfig wlan0 192.168.1.55
       ping 192.168.1.1

配置文件
       ctrl_interface=/var/run/wpa_supplicant  # 一个目录,用于wpa_supplicant和wpa_cli的socket通信
       network={
                 ssid="hello"
                 proto=WPA  # proto: list of accepted protocols, 可取WPA,RSN
                            # If not set, this defaults to: WPA RSN
                 key_mgmt=WPA-PSK # 认证方式
                            # If not set, this defaults to: WPA-PSK WPA-EAP
                 pairwise=TKIP    # If not set, this defaults to: CCMP TKIP
                 group=TKIP       # If not set, this defaults to: CCMP TKIP WEP104 WEP40
                 psk="12345678"
       }

WPA2(AES)
        wpa_supplicant -B -c/etc/wpa_wpa2.conf  -iwlan0
        wpa_cli -iwlan0 status  // 查看状态
        ifconfig wlan0 192.168.1.55
        ping 192.168.1.1

配置文件:
       ctrl_interface=/var/run/wpa_supplicant
       network={
                 ssid="hello"
                 psk="12345678"
       }

注意:   wpa_cli可工作于"命令模式"和"交互模式"

⑤ 配置文件里设置多个无线网络
       ctrl_interface=/var/run/wpa_supplicant
       network={
                 ssid="hello"
                 psk="12345678"
       }
       network={
                 ssid="word"
                 psk="12345678"
       }

   ⑥ 访问外网:
       修改/etc/resolv.conf添加DNS:(根据ap的网段配置)
       nameserver 192.168.1.1

设置网关:
       route add default gw 192.168.1.1

   3.4. dhcp : 使得WIFI网卡动态获取IP
   a. 编译、安装
     -> tar xzf dhcp-4.2.5-P1.tar.gz
     -> cd dhcp-4.2.5-P1
     -> ./configure --host=arm-linux ac_cv_file__dev_random=yes

-> cd bind   
     修改Makefile:
     -> ./configure BUILD_CC=gcc ac_cv_file__dev_random=yes --host=arm-linux --disable-kqueue

-> tar xzf bind.tar.gz
     -> cd bind-9.8.4-P2
     修改 lib/export/dns/Makefile.in
         gen: ${srcdir}/gen.c
              ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
         改为
         gen: ${srcdir}/gen.c
              ${BUILD_CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}

-> cd ../..
     -> make DESTDIR=$PWD/tmp install

把文件复制到挂载的文件目录下:
     sudo cp bin/* /work/nfs_root/fs_mini_mdev_new/bin/
     sudo cp sbin/* /work/nfs_root/fs_mini_mdev_new/sbin/
     sudo cp etc/dhclient.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhclient.conf
     sudo cp etc/dhcpd.conf.example /work/nfs_root/fs_mini_mdev_new/etc/dhcpd.conf

sudo cp client/scripts/linux /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
     chmod +x /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
     并修改
       #!/bin/bash
     改为
       #!/bin/sh  //arm平台需要用sh

  b. dhcp的使用:
    # insmod 加载4个.ko模块
    # mkdir -p /var/db
    # ifconfig wlan0 up
    # wpa_supplicant -B -c/etc/wpa2-eap-ccmp.conf -i wlan0

# cp mnt/fs_mini_mdev_new/dhcp etc/dhclient-script  /sbin/
    # chmod 777 /sbin/dhclient-script
    # dhclient -d wlan0
    # route                  查看网关
    # cat /etc/resolv.conf   查看DNS

   3.5 一接入WIFI网卡,就自动执行wpa_supplicant等
    热拔插配置文件:
      $ vi /etc/mdev.conf
         wlan0 0:0 777 * /sbin/auto_wifi.sh

$ vi /sbin/auto_wifi.sh
     #!/bin/sh
    if [ $ACTION = "add" ];
    then                                             
       wpa_supplicant -B -c/etc/wpa_wpa2.conf  -iwlan0
       wpa_cli -a/sbin/wpa_action.sh -B
    else                    
       killall wpa_supplicant
       killall wpa_cli
       killall dhclient
   fi

$ chmod +x /sbin/auto_wifi.sh

一连接上WIFI AP, 就自动执行dhclient
       创建一脚本wpa_action.sh:   
         $ vi /sbin/wpa_action.sh
     #!/bin/sh
     IFNAME=$1   //wlan0 
          CMD=$2
        if [ "$CMD" = "CONNECTED" ]; then
          echo connect $IFNAME, dhclient for it > /dev/console
          dhclient -d $IFNAME
      fi
      if [ "$CMD" = "DISCONNECTED" ]; then
              echo disconnect $IFNAME, kill dhclient for it > /dev/console
        killall dhclient
     fi

运行:
         $ chmod +x /sbin/wpa_action.sh
         $ wpa_cli -a/sbin/wpa_action.sh -B 后台

关闭和打开命令:
    $ wpa_cli -iwlan0 disconnect
    $ wpa_cli -iwlan0 reconnect
  ping外网:
    $ ping baidu.com

四. 使用WIFI网卡的AP功能

 4.1 下载源码

  地址:http://w1.fi/hostapd/
  4.2 编译、安装
      # tar xzf hostapd-2.0.tar.gz
      # cd hostapd-2.0/
      # cd hostapd/
      # cp defconfig .config
     修改.config, 加一行:
   CONFIG_LIBNL32=y
     修改Makefile:
   CC=arm-linux-gcc
      # make
     
# make DESTDIR=$PWD/tmp install

把tmp/下生成的hostapd  hostapd_cli复制到NFS的bin目录

4.3  hostapd使用
     a. hostapd的配置文件: WPA/WPA2
     # vi /etc/hostapd/myhostapd.conf
          ctrl_interface=/var/run/hostapd
          #change wlan0 to your wireless device
          interface=wlan0
          driver=nl80211
          ssid=helloworld    //ap名称
          channel=1

# 认证/加密方式
          macaddr_acl=0
          auth_algs=1
          ignore_broadcast_ssid=0
          wpa=3
          wpa_passphrase=123456   //密码
          wpa_key_mgmt=WPA-PSK
          wpa_pairwise=TKIP
          rsn_pairwise=CCMP

把配置文件存为/etc/hostapd/myhostapd.conf
          启动 hostapd:
       # hostapd -B /etc/hostapd/myhostapd.conf

b. 启动 dhcpd
        修改配置文件/etc/dhcpd.conf,添加:
      subnet 192.168.1.0 netmask 255.255.255.0 {                      
            range 192.168.1.10 192.168.1.100;                             
            option domain-name-servers 192.168.1.1;                       
            option routers 192.168.1.1;                                   
          }

创建空文件/var/db/dhcpd.leases:
         --> /var/db/dhcpd.leases

--> ifconfig wlan0 192.168.1.1
         --> dhcpd -cf /etc/dhcpd.conf wlan0

--> killall hostapd 关闭热点

   4.3.1 OPEN方式的配置文件

# vi /etc/hostapd/myhostapd.conf
         ctrl_interface=/var/run/hostapd
         #change wlan0 to your wireless device
         interface=wlan0
         driver=nl80211
         ssid=Hello word
         channel=1

# 认证/加密方式
         macaddr_acl=0
         auth_algs=1
         ignore_broadcast_ssid=0

4.3.2 WEP方式的配置文件

# vi /etc/hostapd/myhostapd.conf
          ctrl_interface=/var/run/hostapd
          #change wlan0 to your wireless device
          interface=wlan0
          driver=nl80211
          ssid==Hello word
          channel=1

# 认证/加密方式
          macaddr_acl=0
          auth_algs=2
          ignore_broadcast_ssid=0
          wep_key0="12345678"
          wep_default_key=0

    4.3.3 修改/etc/mdev.conf自动启动AP模式
        vi /etc/mdev.conf
            wlan0 0:0 777 * /sbin/auto_wifi_ap.sh

# vi /sbin/auto_wifi_ap.sh
          #!/bin/sh
          if [ $ACTION = "add" ];
             then
             hostapd -B /etc/hostapd/myhostapd.conf
             ifconfig wlan0 192.168.1.1
             dhcpd -cf /etc/dhcpd.conf wlan0
          else
             killall hostapd
             killall dhcpd
          fi

3.1 wifi网卡RT3070在S3C2440的移植和使用的更多相关文章

  1. 34、JZ2440上WIFI网卡使用

    :http://wireless.kernel.org在这个网站上的document中有下面说有内容的介绍 1. 准备工作(虚拟机,开发板)及配置内核选择WIFI驱动1.1 选型:确定网卡的VID,P ...

  2. 使用wifi网卡笔记5---AP模式

    使用WIFI网卡的AP功能 1.下载源码 hostapd: http://w1.fi/hostapd/ 2.编译.安装(hostapd依赖于libnl库,需要编译.安装此库) tar xzf host ...

  3. 在单板上使用WIFI网卡的固件问题

    (在单板上使用WIFI网卡的固件问题)(我的wifi网卡是RT3070) (一般买的网卡说是支持LINUX免驱的话,那么在/lib/firmware/ 下一定有相应的固件) 我将USB网卡接入UBUN ...

  4. 使用WIFI网卡的AP功能

    前几篇博客中,wifi无线网卡都工作于STA模式,那么它能否工作于AP模式.本篇博客就研究使wifi 无线网卡工作于AP模式.使用一个应用程序hostapd,关于它的介绍可以去此网站https://w ...

  5. S5PV210 移植无线wifi网卡 MT7601

    一.准备工作 1.MT7601驱动下载 点击下载 2.插入usb WiFi 启动开发板linux,lsusb查看usb驱动 Bus 001 Device 003: ID 148f:7601看到的是该驱 ...

  6. 不止是联网!教你玩转PC自带Wi-Fi网卡

    前言:Wi-Fi对于现在的智能手机来说已经是再熟悉不过的配置了,而主板自带Wi-Fi网卡的设计也越来越普及,但有些玩家可能思维还停留在“Wi-Fi网卡 = 连无线网络用的网卡,我用有线就不需要”的层次 ...

  7. 使用wifi网卡笔记4---工具dhcp及全自动使用wifi

    dhcp : 使得WIFI网卡动态获取IP ·1.源码获取 输入dh看有哪些应用程序,输入dhclient -v查看一下相关信息,源码获取的网址 2.开发环境配置 解压 tar xzf dhcp-4. ...

  8. 使用wifi网卡笔记2----概念及工具iw(STA模式)

    1.认证和加密的概念 (1)概念 (2)阶段划分 初级版本:认证不需要密码, 传输不需要加密 认证不需要密码, 传输需要加密(用WEP算法) 认证需要密码(用WEP算法), 传输需要加密(用WEP算法 ...

  9. 使用wifi网卡笔记1----网卡选型、开发环境搭建、内核配置

    1.wifi的STA模式和AP模式 Ap(Access Point)模式指的是可以将网卡设置为路由器用来共享流量或有线网络给别人使用, sta模式指的是当做网卡连接路由器上网 (1):AP也就是无线接 ...

随机推荐

  1. 微信小程序开发踩坑记

    前言 微信小程序自去年公测以来,我司也申请了一个帐号开发,春节前后开始开发,现在终于告一个段落了.谨以此文记录下踩过的坑. 坑1:scroll-view与onPullDownRefresh冲突 由于有 ...

  2. JS获取屏幕分辨率以及当前对象大小等

    <script type="text/javascript"> function getInfo(){ var s = ""; s += " ...

  3. 你所不知道的C和C++运行库 标签: vc 2017-05-26 10:33 41人阅读 评论(0) 收藏

    在使用vs2013调用vc2005编译出的dll时出现错误,遂将源程序用vs2013编译出dll,再用vs2013调用错误消失,不解.寻找原因时有人说"VC库版本不一样",故查找C ...

  4. 第三周 day3 python学习笔记

    1.字符串str类型,不支持修改. 2.关于集合的学习: (1)将列表转成集合set:集合(set)是无序的,集合中不会出现重复元素--互不相同 (2)集合的操作:交集,并集.差集.对称差集.父集.子 ...

  5. shell----删除文件中的^M

    在Linux下使用vi来查看一些在Windows下创建的文本文件,有时会发现在行尾有一些“^M”.有几种方法可以处理. 1.使用vi的替换功能.启动vi,进入命令模式,输入以下命令: :%s/^M$/ ...

  6. dynamic_cast动态转换

    我们都知道dynamic_cast会在运行时进行类型检查,比较安全,static_cast静态转换,不安全 dynamic_cast转换的类型必须是个类,且这个类中必须有虚函数,为什么呢? 虚函数对于 ...

  7. IntelliJ IDEA 2017 完美注册方法及破解方法

    本文使用破解方式注册. 下载破解文件JetbrainsCrack-2.6.2.jar 下载地址: http://idea.lanyus.com/ 开始破解 一.将下载的 JetbrainsCrack- ...

  8. sort给文件按照大小排序

    ls -l|sort -n -k5 -n 表示以数值排序-k5 表示以第几列排序还可以用 -t参数指定行内容的分隔符 参考链接:http://www.cnblogs.com/myd620/p/6002 ...

  9. idea中使用git进行clone、分支切换、pull、push等

    转:https://blog.csdn.net/xiaobai__lee/article/details/81081128 https://blog.csdn.net/geng31/article/d ...

  10. Kali-linux准备内核头文件

    内核头文件是Linux内核的源代码.有时候,用户需要编译内核头文件代码,为以后使用内核头文件做准备,本节将介绍编译内核头文件的详细步骤. 准备内核头文件的具体操作步骤如下所示. (1)更新软件包列表. ...