一个简单的模块函数

//源码
#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 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 显示系统当前安装的所有模块

模块声明:
  1. MODULE_LICENSE("遵守的协议")   申明该模块遵守的许可证协议,如“GPL”,“GPL_V2”
  2. MODULE_AUTHOR("作者")  申明模块的作者
  3. MODULE_VERSION("版本号")  模块的版本号
模块参数:

    通过宏module_param指定保存的模块参数的变量。模块参数用于在家在模块时传递参数给模块
    module_param(name,type,perm)

 name:变量名称
type:变量类型 ,bool:布尔型 int:整形 charp :字符串型

perm是访问权限。S_IRUGO:读权限 S_IWUSR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值