现在的位置: 首页 > 综合 > 正文

Linux内核学习之二:内核模块开发

2013年12月10日 ⁄ 综合 ⁄ 共 1750字 ⁄ 字号 评论关闭

/***************************************************************************************

Makefile文件(文件名必须为Makefile)

***************************************************************************************/

ifneq ($(KERNELRELEASE),)
obj-m := mymodule.o #obj-m为关键字,,如果分两个模块编译 这里要写obj-m := calculator.o hello.o;同时calculator.c中与模块相关的注释要打开
mymodule-objs := calculator.o hello.o # 
-objs
为关键字

else

KDIR := /lib/modules/2.6.32-38-generic/build

all:
 make -C $(KDIR)  M=$(PWD) modules #注意此行前的Table键空格
clean:
 rm -f *.ko *.o *.mod.o *.mod.c *.symvers

endif

/***************************************************************************************

hello.c文件

***************************************************************************************/

hello.c文件

#include<linux/module.h>
#include<linux/init.h>

MODULE_LICENSE("GPL");
MODULE_AUTHOR("David_Lu");
MODULE_DESCRIPTION("HelloWorldModule");
MODULE_ALIAS("A simple module");

static int age = 30;
module_param(age,int,S_IRUGO);
extern int add(int,int);

static int __init hello_init()
{
    printk("<4>hello world! ,age = %d\n",add(age,age));
    return 0;
}

static void __exit hello_exit()
{
    printk("<4>hello exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

/***************************************************************************************

calculator.c文件

***************************************************************************************/

#include <linux/init.h>
/*#include <linux/module.h>*/

int add(int a,int b)
{
   return a+b;
}

/*static __init int cal_init()
{
    return 0;
}
static __exit void cal_exit()
{
   
}
module_init(cal_init);
module_exit(cal_exit);

EXPORT_SYMBOL(add);*/

 

备注:

1》安装模块 insmod hello.ko,卸载模块rmmod hello

      带有模块参数的:insmod hello.ko age=30(等号两侧不能有空格

2》hello模块依赖calculator模块,要先安装calculator模块

3》编译的模块可以在/proc/modules文件中查看

4》printk打印信息可以通过 cat /var/log/message 查看,但是<0>到<3>查看不到相关输出信息,不知为何

 

抱歉!评论已关闭.