ls /lib/modules //查看当前内核版本
uname -r //看是否和上面的一致
/*hello.c文件*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT"Hello,wrold\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye,Cruel world \n");
}
module_init(hello_init);
module_exit(hello_exit);
//hello.c的Makefile
obj-m := hello.o
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C/lib/modules/$(KVERSION)/build M=$(PWD) clean
make //生成hello.o文件
insmod hello.ko //将模块插入内核
modinfo hello //查看模块信息
tail /var/log/kern.log //查看日志信息看模块是否插入
rammed hello //把模块从内核中卸载
tail /var/log/kern.log //查看日志信息看模块是否卸载
//hello2.c
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static char *whom = "world";
static int howmany = 1;
module_param(howmany,int,S_IRUGO);
module_param(whom,charp,S_IRUGO);
static int hello_init(void)
{
int i = 0;
for(i = 0; i < howmany; i++)
printk(KERN_ALERT"(%d)Hello, %s\n",i,whom);
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"Goodbye,Cruel world \n");
}
module_init(hello_init);
module_exit(hello_exit);
##hello2的Makefile
obj-m := hello2.o
KVERSION = $(shell uname -r)
all:
make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules
clean:
make -C/lib/modules/$(KVERSION)/build M=$(PWD) clean
//和上面的hello操作唯一的区别是插入的时候可以带参数,参数如下。
insmod hello2.ko howmany=10 whom="CKH"