前面几章讲了pcduino下的UBOOT,kernel,文件系统的编译制作。这两天尝试着把wifi的驱动也加载到内核去。Wifi是个比较常用的模块,也很典型,就在官方提供的内核上加载了次驱动。以此记录方便大家参考。
内核的编译在前两章里面讲过,这里不再多说,我们直接进入make menuconfi界面配置内核。
配置内核:进入内核目录
Sudo make ARCH=arm menuconfig
进入Networking support——>Wireless——>( Generic IEEE 802.11 Networking Stack (mac80211)这个IEEE 802.11协议栈一定要选择,这是内核对于无线局域网wifi的支持协议,不选是肯定连不上的。后面的网卡驱动选项也打不开。
进入 Device Drivers——>Network device support——>Network device support——>( Realtek 8192C USB WiFi for SW)注意一定是这个选项,而不是(Realtek RTL8192CU/RTL8188CU USB Wireless Network Adapter)当时我一看觉得肯定是这个选项,觉得应该是USB的wifi适配器,虽然V2版本的是焊接在板子上的,我觉得也是通过USB的接口,但是这个选项一选,内核启动很慢,而且根本找不到网卡。这一点还要问一问官方的解释。
当然还有其他的配置选项,因为官方给出的都是默认的,就不去管他,前面讲过我默认使
sun4i_defconfig这个内核配置文件。
好了只管编译内核即可,我编译出来的内核4.78MB左右,比前面的内核4.5MB多了些。但是可见还是很小巧的。
看看我的配置界面。
Wifi配置工具的编译安装:
配置wifi的工具有iwconfig,ifconfig,iwlist, wpa_supplicant,wpa_cli。这些都需要交叉编译和下载到板子里面去。其中ifconfig在制作rootfs的busybox选项里面有可以做好。其余的需要在网上下载源码编译得到工具。
一,安装wirelesstools 下载wireless_tools.29.tar.gz这个网上很好找,就不给源码了。然后解压编译安装。
1解压tar zxvf wireless_tools.29.tar.gz
2修改Makefile
指定安装路径我的是ifndef PREFIX
PREFIX = /pcduino_file/wstools/
Endif
指定交叉编译器路径CC= /pcduino_file/arm-2009q3/bin/arm-none-linux-gnueabi-gcc
指定AR路径AR = /pcduino_file/arm-2009q3/bin/arm-none-linux-gnueabi-ar
指定RANLIB路径RANLIB = /pcduino_file/arm-2009q3/bin/arm-none-linux-gnueabi-ranlib
以上是我本机的路径,要更具自己情况修改
3修改完毕编译make,安装make install,这是在pcduino上可用的工具在安装目录就有了,然后拷贝到pcduino的sbin目录,主要是iwcinfig,和iwlist。还需要把拷贝两个库libiw.so和libiw.so.29到文件系统/lib目录下,运行chmod 777命令后重新生成。我是把安装目录下面的include,lib,sbin三个目录一并考到了pcduino的根目录里面。其实打开就可以看见工具和库。这是候在板子上就可使用这些工具了。
唤醒无线网卡驱动
ifconfig wlan0 up
搜索周边无线网络
iwlist wlan0 scan | grep ESSID
这时候可以看到无线网卡启动了,搜索周边无线网络的时候,网卡的灯一闪一闪的。但是还是不能连接到无线网络,因为无线网络大多wap加密的,所以还需要下载配置工具。
因为现在的无线wifi网络大多是wpa加密。所以需要移植wpa_supplicant工具。
下载源码: http://hostap.epitest.fi/wpa_supplicant/
下载wpa_supplicant-0.7.3.tar.gz(openssl用到0.7.3提供的补丁)
#tar xvfz wpa_supplicant-0.7.3.tar.gz
下载www.openssl.org/source/openssl-0.9.8e.tar.gz
#tar zxvf openssl-0.9.8e.tar.gz
二、编译openssl库
将wpa_supplicant中的补丁拷贝到openssl中
# cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
#cd openssl-0.9.8e
#mkdir /usr/local/ssl //创建安装目录
#vim Makefile //修改编译脚本
CC= /pcduino_file/arm-2009q3/bin/arm-none-linux-gnueabi-gcc
AR=/pcduino_file/arm-2009q3/bin/arm-none-linux-gnueabi-ar $(ARFLAGS) r
RANLIB= /pcduino_file/arm-2009q3/bin/arm-none-linux-gnueabi-ranlib
INSTALLTOP=/usr/local/ssl
OPENSSLDIR=/usr/local/ssl
#make
#make install
以上是我的交叉编译器路径,请按照自己的情况设置
在/usr/local/ssl目录下安装了ssl库
#ls /usr/local/ssl
#bin certs include lib man misc openssl.cnf private
后面编译wpa_supplicant要依赖openssl中的lib和include
三、编译wpa_supplicant
进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:
#cp defconfig .config
#vim .config
CC = /pcduino_file/arm-2009q3/bin/arm-none-linux-gnueabi-gcc -L/usr/local/ssl/lib/
CFLAGS += -I/usr/local/ssl/include
LIBS += -L/usr/local/ssl/lib
#make
这时候可能会遇到编译不过去的情况,请更具编译提示,google一下,可能要下载两个库,apt-get一下即可。我当时是下载了个高级版本,编译不过,还是下载了0.7.3.这个版本的,才编译通过。
经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。把这两个工具拷贝到pcduino的/bin目录下,这时候就可以在板子上使用这两个工具了。
四,编写配置文件
在板子上新建/etc/wpa.conf配置文件
内容如下:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="无线网路名称"
psk="密码"
}
新建/var/run/wpa_supplican这个文件和路径
Mkdir /var/run/wpa_supplican
至此工具和配置文件准备完毕。
测试
一定要按照流程来,板子上电
iwconfig //查看网卡名字,我的是wlan0
ifconfig wlan0 up //打开网卡
iwlist wlan0 scan //扫描可用的无线网络
wpa_supplicant -B -i wlan0 -c /etc/wpa.conf //连接到wlan0网络
ifconfig wlan0 192.168.1.12 //设置网卡IP注意和要连接的网络在同一个网段 否则连接不上
ping 192.168.1.1 //ping我的路由器IP
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=115.051 ms
64 bytes from 192.168.1.1: seq=1 ttl=64 time=7.362 ms
64 bytes from 192.168.1.1: seq=2 ttl=64 time=5.230 ms
64 bytes from 192.168.1.1: seq=3 ttl=64 time=4.728 ms
64 bytes from 192.168.1.1: seq=4 ttl=64 time=3.888 ms
64 bytes from 192.168.1.1: seq=5 ttl=64 time=14.738 ms
64 bytes from 192.168.1.1: seq=6 ttl=64 time=6.655 ms
^C
--- 192.168.1.1 ping statistics ---
7 packets transmitted, 7 packets received, 0% packet loss
round-trip min/avg/max = 3.888/22.521/115.051 ms
可以看见无线网络连接成功,其实可以写成脚本文件开机自动执行。
# ps –a一下可以看见无线网卡进程
98 0 0:04 wpa_supplicant -B -i wlan0 -c /etc/wpa.conf
至此无线网卡连接成功。
2013-12-25 by 潇齐
尊重他人劳动成果,转载请声明出处,谢谢