参考博客:
https://blog.csdn.net/imlsq/article/details/72844532
https://segmentfault.com/a/1190000011579147
https://blog.csdn.net/qq_40732350/article/details/88670101
平台 Hi3518EV200:
1.型号:rtl8188,台湾瑞昱(Realtek)公司芯片
2.驱动移植过程:
linux kernel 3.4.35
rtl8188.zip 驱动源码包
具体移植过程:参考博客:https://blog.csdn.net/imlsq/article/details/72844532
1.首先是关于内核的配置
(1).配置内核的网络模块支持wireless功能
(2).配置网络设备支持wireless lan设备
编译生成uImage
2.配置rtl8188的驱动源码包
(1).自己添加PLATFORM_HI3518EV200 = y
(2).配置大小端模式,我们这里配置的是小端模式
低地址放低字节,高地址放高字节,就是小端模式。反之就是大端模式
(3).配置架构 ARCH = arm
(4).配置交叉编译器 CROSS_COMPILE = arm-hisiv300-linux-gcc
(5).配置内核版本
(6).配置内核源码树目录
3.编译生成驱动模块:8188eu.ko
4.放到板子上面去,insmod 驱动模块
5.ifconfig -a, 查看所有的网卡,就会看到wlan0无线网卡
6.ifconfig wlan0 up, 就开启了无线网卡
open ssl 和 wpa_supplicant的移植
1.如何连接,使用wpa_supplicant
2.wpa_supplicant 移植需要openssl提供库和头文件的支持
3.OpenSSL是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议
4.SSL移植需要打补丁,因为OPENSSL有一个漏洞,一个64k数据的bug,有可能能得到用户的用户名,密码等信息
5.在外部模块使用openssl库时,会提供openssl补丁文件,例如:wpa_supplicant
6.打完补丁,编译报错,
****Expected text after =item, not a number
****Expected text after =item, not a number
****Expected text after =item, not a number
****Expected text after =item, not a number
原因:OpenSSL 与 perl版本不兼容,openssl需要perl的支持
解决方法:rm -f /usr/bin/pod2man
7.生成SSL的头文件 和 库文件
8.wpa_supplicant 部分移植,并不能支持所有的驱动
9.wpa_supplicant 部分移植过程
(1).cp /wpa_supplicant/defconfig .config
(2).修改.config,增加以下内容:
CC=arm-hisiv300-linux-gcc -L/tmp/openssl/lib
CFLAGS+=-I /tmp/openssl/include
LIBS+=-L/tmp/openssl/lib
指定生成的ssl库的头文件和库
编译wpa_supplicant要依赖openssl中的lib和include
(3).make 如果报错:
driver_nl80211.c:17:31: fatal error: netlink/genl/genl.h
进入wpa_supplicant目录下.config
将CONFIG_DRIVER_NL80211=y 注释掉即可
(4).继续make,生成wpa_supplicant和wpa_passphrase和wpa_cli后整个移植成功完成
(5).将生成的wpa_supplicant和wpa_passphrase和wpa_cli拷贝到板子上去
wifi的连接:
1.创建/etc/wpa_supplicant.conf文件,
写入如下内容:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
2.wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf & , 运行wpa_supplicant
3.打开了之后呢,我们搜索附近的网络:
wpa_cli -i wlan0 scan // 搜索附近wifi网络,如果没有问题,会打印OK
wpa_cli -i wlan0 scan_result // 打印搜索wifi网络结果,搜索到的AP
wpa_cli -i wlan0 add_network // 添加一个网络连接,第一次就会添加0,第二次1,依次累加
4.根据不同的加密方式,我们来设置AP的名字和密码
(1).wpa方式加密:
wpa_cli -i wlan0 set_network 0 ssid ‘“name”’
wpa_cli -i wlan0 set_network 0 psk ‘“psk”’
wpa_cli -i wlan0 enable_network 0
(2).wep加密
wpa_cli -i wlan0 set_network 0 ssid ‘“name”’
wpa_cli -i wlan0 set_network 0 key_mgmt NONE
wpa_cli -i wlan0 set_network 0 wep_key0 ‘“psk”’
wpa_cli -i wlan0 enable_network 0
(3).ESS加密:
wpa_cli -i wlan0 set_network 0 ssid ‘“name”’
wpa_cli -i wlan0 set_network 0 key_mgmt NONE
wpa_cli -i wlan0 enable_network 0
5.动态分配ip方法:
两种方式
参考博客:https://blog.csdn.net/qq_40732350/article/details/88670101
(1).dhclient, 可以参考:https://www.jb51.net/article/37379.htm
(2).udhcpc 是一个面向嵌入式系统的非常小的DHCP客户端,字母的缩写微- DHCP -客户端(μDHCPc)。
(3).udhcpc -i wlan0, udhcpc只是获取一个IP,我们需要把\busybox-1.1.2\examples\udhcp下的脚本simple.script改名为default.script,放在开发板上的/usr/share/udhcpc/目录下(看清楚是udhcpc),才能将获取的IP写到指定的网卡中。
(4).这里涉及一系列文件的移植,具体请见博客:https://blog.csdn.net/qq_40732350/article/details/88670101
博客中有些许的错误:复制/busybox-1.1.2examples/var_service/fw/etc/resolv.conf 到 /etc/下,看清楚是/etc下,不是/etc/udhcpc下
(5).都移植好了之后,udhcpc -i wlan0 就可以给wlan0动态分配ip了
6.静态IP方式
(1).ifconfig wlan0 192.168.0.233 类似
(2).配置网关:route add default gw 192.168.0.1 dev wlan0,//配置网关为:192.168.0.1
(3).配置了网关之后就可以ping了
ping -I wlan0 192.168.0.1 //指定使用网卡 wlan0去ping 网关
ping -I wlan0 8.8.8.8 //ping 外网
ping -I wlan0 202.108.22.5 //ping 百度的ip地址
vi /etc/resolv.conf //配置dns,打开这个文件
nameserver 192.168.43.1 //文件中写入此内容,这里是配置dns,是做域名解析的
ping -I wlan0 www.baidu.com //dns配置好了之后,就可以ping通百度了
7.wpa_cli -i wlan0 save_config 保存连接,把网络的名字和密码保存到/etc/wpa_supplicant.conf
8.wpa_cli -i wlan0 disable_network 0 断开连接
9.连接已有的连接
wpa_cli -i wlan0 list_network 列举所有保存的连接
wpa_cli -i wlan0 select_network 0 连接第1个保存的连接
wpa_cli -i wlan0 enable_network 0 使能第1个保存的连接
10.断开wifi
ifconfig wlan0 down
killall udhcpc
killall wpa_supplicant