Linux内核允许在加载模块时变化参数,这使得驱动的加载更具灵活性。下面是我的学习内容,虚拟机下编译x86平台的内核模块。
module_param.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int howmany = 1;
static char *whom = "world";
module_param(howmany,int,S_IRUGO);
module_param(whom,charp,S_IRUGO);
static int module_param_init(void)
{
printk(KERN_ALERT "Enter module_param_init\n");
printk(KERN_ALERT "whom is %s,howmany = %d\n",whom,howmany);
return 0;
}
static int module_param_exit(void)
{
printk(KERN_ALERT "Leave module_param_exit\n");
return 0;
}
module_init(module_param_init);
module_exit(module_param_exit);
Makefile
obj-m = module_param.o
module-objs := module_param.o
KERNELDIR = /lib/modules/$(shell uname -r)/build
PWD = $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ *.mod.c *.mod.o *.order *.symvers *.markers *.ko
首先还是通过命令“tail -f /var/log/kern.log”打开日志,然后加载模块。命令“insmod module_param.ko howmany=12345 whom=mark”执行完之后,日志信息里面多出了“Aug 2 07:58:31 ubuntu kernel: [ 8618.300111] whom is mark,howmany = 12345”一串信息,与驱动加载函数中的打印信息相符。若使用命令“insmod module_param.ko”,即不加参数,日志信息中将显示默认的模块参数值“Aug 2 08:05:08 ubuntu kernel: [ 9014.652497] whom is world,howmany = 1”。
阅读(423) | 评论(0) | 转发(0) |