下面的代码是一个完整的最简单的“hello world”模块
C代码名称hello.c
下面是交叉编译所需的Makefile
其中的KERNELDIR = /home/wanxiao/code/tools/utu-linux_for_s3c2440_V1.5.3 是根据自己的内核文件地址来修改相应的路径,这里我的内核使用的是utu-linux_for_s3c2440_V1.5.3
然后make,生成hello.ko,直接将其发送到开发板中。
修改权限 chmod +x hello.ko
添加模块 insmod hello.ko
查看已添加模块 lsmod
卸载模块 rmmod hello.ko
见下图所示
下面对这个模块中的C代码进行修改,添加参数
其中的一下几条语句实现了模块中参数的添加,尤其是 module_param(name,type,perm);函数
static char *whom = "world";
static int howmany = 1;
module_param(howmany,int,S_IRUGO);
module_param(whom,charp,S_IRUGO);
他的前2个参数实际上都很好理解,第三个参数最后的 module_param 字段是一个权限值; 你应当使用 <linux/stat.h> 中定义的值. 这个值控制谁可以存取这些模块参数在 sysfs 中的表示.如果 perm 被设为 0, 就根本没有 sysfs 项. 否则, 它出现在 /sys/module下面, 带有给定的权限. 使用 S_IRUGO 作为参数可以被所有人读取, 但是不能改变; S_IRUGO|S_IWUSR 允许 root 来改变参数. 注意, 如果一个参数被 sysfs 修改, 你的模块看到的参数值也改变了, 但是你的模块没有任何其他的通知. 你应当不要使模块参数可写, 除非你准备好检测这个改变并且因而作出反应.
编译-发送到开发板-添加模块-卸载模块
见下图所示


被折叠的 条评论
为什么被折叠?



