Linux wifi driver 注冊和設備探測流程

基礎流程

  1. wifi驅動加載(insmod或者modprobe
    在這里插入圖片描述

  2. 設備驅動匹配探測(我們常見的probe函數)
    在這里插入圖片描述

整體流程
在這里插入圖片描述

驅動加載 → 注冊支持設備 → 設備插入 → 匹配驅動 → 初始化硬件 → 創建網絡接口

明確兩點

兩個流程

  1. 驅動加載:指將編譯好的驅動程序模塊加載到內核中,使其能夠被系統識別和使用。
  2. 設備探測匹配:指當設備插入時,內核如何識別該設備并綁定正確的驅動程序

兩個流程的關系

  1. 驅動加載是前提,只有驅動被加載到內核,才能進行后續的設備識別和綁定。
  2. 設備探測匹配是驅動加載后的自動過程,當設備連接到系統時,內核通過設備信息(如USB的廠商ID和產品ID)查找已注冊的驅動,進行匹配。
所以

驅動加載不正確,設備根本無法被識別,設備探測匹配失敗,即使驅動存在,設備也無法正常工作

硬件

  • 基于tplink wn722n v1網卡

詳細框架流程

  1. 無線驅動注冊:內核調用 ath9k_htc_init,使用usb_register 注冊將wifi驅動到 USB 子系統
  2. 設備探測:匹配設備 ID 后,調用 probe 分配資源、加載固件。
  3. mac80211 注冊:通過 ieee80211_alloc_hw 和 ieee80211_register_hw 注冊無線設備。
  4. 網絡接口創建:由 mac80211 生成 wlan 接口,用戶可配置連接。

流程解析

  1. 模塊初始化
    當執行 sudo modprobe ath9k_htc 或系統自動加載驅動時,內核調用 ath9k_htc_init
    在這里插入圖片描述
  2. 驅動注冊:它定義了 ath9k_hif_usb 驅動的核心結構體 usb_driver,并通過 usb_register 將驅動注冊到內核
    在這里插入圖片描述
    驅動加載內核日志:
    在這里插入圖片描述
    支持ID的列表說明:
    在這里插入圖片描述
    USB驅動探測函數ath9k_hif_usb_probe的實現。當USB設備插入并匹配到驅動時,內核會調用這個函數來初始化設備
  3. 驅動探測函數(當 USB 設備插入時,內核調用此函數進行設備探測,負責設備的初始化和固件加載)
    在這里插入圖片描述
  4. 固件加載
    在這里插入圖片描述
  5. 固件加載完成后的回調函數負責繼續設備的初始化流程
    在這里插入圖片描述
    初始化 USB 設備函數在這里插入圖片描述
  6. 初始化硬件(調用到關鍵函數)
    在這里插入圖片描述
  7. ath9k_htc_probe_device 負責完成設備的探測和初始化
    在這里插入圖片描述
    mac80211為所指向的驅動程序分配一個私有數據區域
    在這里插入圖片描述
    初始化無線設備,包括硬件配置、固件版本檢查、注冊表初始化、收發隊列初始化,并最終注冊到 mac80211 子系統,創建網絡接口
    在這里插入圖片描述
    續上圖
    在這里插入圖片描述

一個圖總結整個流程

在這里插入圖片描述

ath9k_htc_init(void)           									//驅動初始化ath9k_hif_usb_init(void)									//驅動注冊ath9k_hif_usb_probe()          							//設備探測ath9k_hif_request_firmware()							//請求加載固件ath9k_hif_usb_firmware_cb()							//固件加載完成后的回調→ ath9k_htc_hw_alloc									//為設備分配硬件資源(如內存、DMA 緩沖區)。ath9k_hif_usb_dev_init()							//初始化 USB 設備(將固件數據通過 USB 傳輸到設備,為 USB 數據傳輸分配URB)ath9k_htc_hw_init() 							//初始化硬件(總函數)ath9k_htc_probe_device() 						//負責探測并初始化硬件設備,完成了從分配硬件資源到注冊網絡接口的完整流程(上一個函數調用)ieee80211_alloc_hw(&ath9k_htc_ops)          //內核函數,分配無線硬件描述符,ath9k_htc_ops:無線硬件的操作函數集,用于管理無線硬件的操作和狀態ath9k_init_device()   					//初始化無線設備硬件(如配置寄存器、啟動固件),并注冊到 mac80211 子系統ath9k_set_hw_capab()					//設置硬件的功能集(如支持的頻段、接口類型等),設置mac地址ath9k_tx_init(priv);					//初始化隊列(Queue)用于管理數據包的發送ieee80211_register_hw(hw)			//將設備注冊到 mac80211 子系統,創建網絡接口(如 wlan0)release_firmware();				//釋放固件并標記設備就緒

疑問:

  1. wifi mac是wifi探測設備的必經流程,那mac地址是在哪獲取和設置的呢
    將設備從EEPROM中讀取的真實MAC地址(common->macaddr)設置為網絡接口的永久硬件地址
    通過ath9k_hw_common訪問到macaddr字段
    在這里插入圖片描述
    設置mac地址
    在這里插入圖片描述
  2. 當無線網卡設備成功被驅動探測并初始化后,內核會通過哪種方式在文件系統中顯示設備信息?
    我們這里句幾個除了工具不常用到的例子,都能說明設備正常被加載在這里插入圖片描述
    設備通用信息:/sys/bus/usb/devices/1-1
    在這里插入圖片描述
    或者:/sys/class/net
    在這里插入圖片描述
    這里的常用信息
    設備的加載驅動和子系統信息:
    在這里插入圖片描述
    還有就是無線物理層PHY參數
    在這里插入圖片描述
    或者/proc/net/dev
    在這里插入圖片描述

基礎概念加深

  1. 驅動匹配機制
    匹配過程:
    1)內核遍歷所有已注冊的 USB 驅動(通過 usb_register_driver)。
    2)對比設備的 (VID, PID) 與驅動 id_table 中的條目。
    3)若匹配成功,調用驅動的 probe() 函數(即 ath9k_htc_probe)。
  2. 無線子系統(mac80211)
    1)mac80211 是 Linux 內核中用于實現無線wifi協議棧的核心框架,它為無線網卡驅動提供了統一的軟件接口,簡化了無線設備驅動的開發。
    2)它是現代 Linux 無線驅動的基石,支持多種無線模式(如 AP、STA、Monitor 等)和復雜的 Wi-Fi 功能(如加密、掃描、速率控制等)。

mac80211 的定位與作用

  1. 功能定位
    1)硬件抽象層:將底層無線硬件的操作抽象為統一的 API,驅動開發者只需實現這些接口,無需關心復雜的 802.11 協議邏輯。
    2)協議實現:處理 802.11 協議的核心功能,如幀的封裝/解析、認證、關聯、掃描、加密(WEP/WPA/WPA2/WPA3)等。
    3)多模式支持:支持多種無線模式(Access Point, Station, Monitor, Mesh, Ad-Hoc )
  2. 與其他子系統的關系
    1)cfg80211:mac80211 的配置層,提供用戶空間工具(如 iw、hostapd)通過 nl80211(基于 Netlink)配置無線接口的接口。
    2)硬件驅動:驅動通過實現 mac80211 的回調函數(如發送/接收數據、設置頻道等)與物理設備交互。
    3)用戶空間工具:如 iw、wpa_supplicant,通過 cfg80211 控制無線網絡行為。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898931.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898931.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898931.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器人】復現 GrainGrasp 精細指導的靈巧手抓取

GrainGrasp為每個手指提供細粒度的接觸指導,為靈巧手生成精細的抓取策略。 通過單獨調整每個手指的接觸來實現更穩定的抓取,從而提供了更接近人類能力的抓取指導。 論文地址:GrainGrasp: Dexterous Grasp Generation with Fine-grained Con…

快速部署Samba共享服務器作為k8s后端存儲

由于Ceph Squid(v19.2.1)?不原生支持直接導出 SMB 服務器?,需通過手動集成 Samba 或其他第三方工具實現? 所以直接部署最簡單的 安裝軟件包 apt install samba編輯配置文件 vim /etc/samba/smb.conf在最末尾添加以下 # cp /etc/samba/sm…

【時時三省】(C語言基礎)選擇結構和條件判斷

山不在高,有仙則名。水不在深,有龍則靈。 ----CSDN 時時三省 選擇結構和條件判斷 在現實生活中需要進行判斷和選擇的情況是很多的。如:從北京出發上高速公路,到一個岔路口,有兩個出口,一個是去上海方向,另一個是沈陽方向。駕車者到此處必須進行判斷,根據自己的目的地…

【MYSQL】索引和事務

🥰🥰🥰來都來了,不妨點個關注叭! 👉博客主頁:歡迎各位大佬!👈 本期內容講解 MySQL 中的索引和事務,在學習的過程中,我們需要經常問自己為什么 文章目錄 1. 索…

計劃管理工具應該具備的能(甘特圖)

在當今快節奏的項目管理環境中,高效地規劃和跟蹤項目進度是至關重要的。甘特圖,作為項目管理領域的經典工具,以其直觀的時間軸和任務分配方式,深受項目管理者的青睞。 隨著數字化時代的到來,甘特圖線上編輯器應運而生&…

Redis分布式尋址算法

分布式尋址算法是分布式系統中用于確定數據應該存儲在哪個節點的算法。這些算法對于實現高效的數據存取、負載均衡和系統擴展性至關重要。以下是幾種常見的分布式尋址算法的解釋: 1. Hash 算法 原理:通過哈希函數將數據的鍵(Key&#xff09…

CSS動畫

目錄 一、核心概念與語法 1. keyframes 關鍵幀 2. animation 屬性 二、動畫調速函數(animation-timing-function) 1. 預設值 2. 貝塞爾曲線 3. 步進函數(steps()) 三、動畫控制與交互 1. 暫停與恢復 2. JavaScript 控制…

2025年河北省第二屆職業技能大賽網絡安全項目 模塊 B樣題任務書

2025年河北省第二屆職業技能大賽網絡安全項目 模塊 B樣題任務書 河北省第二屆職業技能大賽網絡安全項目-模塊 B-奪旗挑戰賽(CTF)一、目標系統1二、目標系統2三、目標系統3四、目標系統4 需要真題環境-培訓可以私信博主! 河北省第二屆職業技能…

鈔票準備好了嗎?鴻蒙電腦 5 月見

3月20日,在華為 Pura 先鋒盛典及鴻蒙智行新品發布會上,華為常務董事、終端BG董事長、智能汽車解決方案BU董事長余承東表示,華為終端全面進入鴻蒙時代,今年5月將推出鴻蒙電腦。 在3月20日的華為Pura先鋒盛典及鴻蒙智行新品發布會上…

Java高頻面試之集合-15

hello啊,各位觀眾姥爺們!!!本baby今天來報道了!哈哈哈哈哈嗝🐶 面試官:解決哈希沖突有哪些方法? 1. 開放尋址法(Open Addressing) 核心思想:當哈…

【機器學習】建模流程

1、數據獲取 1.1 來源 數據獲取是機器學習建模的第一步,常見的數據來源包括數據庫、API、網絡爬蟲等。 數據庫是企業內部常見的數據存儲方式,例如:MySQL、Oracle等關系型數據庫,以及MongoDB等非關系型數據庫,它們能夠…

GitHub 上的 Khoj 項目:打造你的專屬 AI 第二大腦

在信息爆炸的時代,高效管理和利用個人知識變得愈發重要。GitHub 上的 Khoj 項目為我們提供了一個強大的解決方案,它能成為你的 “AI 第二大腦”,幫你輕松整合、搜索和運用知識。今天,就來詳細了解下 Khoj。? Khoj 是什么&#x…

爬蟲(requsets)筆記

一、request_基本使用 pip install requests -i https://pypi.douban.com/simple 一個類型六個屬性 r.text 獲取網站源碼 r.encoding 訪問或定制編碼方式r.url 獲取請求的urlr.content 響應的字節類型r.status_code 響應的狀態碼r.headers 響應的頭信息 import requestsur…

centos7連不上接網絡

選擇編輯, 選擇虛擬機網絡編輯 右鍵虛擬機,點擊設置,設置網絡,選擇nat模式, 配置:/etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/sysconfig/network-scripts/ifcfg-ens33設置IP地址如圖所示,重…

OpenResty(Lua)+Redis實現動態封禁IP

文章目錄 架構設計環境準備源碼編輯安裝OpenResty下載安裝準備依賴編譯安裝配置環境變量(可選)OpenResty 服務管理命令 安裝Redis配置Lua腳本測試準備測試工具測試封禁邏輯 刪除版本信息清除編譯安裝的OpenResty 架構設計 通過 Nginx Redis 的方案&…

Turtle基本操作(前進、后退、旋轉)

1. Turtle基本移動概念 在Turtle繪圖中,“海龜”(Turtle)相當于一支筆,它在屏幕上移動時,會在經過的路徑上留下軌跡。我們可以通過一系列簡單的指令控制它的前進、后退和旋轉,從而繪制各種形狀和圖案。 2. 前進與后退 2.1 前進(forward() 或 fd()) Turtle的 forward…

C++類與對象的第一個簡單的實戰練習-3.24筆記

在嗶哩嗶哩學習的這個老師的C面向對象高級語言程序設計教程&#xff08;118集全&#xff09;講的真的很不錯 實戰一&#xff1a; 情況一&#xff1a;將所有代碼寫到一個文件main.cpp中 #include<iostream> //不知道包含strcpy的頭文件名稱是什么,問ai可知 #include<…

Jetson Orin NX使用 Ollama 本地部署 deepseek

本文記錄在 jetson orin nx 上使用 ollama 部署 deepseek 的過程 有用的網站及工具 NVIDIA Jetson AI LabOllama官網Jtop 工具 > 用以查看jetson GPU/CPU/Memory 等占用情況的工具&#xff0c;安裝過程如下&#xff1a; sudo apt-get install python3-pip sudo -H pip3 in…

目標檢測20年(三)

對這篇論文感興趣的小伙伴可以訂閱筆者《目標檢測》專欄&#xff0c;關注筆者對該文獻的閱讀和理解。 前兩篇解讀鏈接&#xff1a; 目標檢測20年&#xff08;一&#xff09;-CSDN博客 目標檢測20年&#xff08;二&#xff09;-CSDN博客 目錄 四、 檢測器的加速發展 4.1 特…

智能手持終端PDA在設備巡檢管理中的應用

在工業制造、能源電力、軌道交通等領域&#xff0c;設備巡檢是保障生產安全與連續性的核心環節。傳統巡檢模式存在效率低、易出錯、數據滯后等痛點。上海岳冉智能設備巡檢手持終端PDA&#xff0c;以智能化、數字化、高可靠為核心設計理念&#xff0c;集RFID、條碼掃描、AI圖像識…