首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

Slackware 構建 Broadcom 802.11 Linux STA 驅動:內核 API 變更修復指南

     編輯:關於C

問題現象

在 Linux 3.2.29 內核上編譯 Broadcom 802.11 STA 驅動(hybrid_wl)時報錯:


src/wl/sys/wl_linux.c:388:2: error: unknown field 'ndo_set_multicast_list' specified in initializer

根因分析

Linux 內核 2.6.35+ 將網絡設備操作結構體 struct net_device_ops 中的 ndo_set_multicast_list 重命名為 ndo_set_rx_mode,語義相同(設置接收模式/多播列表),但驅動源碼未同步更新。

修復步驟

1. 定位源文件


vim src/wl/sys/wl_linux.c
# 跳轉至 385 行附近

2. 修改結構體初始化器


// 原代碼
static const struct net_device_ops wl_netdev_ops = {
    // ...
    .ndo_set_multicast_list = wl_set_multicast_list,
    // ...
};

// 修改為
static const struct net_device_ops wl_netdev_ops = {
    // ...
    .ndo_set_rx_mode = wl_set_multicast_list,
    // ...
};

3. 重新編譯


make

編譯輸出驗證


KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Entering directory `/usr/src/linux-3.2.29'
Wireless Extension is the only possible API for this kernel version
Using Wireless Extension API
  CC [M]  /usr/local/src/hybrid_wl/32bits/src/wl/sys/wl_linux.o
  CC [M]  /usr/local/src/hybrid_wl/32bits/src/wl/sys/wl_iw.o
  CC [M]  /usr/local/src/hybrid_wl/32bits/src/wl/sys/wl_cfg80211.o
  LD [M]  /usr/local/src/hybrid_wl/32bits/wl.o
  Building modules, stage 2.
  MODPOST 1 modules
  WARNING: modpost: missing MODULE_LICENSE() in /usr/local/src/hybrid_wl/32bits/wl.o
  CC      /usr/local/src/hybrid_wl/32bits/wl.mod.o
  LD [M]  /usr/local/src/hybrid_wl/32bits/wl.ko
make[1]: Leaving directory `/usr/src/linux-3.2.29'

生成 wl.ko 內核模塊,警告缺少 MODULE_LICENSE 不影響功能。

補充:添加 MODULE_LICENSE 消除警告


// 在 wl_linux.c 或主模塊文件頂部添加
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Broadcom Corporation");
MODULE_DESCRIPTION("Broadcom 802.11 STA Driver");

內核 API 變更對照表

通用移植建議

  1. 查閱內核文檔:Documentation/networking/netdev-FAQ.txt、include/linux/netdevice.h。
  2. 使用兼容宏:驅動中定義 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35) 區分字段名。
  3. 關注 Wireless-Dev 郵件列表:獲取 802.11 子系統 API 變更通知。
  4. 優選主線內核驅動:brcmfmac/brcmsmac 為開源主線驅動,無需外部編譯,長期維護更可靠。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
內核版本舊字段新字段備註
≤ 2.6.34ndo_set_multicast_list-
≥ 2.6.35-ndo_set_rx_mode語義相同,參數一致
≥ 3.10ndo_set_rx_modendo_set_rx_mode穩定