[WIFI] WiFi模块驱动移植+调试

转自 : https://mp.weixin.qq.com/s/DYqQgUqFicAPqBairS1Dyg?token=351837586&lang=zh_CN

一、WiFi驱动配置

当我们有一个新的Wifi模块,需要在项目上配置驱动时,Wifi原厂会给你相对应的资料,比如移植手册、驱动代码等,可以根据这些资料进行移植。此处只讲SDIO类型的WiFi模块。

 

WiFi模块的驱动移植有两种编译方法:

1.单独编译驱动2.将新的WiFi驱动放到内核中编译

最后都是生成.ko文件,拷贝到设备上insmod一下就可以成功使用了


(1) 单独编译驱动

首先保存好原厂的驱动代码,放到自己的文件路径下

111

1.配置编译环境

修改驱动文件中的Makefile,配置对应的内核路径、交叉编译工具链、平台架构等

111

参数说明:

  • KDIR:内核路径

  • CC:交叉编译器

  • architecture: 平台架构

  • system:使用的系统

  • platform_soc: 平台宏

 

2.配置驱动选项

在驱动根目录中敲make menuconfig

111

根据自己需要进行详细配置,看英文介绍就可以配置,这里不做过多演示。不同厂商、不同模块所需配置都不相同,可以根据原厂给的这块WiFi模块手册进行配置,或问原厂技术支持进行配置

111

3.驱动编译

不同厂家、不同芯片的编译方式也可能有所不同,这里介绍三种常见的编译方式a.直接编译make;make stripb.带参数编译

111

参数说明:

  • KDIR:内核路径
  • CC:交叉编译器
  • architecture: 平台架构
  • system:使用的系统
  • platform_soc: 平台宏

c.使用脚本编译build_driver.sh 放在驱动根目录,需要按照格式添加对应的平台即可

111

执行:

  • ./build_driver.sh 是 help 说明;
  • ./build_driver.sh XXXXX 会完整的编译 WIFI 驱动
  • ./build_driver.sh XXXX conf 会进入驱动配置界面

(2) 内核中编译

1.配置编译环境

进入内核目录下的drivers/net/wireless//

111

将 XXXXXXX 的驱动源码目录复制到内核目录下的drivers/net/wirelesee//

111

该目录中修改Makefile 和Kconfig 文件

Makefile添加对应WiFi模块的编译选项项

111

Kconfig在当前的Kconfig文件中引入一个外部的Kconfig文件路径

111

2.配置驱动选项

修改完MakefileKconfig文件后回到内核顶层目录进行配置编译

make menuconfig配置路径如下:

-> Device Drivers

-> [*]Network device support***

-> [*] Wireless LAN

 ->[M]XXXXXX

3.驱动编译

配置好后make ARCH=arm进行编译

  • 在Linux驱动中,使用"M"形式的模块指示符表示该模块将作为可加载模块编译。这意味着模块将编译为独立的二进制文件,而不是静态链接到内核。
  • 这些模块文件通常位于/lib/modules/{kernel_version}/目录下,其中{kernel_version}是正在运行的Linux内核版本号。
  • 当加载或卸载该模块时,可以使用insmod或modprobe命令将其加载到内核中,或使用rmmod命令卸载。

(3) 驱动加载测试

将生成的.ko文件有两种方式拷贝到设备上

1.第一种是直接拷贝,利用cp命令将.ko文件直接拷贝到设备上

2.第二种是直接将生成的kernel内核拷贝到设备上重新启动,.ko文件会在lib/modules/x.x.xx(Linux内核版本)/的目录下

以第一种为例,insmod XXXXXX.ko就可以将驱动加载到内核中,此时会根据驱动的代码打印一些内核log。也可以使用dmesg查看。

 111

输入ifconfig -a”命令,查看wlanX(X=0….n)网卡是否存在,一般都是 wlan0,除非板子上有多个 WIFI 模块在工作

111

从图中可以看出,当前开发板有一个叫做wlan0”的网卡,这个就是我们驱动对应的网卡。

 

二、配置WiFi联网    

不管是什么WIFI,当驱动测试都正常工作时,我们需要进行配置联网,WIFI要想联网,需要移植一些其他第三方组件,否则无法连接路由器或配置成路由器的功能,接下来我们就配置这些第三方组件。

 

(1) 基础第三方库、软件介绍:

  • OpenSSL:OpenSSL是一个开放源代码的软件库,提供了常用的安全协议(如SSL/TLS)的实现,用于加密通信和保护网络数据。它广泛应用于许多网络应用程序和操作系统中。

  • libnl-3.5.0:libnl是一个用于操作Linux内核网络部分的库,提供了对网络接口、路由表等的管理和配置功能。libnl-3.5.0则是libnl的特定版本。

  • Hostapd:Hostapd是一个用于实现无线网络接入点(AP)功能的软件,它可以将计算机或设备的无线网卡变成一个独立的无线接入点,允许其他设备通过它连接到网络。

  • DHCP:DHCP(Dynamic Host Configuration Protocol)是一种网络协议,可以自动分配IP地址、子网掩码、网关、DNS服务器等网络参数给计算机,简化了网络配置过程。通常用于局域网中的设备自动获取IP地址。

当我们需要配置WiFi正常上网时,可以用openssl+libnl-3.5.0+hostapd+dhcp实现

 

(2) 编译Hostapd

hostapd开源的仓库:git clone git://w1.fi/hostap.git

如何配置hostapd可以看以下链接,详细操作过程就不说了

https://blog.csdn.net/weixin_40209493/article/details/128716621?fromshare=blogdetail&sharetype=blogdetail&sharerId=128716621&sharerefer=PC&sharesource=qq_56921854&sharefrom=from_link

https://blog.csdn.net/weixin_43209963/article/details/128310918?fromshare=blogdetail&sharetype=blogdetail&sharerId=128310918&sharerefer=PC&sharesource=qq_56921854&sharefrom=from_link

最后会生成hostapd、hostapd_cli两个文件,这两个文件用于配置无线热点

(3) 编译dnsmasq

hostapd开源的仓库:git clone git://w1.fi/hostap.git

如何配置dnsmasq可以看以下链接,详细操作过程就不说了

https://www.xjx100.cn/news/291221.html?action=onClick

https://www.cnblogs.com/weidongliu/p/17361053.html

最后会生成dnsmasq一个文件,这个文件也是用于配置无线热点

 

(4) hostapd.conf

将上一步生成的程序拷贝到TF卡上就可以控制WiFi联网了,但运行Hostapd前提,还需要一个hostapd.conf的配置文件,这个文件就在源码目录下的Hostapd目录中(上一步生成的程序也在这个目录)

111

hostapd.conf是一个用于配置无线接入点(Access Point)的主要配置文件。它是HostAP(Host Access Point)驱动程序的配置文件,它定义了无线网络的参数和设置,包括SSID(无线网络名称)、加密方式、身份验证方法、频段、无线通道等。通过编辑hostapd.conf文件,可以自定义配置无线网络的各种参数,以满足特定的需求和安全要求。

详细配置可以根据源码目录下的这个文件里的说明进行配置:

111

这里我就自己写了一个hostapd的配置文件: 

 1 interface=wlan0
 2 driver=nl80211
 3 ctrl_interface_group=0
 4 ssid=CDR_00000
 5 country_code=CN
 6 ieee80211d=1
 7 hw_mode=g
 8 channel=11
 9 chanlist=1 6 11
10 beacon_int=100
11 max_num_sta=10
12 auth_algs=1
13 wmm_enabled=1
14 wpa=2
15 wpa_passphrase=12345678
16 wpa_key_mgmt=WPA-PSK WPA-EAP
17 wpa_pairwise=TKIP CCMP
18 rsn_pairwise=CCMP
19 wpa_group_rekey=86400

(5) 运行 hostapd

WIFI 功能能用 wlan的这个网卡,所以先提前查看是否有这个网卡

111

如果存在,将上述三个文件复制到设备中来

可以输入命令启动/system/bin/hostapd  -- -d -s /data/wifi/hostapd_xj.conf

 

因为要作为 AP,所以需要配置 dhcp 服务器

1 ifconfig p2p0 192.168.42.129
2       mkdir -p /var/lib/misc/
3       start-stop-daemon -S -q -m -b -p /var/run/dnsmasq.pid \
4             -x /system/bin/dnsmasq  -- --interface=p2p0 \
5             --dhcp-range=192.168.42.10,192.168.42.100,1h \
6             --except-interface=lo  --bind-interfaces \
7             --keep-in-foreground  --no-poll --user=root

这样就创建了Wifi(AP)并且可以让其它设备连上来了

 (6)WIFI 联网测试

手机连接测试,可以连接该Wifi!!!

 

posted on 2025-08-26 10:14  longyue  阅读(212)  评论(0)    收藏  举报

导航