linux内核模块开发
?
一,內核模塊功能: 讓內核文件(zImage或bzImage)本身并不包含某組件,而是在該?
組件需要被使用的時候,動態地添加到正在運行的內核中
二,內核模塊安裝和卸載
加載:insmod (insmod hello.ko)
卸載:rmmod (rmmod hello)
查看:lsmod
加載:modprobe (modprobe hello)
modprobe如同insmod,也是加載一個模塊到內核。它的不同之處在于它會根據文件
/lib/modules/<$version>/modules.dep
來查看要加載的模塊,看它是否還依賴于其他模塊,如果是,modprobe會首先找到?
這些模塊,把它們先加載到內核。
三,模塊可選信息:
1、許可證申明
宏MODULE_LICENSE用來告知內核, 該模塊帶有一個許可證,沒有這樣的說明,加載模?
塊時內核會抱怨。有效的許可證有"GPL“、"GPL v2"、"GPL and?
additionalrights"、"Dual BSD/GPL"、"Dual MPL/GPL"和"Proprietary"。
2、作者申明(可選)
MODULE_AUTHOR(“Simon Li");
3、模塊描述(可選)
MODULE_DESCRIPTION("Hello World Module");
4、模塊版本(可選)
MODULE_VERSION("V1.0");
5、模塊別名(可選)
MODULE_ALIAS("a simple module");
6、模塊參數
通過宏module_param指定模塊參數,模塊參數用于在加載模塊時傳遞參數給模塊。
module_param(name,type,perm)
name是模塊參數的名稱,type是這個參數的類型,perm是模塊參數的訪問?
權限。
type常見值:
bool:布爾型 int:整型 charp:字符串型
perm 常見值:
S_IRUGO:任何用戶都對/sys/module中出現的該參數具有讀權限
S_IWUSR:允許root用戶修改/sys/module中出現的該參數
/**************PARAM**************************/
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("GPL");
static char *name = "Daniel Guo";
static int age = 30;
module_param(age, int, S_IRUGO);?
module_param(name, charp, S_IRUGO);
static int __init hello_init()
{
printk(KERN_EMERG" Name:%s\n", name);
printk(KERN_EMERG" Age:%d\n", age);
return 0;
}
static void __exit hello_exit()
{
printk(KERN_INFO" Module Exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
/***************************************************/
命令:
make
insmod param.ko
rmmod param
insmod param.ko age=12
/****************************************************/
四,內核符號導出
/proc/kallsyms 記錄了內核中所有導出的符號的名字與地址。
EXPORT_SYMBOL(func); /*func為函數名稱,供其他模塊使用的*/
內核符號的導出使用:
EXPORT_SYMBOL(符號名)
EXPORT_SYMBOL_GPL(符號名)
其中EXPORT_SYMBOL_GPL只能用于包含GPL許可證的模塊。
?
http://www.cnblogs.com/FORFISH/p/5188421.html
轉載于:https://www.cnblogs.com/xiaoxiaodewo/p/5621630.html
總結
以上是生活随笔為你收集整理的linux内核模块开发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 磁盘分区 Fdisk
- 下一篇: 微软自夸Edge浏览器的电源效率