一、配置内核选择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文件:
1 config RT2800USB 2 tristate "Ralink rt27xx/rt28xx/rt30xx (USB) support" 3 depends on USB 4 select RT2800_LIB 5 select RT2X00_LIB_USB 6 select RT2X00_LIB_FIRMWARE 7 select RT2X00_LIB_CRYPTO 8 select CRC_CCITT 9 ---help--- 10 This adds support for rt27xx/rt28xx/rt30xx wireless chipset family. 11 Supported chips: RT2770, RT2870 & RT3070, RT3071 & RT3072 12 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目录下