1.hello.c#include#include#include#include#includestaticshortinta=1;staticintb=2;staticlongintc=3;staticchar*d="bp";staticintmyintArray[2]={-1,-1};staticintarr_argc=0;module_param(a,short,S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP);MODULE_PARM_DESC(a,"一个短整数");module_param(b,int,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);MODULE_PARM_DESC(b,"一个整数");module_param(c,long,S_IRUSR);MODULE_PARM_DESC(c,"一个长整数");module_param(d,charp,0000);MODULE_PARM_DESC(d,"一个字符串");module_param_array(myintArray,int,&arr_argc,0000);MODULE_PARM_DESC(myintArray,"整数数组");staticint__initdatahellodata=3;staticint__initbp_init(void){inti;printk(KERN_ALERT"你好世界\n");printk(KERN_ALERT"a是一个短整数:%d\n",a);printk(KERN_ALERT"b是一个整数:%d\n",b);printk(克恩_ALERT"c是一个长整数:%d\n",c);printk(KERN_ALERT"d是一个字符串:%s\n",d);for(i=0;i<(sizeof(myintArray)/sizeof(int));i++)printk(KERN_ALERT"myintArray[%d]is%d\n",i,myintArray[i]);printk(KERN_ALERT"\nhi,这是bp%d\n",hellodata);return0;}staticvoid__exitbp_exit(void){printk(KERN_ALERT"\ngoobyebp\n");}//插入模块时调用init函数module_init(bp_init);//删除模块时调用来自内核退出函数module_exit(bp_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("bybp");MODULE_DESCRIPTION("thisistestofbp");MODULE_SUPPORTED_DEVICE("testdevice");2.Makefileobj-m:=hello.oserver-objs:=hello.oKERNELDIR:=/lib/modules/$(shelluname-r)/buildPWD:=$(shellpwd)default:$(MAKE)-C$(KERNELDIR)M=$(PWD)模块清理:rm-f*.o*.ko*.mod.cmodules.*Module.*3。输入make进行编译(没有报错是正常提示..)ls查看是否生成.ko等文件。4.使用insmod将模块插入内核,使用方法:#insmodXXX.kosudoinsmodhello.ko5.dmesg查看内核输出dmesg6。使用rmmod从内核中删除模块,使用方法:#rmmodXXX.kosudormmodhello此时程序退出,使用dmesg查看并打印module_exit方法: