OrangePiLite板上的wifi型号是rtl8189fs(用的接口是sdio).
1).在前面的基础上配置内核,编译出所需的wifi驱动模块
make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
Realtek 8189FS SDIO WiFi
**注意不要选上其它型号的wifi设备,否则会导致连接不上加密的wifi.**
保存退出后,编译内核镜像及驱动模块
make uImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
编译完成后, 驱动模块在内核源码目录里drivers/net/wireless/rtl8189fs/8189fs.ko
2). 更新板上的内核镜像, 把8189fs.ko驱动模块弄到板上的文件系统里。可通过读卡器在pc上复制,也可以通过虚拟网络复制到文件系统里
在板子上操作:
insmod 8189fs.ko //加载驱动模块
加载完成后可通过"ifconfig -a" 查看到有"wlan0"的网络设备
3). 有wifi网络设备后,还需要移植相应的工具才可以操作wifi
可从我的网盘下载所需的wifi工具:
链接: https://pan.baidu.com/s/1nwK2OeX 密码: 8mt5
共有三个包:
wireless_tools.29.tar.gz //用于提供操作wifi的命令,如iwconfig iwlist
wpa_supplicant-0.7.3.tar.gz //用于连接wpa加密的路由器工具
openssl-0.9.8e.tar.gz //一个加密算法的库,用于wpa_suuplicant里
4).交叉编译wireless_tool,生成iwlist, iwconfig等工具
tar xf wireless_tools.29.tar.gz
修改源码目录下的Makefile:
11 ## Compiler to use (modify this for cross compile).
12 CC = arm-linux-gnueabihf-gcc
13 ## Other tools you need to modify for cross compile (static lib only).
14 AR = arm-linux-gnueabihf-ar
15 RANLIB = arm-linux-gnueabihf-ranlib
20 BUILD_STATIC = y
修改完成后, 执行"make"编译
编译完成后, 把生成的iwconfig, iwlist复制到板子上的文件系统的bin目录里.
复制到板子上后,就可以操作wifi设备连接没有加密的路由器:
ifconfig wlan0 up //激活wifi设备
iwlist wlan0 scanning //扫描路由器
扫描输出的内容:
wlan0 Scan completed :
Cell 01 - Address: F4:EC:38:23:44:9E
Channel:1
Frequency:2.412 GHz (Channel 1)
Quality=58/70 Signal level=-52 dBm
Encryption key:off
ESSID:“10086”
…
iwconfig wlan0 essid "10086" //指定wifi连接名为"10086"的路由器
udhcpc -i wlan0 //连接后,向路由器请求分配IP地址
执行输出的内容:
udhcpc (v1.22.1) started
Sending discover...
Sending select for 192.168.1.7...
Lease of 192.168.1.7 obtained, lease time 172800
ifconfig wlan0 192.168.1.7 //分配到IP后,设置wifi设备的IP地址
route add default gw 192.168.1.1 //设置默认网关,如路由器是可上网的,则板上系统也可以通过路由器上网了.
5). 如果要连接有wpa加密路由器,还需移植openssl, wpa_supplicant.
tar xvf wpa_supplicant-0.7.3.tar.gz
tar xvf openssl-0.9.8e.tar.gz
编译openssl算法库:
将wpa_supplicant中的补丁拷贝到openssl中:
cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
建立openssl编译目标路径:
mkdir /usr/local/ssl_arm
修改openssl-0.9.8e目录下的makefile文件,修改内容如下:
28 INSTALL_PREFIX=
29 INSTALLTOP=/usr/local/ssl_arm
30
31 # Do not edit this manually. Use Configure --openssldir=DIR do change this!
32 OPENSSLDIR=/usr/local/ssl_arm
62 CC= arm-linux-gnueabihf-gcc
69 AR=arm-linux-gnueabihf-ar $(ARFLAGS) r
70 RANLIB= arm-linux-gnueabihf-ranlib
然后编译openssl:
make & make install
当make install时如出现与/usr/bin/pod2man 命令有关的错误时:
vim /usr/bin/pod2man里的:
原内容: 69 $parser->parse_from_file (@files);
修改为: 69 $parser->parse_from_file @files;
正常编译后,在/usr/local/ssl_arm中将会出现ssl库。
编译wpa_supplicant
cd wpa_supplicant-0.7.3/wpa_supplicant
cp defconfig .config
在.config中添加如下代码:
CC=arm-linux-gnueabihf-gcc -L /usr/local/ssl_arm/lib/
CFLAGS+= -I/usr/local/ssl_arm/include/
LIBS+= -L/usr/local/ssl_arm/lib/
然后编译:
make
经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。
把wpa_supplicant, wpa_cli复制到板子的文件系统的bin目录里
6). 编写/etc/wpa_supplicant.conf网络配置文件, 用于连接加密的路由器.
里面的内容:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
ssid="ipcamera"
psk="12345678"
}
使用wpa_supplicant来连接路由, 连接后还是需要udhcpc -i wlan0来让路由器分配ip
wpa_supplicant -Dwext -B -iwlan0 -c/etc/wpa_supplicant.conf //连接
为了方便操作,把busybox源码目录里的examples/udhcp/simple.script 复制到板子文件系统的/usr/share/udhcpc目录(需创建)下,
并命名为default.script.当使用udhcpc -i wlan0获取脚本时,会自动设置好IP地址, 路由和dns服务器
完整操作:
insmod 8189fs.ko
ifconfig wlan0 up
wpa_supplicant -Dwext -B -iwlan0 -c/etc/wpa_supplicant.conf
udhcpc -i wlan0