惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
博客园 - Franky
Martin Fowler
Martin Fowler
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
Recent Announcements
Recent Announcements
The Cloudflare Blog
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
宝玉的分享
宝玉的分享
J
Java Code Geeks
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
MongoDB | Blog
MongoDB | Blog
腾讯CDC
博客园_首页
博客园 - 司徒正美
D
DataBreaches.Net
I
InfoQ
GbyAI
GbyAI
IT之家
IT之家
罗磊的独立博客

博客园 - longyue

[BF学院_卷1] -- 第30讲:mixTable() 总结 —— Mixer 完整控制模型 [BF学院_卷1] -- 第29讲:applyMixToMotors() —— 最终 Motor Output 生成 [BF学院_卷1] -- 第28讲:applyMixerAdjustment() —— 为什么 Mixer 需要重新分配控制权限 [BF学院_卷1] -- 第27讲:PID Output 如何进入 Mixer —— 从控制需求到 motorMix [BF学院_卷1] -- 第26讲:calculateThrottleAndCurrentMotorEndpoints() —— Mixer 如何确定油门基础范围 [BF学院_卷1] -- 第25讲:mixTable() 总览 —— Mixer 在控制循环中的位置 [BF学院_卷1] -- 第24讲:mixer_init.c —— 飞控启动时如何准备 Mixer [BF学院_卷1] -- 第23讲:Mixer 数学模型 —— motorMixer_t 如何形成 Motor Output [BF学院_卷1] -- 第22讲:Betaflight 如何描述 Mixer —— mixer.h 数据结构 [BF学院_卷1] -- 第21讲:四旋翼为什么可以通过电机控制姿态 —— Mixer 背后的物理基础 [BF学院_卷1] -- 第20讲:从 PID Output 到 Motor Command(电机指令)——为什么飞控需要 Mixer [BF学院_卷1] -- 第19讲:PID Controller(PID控制器)——飞控到底如何理解误差并控制飞机? [BF学院_卷1] -- 第18讲:PID Controller 的最后一环——为什么飞控还需要 Feedforward(前馈控制)? [BF学院_卷1] -- 第17讲:D Term(微分控制项)——飞控如何提前感知运动变化? [BF学院_卷1] -- 第16讲:I Term(积分控制项)——飞机为什么总是差一点? [BF学院_卷1] -- 第14讲:Rate Error(角速度误差)——PID 真正控制的到底是什么? [BF学院_卷1] -- 第15讲:P Term(比例控制项)——飞控是如何利用误差开始控制飞机的? [BF学院_卷1] -- 第13讲:Outer Loop 的终点——为什么还要读取 Current Angular Rate(当前角速度)? [BF学院_卷1] -- 第十二讲:Yaw Compensation(偏航补偿) [BF学院_卷1] -- 第12讲脚本 [BF学院_卷1] -- 第十一讲:Current Angular Rate(当前角速度)——飞控怎样知道飞机现在转得有多快? [BF学院_卷1] -- 第十讲:Angle Error(姿态角误差)如何变成 Desired Angular Rate(目标角速度) [BF学院_卷1] -- 第九讲:Current Angle(当前姿态角)遇见 Target Angle(目标姿态角) [BF学院_卷1] -- 第八讲:飞手打杆以后,飞控首先得到什么? [BF学院_卷1] -- 第七讲:为什么 Pitch Flip 只在 180° 看起来正确 [BF学院_卷1] -- 第7讲脚本 [BF学院_卷1] -- 第6讲:为什么 Pitch Flip 会骗人 [BF学院_卷1] -- 第6讲脚本 [BF学院_卷1] -- 第五讲:第一次修正——Pitch Flip 为什么看起来有效 [BF学院_卷1] -- 第5讲脚本 - longyue
[WIFI] WiFi模块驱动移植+调试
longyue · 2025-08-26 · via 博客园 - longyue

转自 : 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!!!