首页 > 代码库 > Linux下编写互相通信的驱动模块并将其加入到内核中

Linux下编写互相通信的驱动模块并将其加入到内核中

以Mini2440为例,其Linux内核目录为/opt/FriendlyARM/mini2440/linux-2.6.32.2,在linux-2.6.32.2(Linux内核目录)下的drivers目录下新建目录名为add_sub_Kconfig。

在add_sub_Kconfig目录下新建文件add_sub.c,add_sub.h,test_communication.c,代码如下:(例子来自《Linux驱动开发入门与实践 第2版》)

 

#ifndef ADD_SUB_H#define ADD_SUB_Hlong add_integer(int a, int b);long sub_integer(int a, int b);#endif

 

#include <linux/init.h>#include <linux/module.h>#include "add_sub.h"long add_integer(int a, int b){    return a + b;}long sub_integer(int a, int b){    return a - b;}EXPORT_SYMBOL(add_integer);EXPORT_SYMBOL(sub_integer);MODULE_LICENSE("GPL");

 

#include <linux/init.h>#include <linux/module.h>#include "add_sub.h"static int a = 1;static int b = 1;static int AddOrSub = 1;static int test_init(void){    int result = 0;    printk("test init\n");    if(AddOrSub == 1)    {        result = add_integer(a, b);    }    else    {        result = sub_integer(a, b);    }    printk("The %s result is %d\n", AddOrSub == 1 ? "Add" : "Sub", result);    return 0;}static void test_exit(void){    printk("test exit\n");}module_init(test_init);module_exit(test_exit);module_param(a, int, S_IRUGO);module_param(b, int, S_IRUGO);module_param(AddOrSub, int, S_IRUGO);MODULE_LICENSE("GPL");

 

在add_sub_Kconfig目录下新建Kconfig文件,有两个模块,这里构造一个菜单把它们包含进来。tristate表示模块可以选择编译进内核还是作为独立的模块,默认值m表示独立的模块。如果希望直接编译进内核可以使用boolean,然后默认值改为y。

 

menu "ADD_SUB_FUNCTION"    comment "ADD_SUB_FUNCTION"config ADD_SUB    tristate "ADD_SUB support"    default mconfig TEST_COMMUNICATIONA    tristate "ADD_SUB test support"     depends on ADD_SUB    default mendmenu

 

在add_sub_Kconfig目录下新建Makefile文件,在Kconfig中的config后写了ADD_SUB和TEST_COMMUNICATION,此处则写CONFIG_ADD_SUB和CONFIG_TEST_COMMUNICATION:

 

obj-$(CONFIG_ADD_SUB) += add_sub.oobj-$(CONFIG_TEST_COMMUNICATION) += test_communication.o

 

在drivers目录下的Kconfig文件中添加:

source "drivers/add_sub_Kconfig/Kconfig"

 

在drivers目录下的Makefile文件中添加:

obj-$(CONFIG_ADD_SUB) += add_sub_Kconfig/

obj-$(CONFIG_TEST_COMMUNICATION) += add_sub_Kconfig/

 

回到/opt/FriendlyARM/mini2440/linux-2.6.32.2目录,执行:

make menuconfig,然后确认添加的模块已经打开。(此处选m编译为ko模块)

make modules,即可看到在add_sub_Kconfig目录下编译出的两个ko文件。

 

将两个ko文件下载到Mini2440上测试。

 

技术分享

 

Linux下编写互相通信的驱动模块并将其加入到内核中