教你编写你的第一个Linux 内核模块“hello_module”( 二 )


 
也可通过 modinfo 命令进一步检查 :

教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
5.插入模块通过 insmod 命令插入模块 , 完成插入后可通过 lsmod 命令查看当前模块是否已经被加载到系统中:
教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
系统加载模块后 , 也会在“/sys/module”目录下新建以模块名命名的目录 :
教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
6.查看输出因 本 演示 中 prink()采 用 默认 输出 等级  , 可 通 过“ dmesg” 或“ tail /var/log/kern.log”命令查看输出结果 。
教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
“ tail /var/log/kern.log”命令查看输出结果:
教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
7. 卸载模块卸载模块 , 可通过“rmmod 模块名”实现 , 通 过“ tail /var/log/kern.log”命令查看输出结果 。
教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
二、 模块参数1.说明【教你编写你的第一个Linux 内核模块“hello_module”】Linux 内核提供一个宏来实现模块的参数传递
#define module_param(name, type, perm) module_param_named(name, name, type, perm)#define MODULE_PARM_DESC(_parm, desc) _MODULE_INFO(parm, _parm, #_parm ":" desc);
module_param()宏由 3 个参数组成 , name 表示参数名 , type 表示参数类型 , perm 表示参数读写权限 。MODULE_PARM_DESC()宏提供参数的简单说明 , 参数类型可为 byte、short、int、long、char、bool 等类型;perm 指定在 sysfs 中相应文件的访问权限 , 如设置为 0 则不会出现在 sysfs 文件系统中 , 设置为 0644 标识 root 用户可修改本参数 。
static int debug = 1;module_param(debug, int, 0644);MODULE_PARM_DESC(debug, "enable debugging information");#define dprintk(args...) if(debug){printk(KERN_DEBUG args);}
如上述实际代码所示(driver/misc/altera-stap1/altera.c) , 实际定义模块参数 debug,类型是 int,访问权限是 0644 。参数用途是大概调试信息 , 实际内核编程中常用此方法进行内核调试 。
2.开始动手修改上文中的“hello_module.c”文件 , 改为以下内容:
//hello_module.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>static int debug = 1;module_param(debug, int, 0644);MODULE_PARM_DESC(debug, "debugging information");#define dprintk(args...) if(debug){printk(KERN_DEBUG args);}static int myparm = 10;module_param(myparm, int, 0644);MODULE_PARM_DESC(myparm, "kernel module parameter experiment.");static int __init parm_init(void){dprintk("my linux kernel module init.n");dprintk("module parameter = %dn", myparm);return 0;}static void __exit parm_exit(void){printk("see you next time!n");}module_init(parm_init);module_exit(parm_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("Mr Q");MODULE_DESCRIPTION("kernel module paramter experiment");MODULE_ALIAS("myparm");make编译 , 装载模块 , 并查看输出:
教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
通过查看日志信息 , 可发现输出以上程序中 参数 的默认值 。
卸载模块 , 赋值重新加载模块,修改参数 myparm 值为 116:
insmod parm_module.ko myparm=116
教你编写你的第一个Linux 内核模块“hello_module”

文章插图
 
通过查看日志信息 , 可发现 参数 值已经改变 。




推荐阅读