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_H

long 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 m

config TEST_COMMUNICATIONA
    tristate "ADD_SUB test support"
    depends on ADD_SUB
    default m

endmenu

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

obj-$(CONFIG_ADD_SUB) += add_sub.o
obj-$(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上测试。

时间: 2024-11-03 03:32:30

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

在Linux下编写Daemon

在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service.Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为Service.Linux下的Service一般称为Daemon. 以上是广义的Service的定义.Linux下的Service一般放在/etc/init.d文件夹下.浏览一下这个文件夹下的文件,可以发现在Linux下编写Service一般遵循的原则. 一 Linux下编写Service一般遵循的原则

使用VI编辑器在Linux下编写Java文件

1.cd 文件名,进入一个目录下 2.vi 文件名,新建一个文件(如此文件已存在则打开) 进入编辑器 3.按i(光标所在输入)/按a(光标后输入)进入编辑模式,写入JAVA代码 P.S.  Esc退出编辑状态,非编辑状态下X为删除,HJKL分别为左上下右 4.按Esc退出编辑模式 5.按:wq,回车 6.ls查看文件,已存在 7.javac编译(文件名需加后缀) 8.java运行(文件名不加后缀) 使用VI编辑器在Linux下编写Java文件

Linux下编写驱动程序(VFS)

转:http://hi.baidu.com/firstm25/item/8fe022155e1fa78988a9568f 摘要:设备驱动程序是操作系统内核与机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节.那么驱动程序如何书写实现这一接口功能是本文讨论的重点,并以一简单的驱动程序介绍书写细节. 在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度.(应用程序一般是在用户态下进行)也就是说系统必须在驱动程序的子函数返回后才能进行其它的工作,即驱动程序不能进入死循环. 字符型设备

c++ 网络编程(二)TCP/IP linux 下多进程socket通信 多个客户端与单个服务端交互代码实现回声服务器

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9612820.html LINUX下: 一.服务端代码 下面用了多个close来关闭文件描述符,可能有的小伙伴会有疑惑....我就说一句,创建进程的时候会把父进程的资源都复制 一份,而你这个子进程只需要保留自己需要处理的资源,其他的自然要关闭掉, 不然父亲一个儿子一个 待会打起来怎么办  嘿嘿 注意了:就像进程间的通信需要属于操作系统的资源管道来进行,套接字也属于操作系统,所以创建新进程也还是

Linux下编写 makefile 详细教程

原文地址:https://www.cnblogs.com/mfryf/p/3305778.html 还有一篇也不错:http://wiki.ubuntu.org.cn/跟我一起写Makefile:MakeFile介绍 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的mak

怎样在linux下编写C程序并编译执行

一.Hello, world! 在linux下输入:(以hello.c为例)首先选中文件要保存的路径(如:cd work)vi hello.c(要编辑的文件名) 输入程序:# include<stdio.h>int main(void) { printf("hello,world!\n");   return 0;   注:return和0之间要有空格} 退出并保存程序:在vi模式下,按ESC后,按 :wq加enter键 利用gcc编译程序:(先要找到程序存在哪个文件夹中)

Windows下与Linux下编写socket程序的区别 《转载》

原文网址:http://blog.chinaunix.net/uid-2270658-id-308160.html [[Windows]] [Windows: 头文件的区别] #include<winsock.h>#include<winsock2.h> [Windows: 初始化的区别] WSADATA wsaData;WSAStartup(0x202,&wsaData); [Windows: 声明Socket] SOCKET类型 [Windows: Socket关闭]c

linux下的串口通信

 /************声明:本人只是见到这篇文章对我帮助很大才转载的,但是这个完整的程序里面本来有语法错误的,现在让我改过来了************/ 今天的主角àUART0串口.因此对他的一切操作都和文件的操作一样(涉及到了open,read,write,close等文件的基本操作). 一.Linux下的串口编程又那几部分组成 1.    打开串口 2.    串口初始化 3.    读串口或写串口 4.    关闭串口 二.串口的打开 既然串口在linux中被看作了文件,那么在对文件

linux下安装Sublime Text3并将它的快捷方式放进启动器中

Sublime Text是一个代码编辑器,我主要是用它来编辑python.下面就来简单说明下它在linux的安装过程吧! 1.添加sublime text3的仓库 首先按下快捷键ctrl+alt+t打开终端: 在终端输入:sudo add-apt-repository ppa:webupd8team/sublime-text-3 按下回车后会出现很多信息,根据提示,按下回车键继续 2.更新软件库: 接着在终端输入:sudo apt-get update 3.最后一步就是安装Sublime Tex