以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");

在add_sub.c中通过EXPORT_SYMBOL导出宏,是内核知道其定义的函数可以被其他函数使用。

#include <linux/init.h>
#include <linux/module.h> #include "add_sub.h" static int a = ;
static int b = ;
static int AddOrSub = ; static int test_init(void)
{
int result = ;
printk("test init\n"); if(AddOrSub == )
{
result = add_integer(a, b);
}
else
{
result = sub_integer(a, b);
}
printk("The %s result is %d\n", AddOrSub == ? "Add" : "Sub", result); return ;
} 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");

在test_communication.c中通过包含add_sub.h文件引入函数,即可使用。而module_param是模块加载是引入的参数。

在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上测试。

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

  1. Linux下多任务间通信和同步-信号

    Linux下多任务间通信和同步-信号 嵌入式开发交流群280352802,欢迎加入! 1.概述 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式.信号可以直接进行用户空间进程和内核进程之间的 ...

  2. Linux下多任务间通信和同步-概述

    Linux下多任务间通信和同步-概述 嵌入式开发交流群280352802,欢迎加入! 在前面,我们学习了两种多任务的实现手段:进程和线程.由于进程是工作在独立的内存空间中,不同的进程间不能直接访问到对 ...

  3. Linux下多任务间通信和同步-消息队列

    Linux下多任务间通信和同步-消息队列 嵌入式开发交流群280352802,欢迎加入! 简介 消息队列简称为队列.消息队列就是一些消息的列表.用户可以在消息队列中添加消息和读取消息等.从这点上看,消 ...

  4. Linux下多任务间通信和同步-mmap共享内存

    Linux下多任务间通信和同步-mmap共享内存 嵌入式开发交流群280352802,欢迎加入! 1.简介 共享内存可以说是最有用的进程间通信方式.两个不用的进程共享内存的意思是:同一块物理内存被映射 ...

  5. Linux下编写-makefile-详细教程(跟我一起写-Makefile-Markdown整理版)

    目录 概述 关于程序的编译和链接 Makefile 介绍 Makefile的规则 一个演示例子 make是怎样工作的 makefile中使用变量 让make自己主动推导 另类风格的makefile 清 ...

  6. [转] Linux下编写脚本实现Daemon

    在Linux(以Redhat Linux Enterprise Edition 5.3为例)下,有时需要编写Service.Service也是程序,一般随系统启动用户不干预就不退出的程序,可以称为Se ...

  7. Ubuntu\Linux 下编写及调试C\C++

    一.在Ubuntu\Linux 下编写及调试C\C++需要配置基本的环境,即配置gcc编译器.安装vim编译器,具体配置安装步骤我在这里就不多说了. 二.基本环境配置完了我们就可以进入自己的程序编写了 ...

  8. Linux下编写和加载 .ko 文件(驱动模块文件)

    一..ko 文件介绍 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载. 二.优点 (1)这样可以缩小内核体积 ...

  9. c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9601511.html c++ 网络编程(一)TCP/UDP  入门级客户端与服务端交互代码 网 ...

随机推荐

  1. linux 链接理解

    1.软链接 只包含另外软链接的基本信息, 生成与源文件不同的节点号, 可以链接目录.不同网络的文件 2.硬链接只能链接文件,不会生成节点号,说白了就是指针,指向同个文件,所以链接的节点号与源节点号一致

  2. 推荐几款在Windows中比较好用的软件

    gif录制软件:LICEcap 下载地址:https://www.cockos.com/licecap/ 演示

  3. SpringBoot使用其他的Servlet容器

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  4. JavaScript中 this 的指向

    很多人都会被JavaScript中this的指向(也就是函数在调用时的调用上下文)弄晕,这里做一下总结: 首先,顶层的this指向全局对象. 函数中的this按照调用方法的不同,其指向也不同: 1.函 ...

  5. Linux文件系统2---VFS的四个主要对象

    1.引言 本文所述关于文件管理的系列文章主要是对陈莉君老师所讲述的文件系统管理知识讲座的整理. Linux可以支持不同的文件系统,它源于unix文件系统,也是unix文件系统的一大特色. Linux文 ...

  6. 八大最安全的Linux发行版,具备匿名功能,做服务器的首选,web,企业服务器等

    10 best Linux distros for privacy fiends and security buffs in 2017 Introduction The awesome operati ...

  7. How to Repair GRUB2 When Ubuntu Won’t Boot

    Ubuntu and many other Linux distributions use the GRUB2 boot loader. If GRUB2 breaks—for example, if ...

  8. javascrip学习之 数据类型和变量

    JavaScript 是脚本语言.是一种轻量级的编程语言.是可插入 HTML 页面的编程代码,可由所有的现代浏览器执行. JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{.. ...

  9. 通达OA2008优化前端web为lnmp环境及后续优化

    1.安装lnmp环境 具体参考:CentOS6.5编译安装Nginx1.8.1+MySQL5.5.48+PHP5.2.17+xcache3.2+ZendOptimizer-3.3.9 http://b ...

  10. Expm 4_1 多段图中的最短路径问题

      [问题描述] 建立一个从源点S到终点T的多段图,设计一个动态规划算法求出从S到T的最短路径值,并输出相应的最短路径. 解 package org.xiu68.exp.exp4; public cl ...