濮阳杆衣贸易有限公司

主頁 > 知識庫 > Linux內(nèi)核設(shè)備驅(qū)動之Linux內(nèi)核模塊加載機(jī)制筆記整理

Linux內(nèi)核設(shè)備驅(qū)動之Linux內(nèi)核模塊加載機(jī)制筆記整理

熱門標(biāo)簽:廈門營銷外呼系統(tǒng)平臺 涪陵商都400電話開通辦理 外呼系統(tǒng)的經(jīng)營范圍 申請400電話價格多少 安陽ai電銷機(jī)器人軟件 外呼系統(tǒng)不彈窗 智能電話機(jī)器人坐席 云會外呼系統(tǒng) 柳州市機(jī)器人外呼系統(tǒng)報價

#include <linux/moduleparam.h>

1. 模塊參數(shù)

在驅(qū)動定義變量

static int num = 0; //當(dāng)加載模塊不指定num的值時則為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 } }

多個c文件編成一個模塊,可以使用xxx-objs這個Makefile中的指令來實現(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)核的符號表中

EXPORT_SYMBOL_GPL(函數(shù)名)
///////////

/proc/kallsyms 查看當(dāng)前系統(tǒng)的符號表

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

標(biāo)簽:晉城 綏化 巴中 南充 蕪湖 孝感 撫順 福州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux內(nèi)核設(shè)備驅(qū)動之Linux內(nèi)核模塊加載機(jī)制筆記整理》,本文關(guān)鍵詞  Linux,內(nèi)核,設(shè)備驅(qū)動,之,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux內(nèi)核設(shè)備驅(qū)動之Linux內(nèi)核模塊加載機(jī)制筆記整理》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux內(nèi)核設(shè)備驅(qū)動之Linux內(nèi)核模塊加載機(jī)制筆記整理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    石家庄市| 余庆县| 永登县| 玉环县| 鄂伦春自治旗| 南陵县| 班玛县| 策勒县| 定远县| 乌兰浩特市| 沙河市| 弋阳县| 宝鸡市| 营口市| 白玉县| 东城区| 饶平县| 麻阳| 齐齐哈尔市| 白水县| 涿州市| 容城县| 浦县| 岑巩县| 九寨沟县| 澎湖县| 五峰| 景德镇市| 沾化县| 酒泉市| 吉木乃县| 汨罗市| 禄劝| 黄石市| 镇赉县| 卫辉市| 西青区| 井研县| 潼关县| 会泽县| 天水市|