Linux內(nèi)核設(shè)備驅(qū)動(dòng)之Linux內(nèi)核模塊加載機(jī)制筆記整理
#include <linux/moduleparam.h>
1. 模塊參數(shù)
在驅(qū)動(dòng)定義變量
static int num = 0; //當(dāng)加載模塊不指定num的值時(shí)則為0
- module_param(變量名, 類(lèi)型, 權(quán)限);類(lèi)型: byte, int, uint, short, ushort, long, ulong, bool, charp,權(quán)限不能有寫(xiě)的權(quán)限
- 傳參數(shù): insmod test.ko 變量名1=值1 變量名2=值2
module_param的調(diào)用關(guān)系如下:
#define module_param(name, type, perm) \ module_param_named(name, name, type, perm) #define module_param_named(name, value, type, perm) \ param_check_##type(name, &(value)); \ module_param_call(name, param_set_##type, param_get_##type, &value, perm); \ __MODULE_PARM_TYPE(name, #type) #define module_param_call(name, set, get, arg, perm) \ __module_param_call(MODULE_PARAM_PREFIX, \ name, set, get, arg, \ __same_type(*(arg), bool), perm) #define __module_param_call(prefix, name, set, get, arg, isbool, perm) \ static int __param_perm_check_##name __attribute__((unused)) = \ BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)) \ + BUILD_BUG_ON_ZERO(sizeof(""prefix) > MAX_PARAM_PREFIX_LEN); \ static const char __param_str_##name[] = prefix #name; \ static struct kernel_param __moduleparam_const __param_##name \ __used \ __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ = { __param_str_##name, perm, isbool ? KPARAM_ISBOOL : 0, \ set, get, { arg } }
多個(gè)c文件編成一個(gè)模塊,可以使用xxx-objs這個(gè)Makefile中的指令來(lái)實(shí)現(xiàn),如下:
test-objs := a.o b.o //由a.c, b.c 編成test.ko, 注意不能有.o文件與目標(biāo)ko文件同名 obj-m += test.o
可在/sys/module/模塊名/下查看模塊在系統(tǒng)的信息
1. 查看elf文件的信息
readelf test.ko -a
ko文件組成
- 1. elf文件頭
- 2. text data ...
- 3. sections table
- 4. symbol table
2. EXPORT_SYMBOL(函數(shù)名/變量的地址) //把函數(shù)/或者變量的地址導(dǎo)出到內(nèi)核的符號(hào)表中
EXPORT_SYMBOL_GPL(函數(shù)名) ///////////
/proc/kallsyms 查看當(dāng)前系統(tǒng)的符號(hào)表
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- 將Linux代碼移植到Windows的簡(jiǎn)單方法
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)存管理筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核的時(shí)間管理筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之字符設(shè)備驅(qū)動(dòng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之虛擬文件系統(tǒng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之系統(tǒng)調(diào)用筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核的調(diào)試技術(shù)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之內(nèi)核中鏈表的使用筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之proc文件系統(tǒng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之高級(jí)字符設(shè)備驅(qū)動(dòng)筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)地址映射筆記整理
- Linux內(nèi)核設(shè)備驅(qū)動(dòng)之Linux內(nèi)核基礎(chǔ)筆記整理
- 移植新內(nèi)核到Linux系統(tǒng)上的操作步驟
相關(guān)文章
Linux系統(tǒng)用戶(hù)管理命令小結(jié)
這篇文章主要介紹了Linux系統(tǒng)用戶(hù)管理命令小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Linux 查看磁盤(pán)IO并找出占用IO讀寫(xiě)很高的進(jìn)程
這篇文章主要介紹了Linux 查看磁盤(pán)IO并找出占用IO讀寫(xiě)很高的進(jìn)程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02通過(guò) SSH 在遠(yuǎn)程 Linux 系統(tǒng)上運(yùn)行命令的方法
這篇文章主要介紹了通過(guò) SSH 在遠(yuǎn)程 Linux 系統(tǒng)上運(yùn)行命令的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10關(guān)于將Web項(xiàng)目部署到阿里云服務(wù)器(5個(gè)步驟搞定)
這篇文章主要介紹了關(guān)于將Web項(xiàng)目部署到阿里云服務(wù)器(5個(gè)步驟搞定),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07CentOS7下安裝yum源及上傳下載命令rz、sz安裝方法(圖解)
這篇文章主要介紹了CentOS7下安裝yum源及上傳下載命令rz、sz安裝方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11在AWS的Linux服務(wù)器部署Flask預(yù)演(詳細(xì)步驟)
這篇文章主要介紹了在AWS的Linux服務(wù)器部署Flask預(yù)演,部署Flask應(yīng)用程序到AWS Linux服務(wù)器,你可以選擇多種方式,本文分步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05