手上有一块OK6410的板子,有一个水星的usb WiFi mw300,查了一下是RTL8192的驱动,OK6410接线到路由器挂载NFS有点麻烦,想把这个驱动移植的OK6410上,通过WiFi实现NFS挂载。
1、驱动移植
从网上查阅了一些资料,在瑞昱的官网上下载RTL8192的驱动:http://www.realtek.com.tw/search/default.aspx?keyword=8192
下载完成后再linux主机上解压
驱动在driver文件夹下
修改makefile
CONFIG_PLATFORM_I386_PC = n 默认是支持386平台,改为s3c6410平台
CONFIG_PLATFORM_ARM_S3C6K4 = y
ifeq ($(CONFIG_PLATFORM_ARM_S3C6K4), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
CROSS_COMPILE := arm-linux-
KVER := 3.0.1
KSRC ?= /home/dcj/test/linux-3.0.1
Endif
根据实际的平台及内核做修改。
执行Make
生产8192cu.ko 文件。
OK6410提供的linux内核本身是没有把8192驱动编译进去的,需要重新编译。
在内核下make menuconfig
然后make zImage
其实 linux3.0.1版本本身是支持RTL8192版本驱动的,但我编译出来的内核确不能识别无线网卡,这个目前还搞不清楚是什么原因。
把内核烧到开发板,8192cu.ko放到开发板上insmod 8192cu.ko 。Lsmod 可以发现无线网卡已经识别到,ifconfig wlan up 后,ifconfig可以看到已经存在wlan0这个网卡了。
2、移植无线网卡配置应用
但如何通过这个网卡来连接路由器,使开发板可以通过无线网卡上网
首先需要移植wireless_tools 和wpa_supplicant_hostapd(这两个的用处请百度)
解压RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911文件下的Wirless_tools ,修改makefile
## Compiler to use (modify this for cross compile).
#CC = gcc
CC = arm-linux-gcc
## Other tools you need to modify for cross compile (static lib only).
AR = ar
RANLIB = ranlib
然后make,在usr\local\sbin下生产 ifrename iwconfig iwenent iwgetid iwlist iwpriv iwspy这几个文件
把这几个文件拷贝到开发板的根文件/sbin下
网络上有些资料说可以通过iwconfig wlan0 essid “xxx” key”xxx”连接路由器,我试过是不行的。还有说通过iwpriv ra0 set NetworkType=Infra
iwpriv ra0 set AuthMode=WPA2PSK
iwpriv ra0 set EncrypType=TKIP
iwpriv ra0 set WPAPSK=*******
iwpriv ra0 set SSID=jxj_rd
来实现网络连接,
Set命令不可用,不知道是不是wireless_tools版本的问题。
移植编译wpa_supplicant_hostapd
这个移植困扰了我很久,在改makefile的时候
我改成
导致编译出来的可执行文件还是PC上的编译工具,在板上无法执行,使用的编译工具还是GCC。
又改了defconfig始终是编译出错,编译了opensll也没办法解决,后面通过仔细阅读document文件夹下的Wireless_tools_porting_guide.pdf文件发现makefile是要添加一行CC=arm-linux-gcc
而不是修改CC=gcc。
Make后把wpa_suplicant和wpa_cli wpa_passphrase拷贝到开发板上。
在etc文件夹下新建wpa_supplicant.conf
文件内容如下:
# WPA-PSK/TKIP
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="xxx"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk="xxx"
}
Cd /etc
执行#wpa_passphrase xxx xxxx >> wpa_supplicant.conf (xxx为essid xxxx为登陆密码)生成暗文密码,
此时将在wpa_supplicant.conf文件中生成:
network={
ssid="xxx"
#psk="xxxx"
psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
}
然后修改wpa_supplicant.conf配置文件,把 psk="1234567890" 这一行明文密码改成生成的暗文密码,即:
psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
其它生成的多余信息删除,
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="xxx"
scan_ssid=1
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
pairwise=TKIP CCMP
group=CCMP TKIP WEP104 WEP40
psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6bab
}
执行# wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf &就使无线网卡连接上网络。
Ping路由器可以ping通,设置网关,DHCP就可以通过开发板上网。
其实这些软件的编译方法在documnet 文件夹下的Quick_Start_Guide_for_Driver_Compilation_and_Installation和Wireless_tools_porting_guide.pdf文件下都有介绍。
附上可以shell命令,执行./NFS.sh使可以自动加载8192cu驱动,配置IP,挂载NFS目录。
NFS.sh文件内容如下:
#!/bin/sh
insmod /test/8192cu.ko
ifconfig wlan0 up
ifconfig eth0 down
wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant.conf -dd &
ifconfig wlan0 192.168.1.115
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.1.106:/nfs/root /mnt