基于Linux-2.6.35内核的wifi驱动移植

来源:互联网 发布:网络报警中心 编辑:程序博客网 时间:2024/06/01 09:49

一、移植环境

1、 主机:Ubuntu11.10发行版

2、 目标机:FS_S5PC100平台

3、 交叉编译工具:arm-none-linux-gnueabi-4.5.1

4wifi模块:marvell-8686(马维尔)

5、内核:linux-2.6.35

二、linux下内核环境的配置与修改

1.平台代码的修改

    cd linux-2.6.35/drivers/mmc/host/

    vim sdhci.c

    屏蔽第629行的以下代码:

    printK (KERN_WARING "%s: too largetimeout requested!\n", mmc_hostname(host_>mmc));

2.内核环境的配置

    在S5PC100平台上需要内核驱动支持marvell-8686

    cd  linux-2.6.35

    make menuconfig

    

[*] Networking support  --->

       [*]   Wireless --->

              <*>cfg80211 - wireless configuration API    //cfg80211是新的Linux无线配置API,扩展无线设备需要配置

              {*}common routines for IEEE 802.11 drivers//wifi需要无线 IEEE 802.11 标准的驱动程序例程

Device Drivers  --->局域网

       [*]Network device support  --->

              WirelessLAN  --->

                     <*>Marvell8xxx Libertas WLAN driver support   //增加 wifi模块marvell-8686驱动的支持

                     <*>Marvell Libertas 8385/8686/8688 SDIO 802.11b/g cards

       GenericDriver Options  --->

              (sd8686.binsd8686_helper.bin) External firmware blobs to build into the kernel //将外设固件模块构建到内核中

              (firmware)Firmware blobs root directory


3. 内核的修改

     linux-2.6.35/arch/arm/mach-s5pc100/mach-smdkc100.c有内核的分区,把第2个分区即【2】改成8M,之所以改此处是因为生成的文件系统太大,大于4M。

     如图1:           

     

4.  固件准备

     将固件sd8686.bin和sd8686_helper.bin拷贝到linux-2.6.35/firmware下。编译时会自动编译进内核。

     $ make zImage

     $ sudo  cp  zImage  /tftpboot/

5.交叉工具链的安装

   $ cd ~

   $ tar xvf arm-none-linux-gnueabi.tar.bz2

   $ cd arm-2010.09

   如图2:

   

   添加交叉工具链的环境变量

   修改文件/etc/bash.bashrc添加如下内容:

   

   重启配置文件  

   

   工具链测试

   

   显示

  

三、openssl的移植(为网络通信提供安全及数据完整性的一种安全协议

1.源码的选择

   openssl-0.9.8e

2.补丁的安装

   openssl源码编译需要打wpa_supplicant提供的补丁,我们选择的openssl版本为openssl-0.9.8e所以我们需要wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch拷贝到openssl-0.9.8e文件夹源码下,将openssl-0.9.8e文件夹拷贝到linux@ubuntu:~/workdir/目录下

   在/home/linux/

   $ mkdir  workdir

   $ cd  workdir

   $ mkdir  wifi

   $ cd wifi

   linux@ubuntu:~/workdir/wifi$

   linux@ubuntu: ~$ cd  ~/workdir/openssl-0.9.8e

   patch -p1 < openssl-0.9.8e-tls-extensions.patch      //红色为数字1

3. 配置编译

    进入opssl-0.9.8e目录,如图:

   

   $ ./Configure linux-elf-arm  -DL_ENDIAN  linux:'arm-none-linux-gnueabi-gcc' shared  --prefix=/home/linux/workdir/wifi/openssl             //-DL_ENDIAN为定义小端

   $ make
   $ make install

   没有错误的话,我们的openssl就移植成功了。

四、wpa_supplicant 的移植

1. 将wpa_supplicant-0.7.2.tar.gz       解压到$ ~/workdir/wifi目录下

    $ cd ~/workdir/wifi/wpa_supplicant-0.7.2/wpa_supplicant

2.修改Makefile

    $  vim Makefile

    添加下面代码:

    CC=arm-none-linux-gnueabi-gcc//自己的交叉编译工具

    在CFLAGS+= -I../src
        CFLAGS+= -I../src/utils
    下添加:
        CFLAGS+= -I/home/linux/workdir/wifi/openssl/include

     将 LIBS+= -lssl
     修改为 LIBS += -lssl-L/home/linux/workdir/wifi/openssl/lib/

     将 LIBS_p+= -lcrypto
     修改为LIBS_p += -lcrypto -L/home/linux/workdir/wifi/openssl/lib/

     保存退出。

3.编译

    $ cp defconfig .config
    $ make

    编译后将产生的wpa_supplicant和wpa_cli拷贝到根文件系统的bin目录下(/source/rootfs/bin)


注:关于 wpa_supplicant

wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。

五、测试

1.修改配置文件

 (1).在根文件中添加/etc/resolv.conf(/source/rootfs/etc/resolv.conf)

   内容为:

   #Generated by NetworkManager

   nameserver192.168.0.1

(2).在根文件系统/etc(/source/rootfs/etc)下添加wpa_supplicant配置文件wpa-psk-tkip.conf

      # WPA-PSK/TKIP

      ctrl_interface=/var/run/wpa_supplicant

      network={

                ssid="XXXX"                    #无线路由用户名  

                key_mgmt=WPA-PSK

                proto=WPA2

                pairwise=CCMP

                group= CCMP

                psk="XXXXXXXX"       #无线路由密码  

        }

(3).创建目录/var/run/wpa_supplicant

      $ mkdir /var/run/wpa_supplicant  -p

(4).启动开发板,进行测试。

      配置无线网卡ip

     # ifconfig wlan0 192.168.0.200

     配置默认网关

    # route add default gw 192.168.0.1

    启动wpa_supplicant连接无线网络

    # wpa_supplicant -B -iwlan0 -c/etc/wpa-psk-tkip.conf

    wifi连接成功后led会亮起。

(5).查看连接状态

      # wpa_cli status

(6).外网测试

     # ping www.baidu.com

    有返回包证明移植成功。







   

原创粉丝点击