Linux WiFi Porting

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/82500213

Porting Android WiFi主要分两步进行,首先在kernel 把wifi网卡跑通,能够ping通外网,这样就确保了首先wifi driver应该是没有问题的。然后在将wifi Porting到Android。

这里以BCM43569 USB wifi Porting到IMX 6Q Android6.0平台为例进行讲解Linux WiFi Porting。
wifi 驱动一般原厂会给到我们,但是我们需要针对不同的kernel版本修改适配驱动代码,使驱动能在平台kernel中编译通过,一般Broadcom 的wifi驱动编译出来会有三个文件:bcmdl、wl、wlan.ko.其中bcmdl工具是用来加载固件的,wl是wifi tool。wlan.ko就是驱动文件了。
模块是USB接口的,当我们把模块插入平台之后我们可以通过lsusb查看到我们的模块是否有接入到平台,如果我们连lsusb查看USB设备的时候都看不到我们的模块设备VID 和 PID,那么就说明我们的模块硬件有问题USB无法识别,可以插拔几次确。以本公司的模块为例:

#lsusb
Bus 001 Device 006: ID 0a5c:bd27

1. 加载固件

#./bcmdl -n bcm43242_nv_fw/bcm43242.nvm firmware/43242a1-roml/usb*.bin.trx

如果固件加载成功,模块 PID会改变,否则则说明我们的固件没有加载成功,或者固件不对

#lsusb
Bus 001 Device 007: ID 0a5c:0bdc

一般wifi固件会去K tx power值和频偏等值,修改固件的值可以通过Linux 下vim工具去修改
https://blog.csdn.net/lucky_liuxiang/article/details/68063241

2 insmod driver
由于一般的wifi网卡都需要依赖nl80211协议的,所以我们还应该去报kernel中打开了cfg80211驱动,并且在平台已经加载了cfg80211.ko,然后我们将驱动push到平台,insmod wlan.ko

驱动加载成功我们可以通过
ifconfig -a查看到wifi网卡
这里写图片描述
ifconfig wlan0 up 将网卡up
这里写图片描述
这里写图片描述

3 在kernel中连接AP
只有当网卡UP起来之后,我们才能连接AP。连接AP的wifi tool有很多,一般模块驱动中会自带有wifi tool,如Broadcom 的wl 工具,MTK的iwprive工具,这些模块厂商自带的tool一般都需要依赖于厂商驱动
3.1下面以wl 工具连接AP为例:
wl工具:wl –help

#wl up
#wl auth 2
#wl infra 1
#wl wsec 6    
#wl wpa_auth 128
#wl sup_wpa 1
#wl set_pmk "iton1234"
#wl ssid "TP-LINK_792F"
#wl status

3.2通用WiFi tool

3.2.1通用的WiFi tool有wpa_supplicant

http://blog.sina.com.cn/s/blog_55465b470100l73l.html

在/data/misc/wifi/创建wpa_supplicant.conf配置文件:
ctrl_interface=/data/misc/wifi/tiwlan0
update_config=1
network={
        ssid="TP-LINK_792F"
        psk="iton1234"
        key_mgmt=WPA-PSK
        priority=1
}

#wpa_supplicant -Dnl80211 -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf &
#ps |grep wpa
#wpa_cli -iwlan0 -p/data/misc/wifi/tiwlan0
>scan
>scan_result
>add_network
>set_network 1 ssid "TP-LINK_792F"
>set_network 1 psk "iton1234"
>enable_network 1

3.2.2使用:iw

#iw list  // 列出WIFI网卡的性能
#ifconfig wlan0 up
#iw dev wlan0 scan   // 扫描WIFI AP
#iw wlan0 connect dswei  // 连接到WIFI AP:dswei (open)
#iw wlan0 connect dswei keys d:0:baiwenwang123 // 连接到WIFI AP:dswei (WEP)
                            d: default, 0: 第0个密码 
#ifconfig wlan0 192.168.1.55
#ping 192.168.1.1
#iw wlan0 disconnect

3.4 分配IP

连接上AP之后需要给网卡分配IP才能ping AP网关

3.4.1手动分配IP
busybox ifconfig wlan0 192.168.250.166 netmask 255.255.255.0

3.4.2自动分配IP

自动分配IP的工具有udhcpc和dhcpd
udhcpc是集成在busybox里面的,所以在编译busybox制作文件系统的时候加入dhcp的选项就可以了。
如果没有udhcpc的执行文件,可以手动连接一个:ln -s /bin/busybox /sbin/udhcpc
直接使用udhcpc只能分配ip地址,但是没有写入到设备中,即这个ip地址并没有生效。因为udhcpc需要一个默认的配置文件default.script,查看这个配置文件,它实际的作用就是将分配到的ip地址通过ifconfig命令写入设备中。
用udhcpc自动获取IP
udhcpc -i eth1 -p /var/run/udhcpc.pid -S -s /etc/udhcpc.sh
用dhcpcd自动获取IP
dhcpcd -f /system/etc/dhcpcd/dhcpcd.conf -d wlan0
ping 192.168.250.1

3.4.3 DNS域名解析
现在我们还只能ping通IP,当然如果路由器连接了外网,我们使能ping 通外网IP的,但是如果想要ping www.baidu.com
我们还需要dns lib和conf文件才能进行域名解析DNS问题以后有空另写一篇博客详解
这样我们在底层就已经将wifi调通了,当然如果

猜你喜欢

转载自blog.csdn.net/huangweiqing80/article/details/82500213
今日推荐