一、SDIO 设备驱动移植
(1)修改SD卡驱动使内核支持SD卡
修改文件:arch/arm/mach-s3c2410/mach-smdk2410.c
添加所需头文件:
#include<mach/gpio.h>
#include<linux/mmc/host.h>
#include<plat/mci.h>
//增加平台设备对sd卡的支持
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_sdi,
};
添加平台数据dev->platform_data
Static struct s3c24xx_mci_pdata smdk2410_mmc_cfg__initdata={
.gpio_detect = S3C2410_GPG(10),
.set_power = NULL,
.ocr_avail = MMC_VDD_32_33,
};
(2)在smdk2410_init中添加
S3c24xx_mci_set_platdata(&smdk2410_mmc_cfg);
二、配置内核以支持Marvel无线WIFI
选择35内核中的wlan marwell sdio模块
device drivers ----> |
三、编译内核,生成驱动模块
(1)先执行make 然后make modules //内核生成模块的方式
(2)将生成的wlan相关ko文件拷贝到目标板中,在这我放在/sdio目录下
home/kernel/linux-2.6.35/drivers/net/wireless/libertas/$ cp libertas.ko libertas_sdio.ko /rootfs/filesystem/sdio/
/rootfs/filesystem/sdio$ls
libertas.ko libertas_sdio.ko
(3)把固件helper_sd.bin sd8686.bin拷贝到相应的位置/rootfs/filesystem/lib/firmware/mrvl/ (Android中wifi.c有定义,属于HAL层,后面两个目录是自己创建的)
(4)在目标板子插入SDIO WIFI 并加载驱动
首先插入SDIO WIFI 然后加载驱动
/sdio#insmod libertas.ko
/sdio#insmod libertas_sdio.ko helper_name=/lib/firmware/mrvl/helper_sd.bin fw_name=/lib/firmware/mrvl/sd8686.bin (注意要在一行)
驱动加载完成会提示:(注意:如果没有,则再次热插拔你的sdio wifi卡便可以看到)
if_sdio_intterupt
libertas: 00:01:36:19:b3:6b, fw 9.70.3p23, cap 0x00000303
if_sdio_intterupt
libertas: wlan0: Marvell WLAN 802.11 adapter
sdio_havefister_driver
sdio_init_module have done
四、制作无线测试工具
测试无线网卡用无线工具iwconfig iwlist等命令是通过开源软件wireless_tools_29.rar编译得到。
步骤:
(1)首先在windows目录解压上面那个软件包,把解压后的文件夹复制到虚拟机/home$ls
wireless_tools_29
/home/wireless_tools_29$
(2)修改Makefile
8 PREFIX = /home/wtools //指定安装路径 12 CC = arm-linux-gnu-gcc (和编译你的文件系统所用保持一致,也可静态编译,对Makefile适当修改) 14 AR = arm-linux-gnu-ar |