WiFi在linux下的移植

  • 格式:doc
  • 大小:228.00 KB
  • 文档页数:9

在linux下的移植 1、内核驱动支持 因为平台上SDIO功能已经支持,所以只需要内核驱动支持marvell-8686即可。 [*] Networking support ---> [*] Wireless ---> <*> Improved wireless configuration API {*} common routines for IEEE 802.11 drivers Device Drivers ---> [*] Network device support ---> Wireless LAN ---> <*>Marvell 8xxx Libertas WLAN driver support <*>Marvell Libertas 8385 and 8686 SDIO 802.11b/g cards Generic Driver Options ---> (sd8686.bin sd8686_helper.bin) External firmware blobs to build into the kernel binary 把sd8686.bin 和 sd8686_helper.bin这两个固件放在/firmware这个目录下。

2、wpa_suppicant的移植 源码版本选择: wpa_supplicant-0.7.2 openssl-0.9.8e

openssl移植: a、补丁安装 openssl源码编译需要打wpa_supplicant提供的补丁,我们选择的openssl版本为openssl-0.9.8e所以我们需要wpa_supplicant-0.7.2/patches/openssl-0.9.8e-tls-extensions.patch拷贝到openssl源码下。 patch -p1 < openssl-0.9.8e-tls-extensions.patch b、配置编译安装 ./Configure linux-elf-arm -DL_ENDIAN linux:'arm-none-linux-gnueabi-gcc' shared --prefix=/home/linux/workdir/wifi/openssl make make install

wpa_supplicant移植: 在/wpa_supplicant-0.7.2/wpa_supplicant目录下

a、 按如下方式修改 cp deconfig .config vi .config 在里面添加如下 CC= arm-linux-gcc -L /home/linux/workdir/wifi/openssl/lib/ CFLAGS += -I/home/linux/workdir/wifi/openssl/include LIBS += -L/home/linux/workdir/wifi/openssl/lib/

b、编译 make 编译后将生产的wpa_supplicant和wpa_cli拷贝到跟文件系统的bin目录下

3、固件准备 将固件sd8686.bin和sd8686_helper.bin拷贝到linux-2.6.35/firmware下。编译时会自动编译进内核。 4、测试 a、 在根文件中添加/etc/resolv.conf,域名解析。 内容为:

# Generated by NetworkManager nameserver 8.8.8.8 b、 在根文件系统/etc下添加wpa_supplicant配置文件wpa_supplicant.conf内容为: # WPA-PSK/TKIP

ctrl_interface=/var/run/wpa_supplicant network={ ssid="XXXX" #无线路由ssid key_mgmt=WPA-PSK proto=WPA pairwise=TKIP group=TKIP psk="XXXXXXXX" #无线路由密码 } c、 创建目录/var/run/wpa_supplicant mkdir /var/run/wpa_supplicant -p d、 启动开发板完成如下操作  配置无线网卡ip ifconfig wlan0 192.168.0.200  配置默认网关 route add default gw 192.168.0.1  启动wpa_supplicant连接无线网络 wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf  查看连接状态 wpa_cli status

ping www.youku.com.cn 三、在Android下的移植 在Android中,WiFi驱动程序一般编译成内核模块的方式,通过应用程序设置开关进行加载和卸载。同时,要使WiFi芯片正常工作,驱动里面通常还需要实现烧写固件按程序到WiFi芯片。

1、内核驱动支持 因为S5PC100平台上SDIO功能已经支持,所以只需要内核驱动模块支持marvell-8686即可。 [*] Networking support ---> [*] Wireless ---> <*> Improved wireless configuration API {*} common routines for IEEE 802.11 drivers Device Drivers ---> [*] Network device support ---> Wireless LAN ---> <*>Marvell 8xxx Libertas WLAN driver support (这里我们把驱动支持编译进内核) Marvell Libertas 8385 and 8686 SDIO 802.11b/g cards(8686的驱动编译成模块供wifi.c进行insmod) Generic Driver Options ---> (sd8686.bin sd8686_helper.bin) External firmware blobs to build into the kernel binary

把sd8686.bin 和 sd8686_helper.bin这两个固件放在firmware这个目录下。 把编译好的驱动模块文件libertas_sdio复制到Android文件系统下的/system/lib/modules/目录下。

2、Android的支持 大概思路可以参考http://blog.csdn.net/hongjiujing/article/details/5565431,细节会有不同。 1、启动文件(vendor/farsight/fs100/conf/init.rc)的修改: A:针对WiFi的修改,主要是创建需要的文件夹,修改文件或文件权限;并增加wpa_supplicant服务。 # For wifi mkdir /data/misc/wifi 0777 wifi wifi mkdir /data/misc/wifi/sockets 0777 wifi wifi mkdir /data/misc/wifi/wpa_supplicant 0777 wifi wifi chmod 0777 /data/misc/wifi/wpa_supplicant.conf #wifi的原始配置文件

setprop wifi.interface wlan0 #intreface名称设置,这在framework/base/wifi/java/android/net/wifi /WifiStateTracker.java中会用到,以处理dhcp。 在init.rc中搜索wifi关键字,将上面语句增加到相应位置。位置不对的话,会报如下错误:init: /init.rc: 108: invalid option 'mkdir'

service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant \ -Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf disabled oneshot service启动部分放在init.rc的后面。

B:针对DHCP的修改,主要是创建需要的文件夹,修改文件权限;并增加DHCP服务。 # For DHCP mkdir /data/misc/dhcp 0777 dhcp dhcp chown dhcp dhcp /data/misc/dhcp

service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -BK -f /system/etc/dhcpcd/dhcpcd.conf wlan0 disabled oneshot service启动部分放在init.rc的后面。

2、配置文件的准备 这里主要是准备两个配置文件wpa_supplicant.conf和dhcpcd.conf。

A:wpa_supplicant.conf的准备 修改vendor/farsight/fs100/BoardConfig.mk,定义使用 wireless extension 作为wpa_supplicant 的driver。 # For Wifi BOARD_WPA_SUPPLICANT_DRIVER := WEXT 编译后,wpa_supplicant.conf文件会被复制到/out/target/product/fs100/system/etc/wifi/目录下,而且在/out/target/product/fs100/system/bin/目录下也会有wpa_supplicant这个程序。利用源码根目录下的“make_fs100_yaffs2_image.sh”生成的yaffs2文件系统“fs100_root” (也在源码根目录下)在相应的文件夹下也会生成这两个配置文件。

B:dhcpcd.conf的准备 修改源码目录下external/dhcpcd下的android.mk文件,取消以下语句的注释, 26 include $(CLEAR_VARS) 27 LOCAL_MODULE := dhcpcd.conf 28 LOCAL_MODULE_TAGS := user 29 LOCAL_MODULE_CLASS := ETC 30 LOCAL_MODULE_PATH := $(etc_dir) 31 LOCAL_SRC_FILES := android.conf 32 include $(BUILD_PREBUILT) 编译后,dhcpcd.conf文件会被复制到