自制pcduino内核之wifi驱动加载

前面几章讲了pcduino下的UBOOTkernel,文件系统的编译制作。这两天尝试着把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)当时我一看觉得肯定是这个选项,觉得应该是USBwifi适配器,虽然V2版本的是焊接在板子上的,我觉得也是通过USB的接口,但是这个选项一选,内核启动很慢,而且根本找不到网卡。这一点还要问一问官方的解释。

当然还有其他的配置选项,因为官方给出的都是默认的,就不去管他,前面讲过我默认使

sun4i_defconfig这个内核配置文件。

好了只管编译内核即可,我编译出来的内核4.78MB左右,比前面的内核4.5MB多了些。但是可见还是很小巧的。

看看我的配置界面。

Wifi配置工具的编译安装:

配置wifi的工具有iwconfig,ifconfig,iwlist, wpa_supplicant,wpa_cli。这些都需要交叉编译和下载到板子里面去。其中ifconfig在制作rootfsbusybox选项里面有可以做好。其余的需要在网上下载源码编译得到工具。

一,安装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上可用的工具在安装目录就有了,然后拷贝到pcduinosbin目录,主要是iwcinfig,iwlist。还需要把拷贝两个库libiw.solibiw.so.29到文件系统/lib目录下,运行chmod 777命令后重新生成。我是把安装目录下面的includelibsbin三个目录一并考到了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.gzopenssl用到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中的libinclude

 

三、编译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_supplicantwpa_cliwpa_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 潇齐

尊重他人劳动成果,转载请声明出处,谢谢

你可能感兴趣的:(局域网,路由器,linux内核,交叉编译)