OpenWrt无线网络深度定制:从mac80211.sh脚本解析到实战修改
1. OpenWrt无线子系统架构解析
OpenWrt的无线网络子系统是整个路由器系统中最为复杂的模块之一,它通过mac80211这一Linux内核无线驱动框架实现对各种无线网卡的支持。mac80211.sh脚本作为连接内核驱动与用户空间配置的桥梁,在整个无线网络初始化过程中扮演着关键角色。
核心组件交互关系:
+-------------------+ +-------------------+ +-------------------+
| /etc/config/ | | mac80211.sh | | Linux内核 |
| wireless配置 |<--->| (初始化脚本) |<--->| mac80211驱动 |
+-------------------+ +-------------------+ +-------------------+
^ |
| v
| +-------------------+
+----------------------------------------| 硬件无线设备 |
+-------------------+
mac80211.sh脚本通常位于OpenWrt源码树的以下路径:
package/network/config/wifi-scripts/files/lib/wifi/mac80211.sh
这个脚本会在以下三种情况下被调用:
- 系统首次启动时
- 执行
wifi detect命令时 - 通过
/etc/init.d/wifi重启无线服务时
2. mac80211.sh关键函数剖析
2.1 detect_mac80211函数
这是整个脚本的核心入口函数,负责探测系统中的无线设备并生成初始配置。其执行流程如下:
- 初始化计数器变量
devidx - 加载现有的wireless配置
- 遍历
/sys/class/ieee80211/目录下的所有无线设备 - 为每个设备生成基本配置项
关键代码段分析:
detect_mac80211() {
devidx=0
config_load wireless
config_foreach check_devidx wifi-device
json_load_file /etc/board.json
for _dev in /sys/class/ieee80211/*; do
[ -e "$_dev" ] || continue
dev="${_dev##*/}"
# 获取设备默认参数
mode_band=""
channel=""
htmode=""
get_band_defaults "$dev



被折叠的 条评论
为什么被折叠?



