1、 主机:Ubuntu11.10发行版
2、 目标机:FS_S5PC100平台
3、 交叉编译工具:arm-none-linux-gnueabi-4.5.1
4、wifi模块:marvell-8686(马维尔)
5、内核:linux-2.6.35
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添加如下内容:
重启配置文件
工具链测试
显示
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没有错误的话,我们的openssl就移植成功了。
1. 将wpa_supplicant-0.7.2.tar.gz 解压到$ ~/workdir/wifi目录下
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
有返回包证明移植成功。