Linux裝置驅動 如何進行構建和執行模組

2021-10-14 07:09:09 字數 2034 閱讀 3203

核心功能模組

裝置和模組的分類

字元裝置:可通過位元組流(類似檔案)進行訪問的裝置,字元裝置驅動程式通常至少要實現open、close、read和write系統呼叫。

塊裝置:進行io操作,可進行傳輸若干個完整的塊的裝置。

網路介面:任何網路事務都經過乙個網路介面形成,網路介面由核心中的網路子系統驅動,負責傳送和接收資料報,不需要了解資料報結構和具體的對映。

核心模組和應用程式的區別

核心模組是執行在核心空間,應用程式是執行在使用者空間。

核心模組的程式設計方式類似應用程式中事件驅動的程式設計方式,模組需要預先進行註冊,用於服務將來的某個請求。

應用程式在退出時,可以不管資源的釋放或者其他清除工作;而核心模組的退出函式卻必須全部撤銷初始化函式所做的一切,否則,系統重新引導之前某些東西就會殘留在系統中。

應用程式可以呼叫未定義的函式,可以通過解析外部引用鏈結對應的函式庫。核心模組僅僅是被鏈結到核心,只能使用核心中匯出的函式,不存在任何可鏈結庫。

應用程式開發過程中的段錯誤是無害的,能通過偵錯程式定位到問題源頭;核心錯誤即使不影響系統,也至少會殺死程序。

將模組鏈結到核心

核心具有非常小的棧,可能和乙個4096位元組大小的頁那樣小。

在核心api中,函式名稱中(__)通常表示介面底層元件,謹慎使用。

核心**不能實現浮點數運算,如果開啟浮點支援,在某些架構上,需要在進入和退出核心空間時儲存和恢復浮點處理器的狀態。這種額外的開銷沒有任何價值,核心**中也不需要浮點運算。

裝載和解除安裝模組

insmod:將模組的**和資料裝入核心,然後使用核心的符號表解析模組中任何未解析的符號,如果核心中沒有定義,則報告命令有誤,並在系統日誌檔案中記錄「unresolved symbols(未解析的符號)」訊息。insmod可以接受一些命令列選項,可以在模組鏈結到核心之前進行配置引數,變數引數必須經過module_param(變數,型別,sysfs入口項的訪問許可掩碼)巨集(moduleparam.h)來宣告。陣列引數必須經過module_param_array(陣列名稱,型別,最大個數,perm訪問許可值)來宣告。

insmod是依賴於kernel/module.c中的系統呼叫。

insmod工作原理:

modprobe:將模組的**和資料裝入核心,同時會檢查裝載的模組是否有引用核心中不存在的符號,如果存在這類符號,則在當前模組搜尋路徑中查詢定義這些符號的其他模組,並進行裝載該模組所依賴的其他模組到核心中,可以在它的配置檔案(/etc/modprob.conf)進行讀取引數值.

rmmod:將所有模組從核心中移除,如果核心認為模組還在使用狀態或者核心被配置為禁止移除的狀態,則無法移除該模組。

lsmod:列出當前裝載在核心中的所有模組,並提供其他資訊,lsmod是通過讀取/proc/modules虛擬檔案來獲取這些資訊。已裝載模組的資訊也可以在sysf虛擬檔案系統的/sys/module下找到。

linux核心提供一種方法來管理符號對模組外部的可見性,減少命名空間的汙染。

匯出符號:

export_symbol(name)

export_symbol_gpl(name)

注意:符號只能在模組檔案的全域性匯出,不能在函式中匯出,匯出的變數必須是全域性的,存放在模組的可執行檔案的乙個elf段。裝載時,核心可通過這個段尋找模組匯出的**段。

初始化和關閉

module_init的使用是強制的,這個巨集會在模組的目標**中增加乙個特殊的段,標識核心初始化函式所在的位置。

module_exit是幫助核心標識模組清除函式所在的位置。

在初始化過程中,可能會發生錯誤導致無法繼續裝載模快,則需要將出錯之前的任何註冊工作撤銷掉,否則系統會殘留指向不存在的指標。

SEO如何進行鏈結構建整理

linkassistant是一款絕佳的鏈結助手,可以找到數百個建立鏈結的機會。獲得新的反向鏈結通常是一場數字遊戲 您需要鏈結構建工具,這些工具將提供大量的鏈結建議,這些建議將為您的鏈結構建活動奠定基礎。而linkassistant只是純粹的最佳選擇。每天有71億個頁面被抓取,該軟體將為您提供成百上千...

如何學習linux裝置驅動

面對不斷公升級的核心,如何學習linux裝置驅動 面對不斷公升級的linux核心 gnu開發工具 linux環境下的各種圖形庫,很多linux應用程式開發人員和linux裝置驅動開發人員即興奮,又煩躁。興奮的是新的軟體軟體 工具給我提供了更強大的功能,煩躁的是適應新軟體的特性 搭建新環境是一項非常繁...

如何學習linux裝置驅動

本文 面對不斷公升級的linux核心 gnu開發工具 linux環境下的各種圖形庫,很多linux應用程式開發人員和linux裝置驅動開發人員即興奮,又 煩躁。興奮的是新的軟體軟體 工具給我提供了更強大的功能,煩躁的是適應新軟體的特性 搭建新環境是一項非常繁瑣的事情。本文想從以下3個方面 一下 面對...