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(變量名, 類型, 權(quán)限);類型: byte, int, uint, short, ushort, long, ulong, bool, charp,權(quán)限不能有寫的權(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中的指令來實(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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- 將Linux代碼移植到Windows的簡單方法
- 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環(huán)境下設(shè)置shadowsocks+polipo全局代理
XX-NET僅僅可以是用戶通過瀏覽器訪問外面世界,而非系統(tǒng)全局代理,使用shadowsocks+polipo技術(shù)可使功能進(jìn)一步拓展2018-09-09
linux確認(rèn)已經(jīng)卸載數(shù)據(jù)盤并可以新建自定義鏡像
在本文中我們給大家整理了關(guān)于linux中如何確認(rèn)已經(jīng)卸載數(shù)據(jù)盤并可以新建自定義鏡像的相關(guān)內(nèi)容和知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。2018-09-09
Linux實(shí)現(xiàn)修改只讀文件(以設(shè)置自動(dòng)連網(wǎng)為例)
這篇文章主要介紹了Linux實(shí)現(xiàn)修改只讀文件(以設(shè)置自動(dòng)連網(wǎng)為例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Linux和window環(huán)境下開放防火墻端口的操作
開發(fā)時(shí)會(huì)遇到在服務(wù)器上部署mysql或者es數(shù)據(jù)庫的情況,此時(shí)如果訪問數(shù)據(jù)庫就需要開放防火墻端口,本文會(huì)講解windows和linux環(huán)境下端口的開放,文章通過圖文結(jié)合的方式講解的非常詳細(xì),需要的朋友可以參考下2024-09-09

