2、开发环境搭建:Linux内核源码获取与编译、交叉编译工具链配置、TFTP/NFS网络文件系统搭建、串口终端与调试工具(minicom、putty)
做WiFi驱动开发,环境搭建是第一道坎。说实话,我见过太多新手卡在这一步——不是内核编不过,就是文件系统挂不上,最后连个串口都打不开。别急,咱们一步步来。
2.1 Linux内核源码获取与编译
WiFi驱动本质上就是内核里的一个模块。所以你得先有个能跑的内核。
2.1.1 获取源码
我个人习惯用主线内核,因为文档全、社区活跃。你可以从 kernel.org 下载,或者直接用厂商提供的 BSP 包。
# 下载主线内核
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.80.tar.xz
tar -xf linux-5.15.80.tar.xz
cd linux-5.15.80
如果你用的是开发板,比如树莓派或全志平台,厂商通常会提供一个 .tar.gz 包。嗯,这里要注意:别用厂商改得面目全非的内核,除非你确定他们修了关键 bug。
2.1.2 配置与编译
配置内核是门手艺活。我建议先拿默认配置跑一遍:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
在 menuconfig 里,你需要确保以下选项打开:
| 配置项 | 路径 | 说明 |
|---|---|---|
| CONFIG_CFG80211 | Networking support → Wireless | WiFi 核心框架,必选 |
| CONFIG_MAC80211 | Networking support → Wireless | 软 MAC 层支持 |
| CONFIG_WLAN | Device Drivers → Network device support → Wireless LAN | WiFi 设备驱动总开关 |
| CONFIG_DEBUG_FS | Kernel hacking → DebugFS | 调试用,强烈建议打开 |
编译命令很简单:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 modules
-j4 表示用4个线程并行编译。你想想看,如果你的电脑是8核,可以改成 -j8,能快不少。
2.2 交叉编译工具链配置
交叉编译,说白了就是在 PC 上编译出能在 ARM 上跑的程序。WiFi 驱动、测试工具都得靠它。
2.2.1 工具链选择
我个人推荐用 Linaro 的 gcc 工具链,稳定且更新及时。下载后解压到 /opt 目录:
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
sudo tar -xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz -C /opt
2.2.2 环境变量设置
每次编译都敲一长串路径太烦了。我习惯把它加到 .bashrc 里:
export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
然后 source 一下:
source ~/.bashrc
验证一下:
arm-linux-gnueabihf-gcc --version
make 命令行临时指定 CROSS_COMPILE,而不是改全局变量。比如:make CROSS_COMPILE=arm-linux-gnueabihf-
2.3 TFTP/NFS 网络文件系统搭建
开发 WiFi 驱动时,你肯定不想每次改代码都重新烧写整个系统。TFTP 用来传内核,NFS 用来挂载根文件系统——这是最常用的调试组合。
2.3.1 TFTP 服务器
TFTP 简单到令人发指。安装:
sudo apt-get install tftpd-hpa
配置文件在 /etc/default/tftpd-hpa:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
把编译好的 zImage 和设备树文件丢进去:
sudo cp arch/arm/boot/zImage /srv/tftp/
sudo cp arch/arm/boot/dts/your-board.dtb /srv/tftp/
重启服务:
sudo systemctl restart tftpd-hpa
2.3.2 NFS 服务器
NFS 用来共享根文件系统。安装:
sudo apt-get install nfs-kernel-server
编辑 /etc/exports:
/srv/nfs/rootfs *(rw,sync,no_subtree_check,no_root_squash)
然后:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
2.4 串口终端与调试工具(minicom、putty)
串口是嵌入式开发者的「眼睛」。没有它,你连内核 panic 信息都看不到。
2.4.1 minicom 配置
minicom 是 Linux 下最常用的串口工具。安装:
sudo apt-get install minicom
配置:
sudo minicom -s
进入「Serial port setup」菜单,设置:
- Serial Device: /dev/ttyUSB0(根据你的设备调整)
- Bps/Par/Bits: 115200 8N1
- Hardware Flow Control: No
- Software Flow Control: No
保存为默认配置:
sudo minicom -s -o
# 选择 "Save setup as dfl"
以后直接运行 sudo minicom 就行。
2.4.2 putty 配置
如果你在 Windows 下开发,putty 是首选。配置要点:
- Connection type: Serial
- Serial line: COM3(根据实际端口)
- Speed: 115200
- Data bits: 8
- Stop bits: 1
- Parity: None
- Flow control: None
记得在 Session 里保存一下配置,下次直接双击加载。
2.5 本章知识体系
下面这张图总结了开发环境的核心组件和它们之间的关系:
说白了,整个环境就是「PC 编译、网络传输、板子运行、串口观察」这个闭环。你把这个环打通了,后面写驱动就顺了。
公众号:蓝海资料掘金营,微信deep3321