//源码#include <linux/init.h>#include <linux/module.h>
static int hello_init()
{
printk(KERN_WARNING"Hello world!\n"); return 0;}
static void hello_exit()
{
printk(KERN_WARNING"hello exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile文件
obj-m := helloworld.o //编译生成的目标文件名
KDIR := /home/lesson/linux-2.6.38 //内核的路径
all:
make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
clean:
rm -f *.o *.ko *.order *.symvers
在make中出现如下错误是由于
static int hello_init()
static int hello_init()
static void hello_exit()
函数没有参数导致的,将其改为static int hello_init(void) ;static void hello_exit(void)重新make即可

modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
这句是Makefile的规则:这里的$(MAKE)就相当于make,-C 选项的作用是指将当前工作目录转移到你所指定的位置。“M=”选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules 命令中加入“M=dir”,程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成KO文件。
模块的加载:insmod *.ko
模块的卸载:rmmod ** 不许要.ko
显示模块:lsmod 显示系统当前安装的所有模块
模块声明:
- MODULE_LICENSE("遵守的协议") 申明该模块遵守的许可证协议,如“GPL”,“GPL_V2”
- MODULE_AUTHOR("作者") 申明模块的作者
- MODULE_VERSION("版本号") 模块的版本号
模块参数:
通过宏module_param指定保存的模块参数的变量。模块参数用于在家在模块时传递参数给模块
module_param(name,type,perm)
name:变量名称
type:变量类型 ,bool:布尔型 int:整形 charp :字符串型
perm是访问权限。S_IRUGO:读权限 S_IWUSR