基于2.6.35内核的SDIO-WiFi驱动移植
一、 移植环境:
【移植环境】
1、 主机:Ubuntu 10.10发行版
2、 目标机:FS_S5PC100平台
3、 交叉编译工具:arm-none-linux-gnueabi-4.5.1
4、wifi模块:marvell-8686
5、Linux文件系统:rootfs. cramfs.
6、内核:linux-2.6.35-farsigt
二、 在linux下的移植
1. 平台代码修改
drivers/mmc/host/sdhci.c
屏蔽以下代码
629行 printK (KERN_WARING "%s: too large timeout requested!\n", mmc_hostname(host_>mmc));
2. 内核驱动支持
因为S5PC100平台上SDIO功能已经支持,所以只需要内核驱动支持marvell-8686即可。
[*] Networking support --->
[*] Wireless --->
<*> cfg80211 - 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/8686/8688 SDIO 802.11b/g cards
Generic Driver Options --->
(sd8686.bin sd8686_helper.bin) External firmware blobs to build into the kernel (firmware) Firmware blobs root directory
3. 内核的修改
文件arch/arm/mach-s5pc100/mach-smdkc100.c有内核的分区, 把第2个分区改成8M.
因为生成的文件系统太大,大于4M.
4. 固件准备
将固件sd8686.bin和sd8686_helper.bin拷贝到linux-2.6.35/firmware下。编译时会自动编译进内核。
$ make zImage
$ sudo cp zImage /tftpboot/zImage_wifi
三、 文件系统的制作
1. 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、makefile修改
添加
CC=arm-unknown-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/
b、编译
cp deconfig .config
make
编译后将生产的wpa_supplicant和wpa_cli拷贝到根文件系统的bin目录下