要实现这个功能,编程步骤和应用程序多文件的调用是一样的,只是在这个基础上,会显示的将变量或者函数名进行导出,导出的宏如下:

EXPORT_SYMBOL(变量名或者函数名);

或者

EXPORT_SYMBOL_GPL(变量名或者函数名);

前者导出的变量或者函数能够给任何一个内核程序调用;后者导出的变量或者函数只能给那些遵循GPL协议的内核程序调用;

案例:编写内核程序,掌握内核符号导出

实施步骤:

PC机执行:

1.mkdir /opt/drivers/day02/3.0

2.cd /opt/drivers/day02/3.0

3.vim test.h //函数的声明

4.vim test.c //函数的定义

5.vim helloworld.c //函数的调用

6.vim Makefile

obj-m += helloworld.o

obj-m += test.o

或者

obj-m += helloworld.o test.o

结果:

test.c -> test.ko

helloworld.c -> helloworld.ko

7.make

8.cp *.ko /opt/rootfs/

ARM板上执行:

加载模块

insmod test.ko

insmod helloworld.ko

卸载模块

rmmod helloworld

rmmod test

注意:加载卸载顺序

第二种方法: 使用modprobe 加载

modprobe命令使用步骤:

1. 进入内核源码 cd /opt/kernel

make modules

2. 修改 Makefile,添加如下信息

install:

make -C $(KDIR) SUBDIRS=$(PWD) modules_install INSTALL_MOD_PATH=/opt/

#modules_install 表示安装模块,主要是产生modules.dep,

依赖关系文件,然后将.ko拷贝到extra目录。

#INSTALL_MOD_PATH 表示安装到那个目录下

#一旦执行make install 安装模块时,最后在/opt目录生成一个lib目录,

然后将lib目录的内容拷贝到/opt/rootfs/lib下

3. make //编译模块

4. make install //安装模块

5. cp /opt/lib/* /opt/rootfs/lib -frd

6. 在开发板上进行加载:

modprobe helloworld.ko /modprobe helloworld

#说明: modprobe默认到/lib/modules/2.6.32.17-davinci1/下找以来文件modules.dep,

根据依赖文件,决定先加载哪个模块!模块在/lib/modules/2.6.32.17-davinci1/extra

7. 卸载模块

modprobe -r helloworld

总结: modprobe用于复杂的有依赖关系的模块加载。且它的操作其实也不方便。

如果依赖关系简单的话还是用EXPORT_SYSBOL ();

内核程序实现多文件的调用相关推荐

  1. JavaScript文件中调用AngularJS内部方法或改变$scope变量

    需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...

  2. Matlab编程与数据类型 -- 函数M文件的调用

    本图文介绍了Matlab中函数M文件的调用方式.

  3. python运行系统找不到指定文件_“系统无法找到指定的文件”当调用Python中的subprocess.Popen...

    我试图使用svnmerge.py来合并一些文件.底下它使用python,当我使用它时,我得到一个错误 - "系统找不到指定的文件".工作中的同事正在运行相同版本的svnmerge. ...

  4. 使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用

    文章目录: 1 准备环境 2 调用`Cython库包`把python的`.py`文件生成`.so`文件 2.1 写源码文件 2.2 调用源码接口 2.3 调用Cython库把`.py`源码生成`.so ...

  5. makefile 和shell文件相互调用

    shell 文件内调用makefile文件: #!/bin/bash cd ctemplate-2.1 ./configure sudo make -f install cd ../ cd Templ ...

  6. Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略

    Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略 目录

  7. Java如何通过WSDL文件来调用这些web service

    下面我们来看Java如何通过WSDL文件来调用这些web service: 注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准, ...

  8. 在.c文件中调用cuda函数

    在.c文件中调用cuda函数 2014-04-19 17:17 446人阅读 评论(0) 收藏 举报 分类: cuda编程(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. 问题描述:假设在 ...

  9. 帝国cms php sql,帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

    帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 例1:连接MYSQL数据库例子.(a.php) db_close(); //关闭MYSQL链接$empire=null; //注消操作类变量? ...

最新文章

  1. ORB特征提取算法分析与实现,算法分解
  2. 讀書收穫 The Untold Story of Milk, Ron Schmid
  3. linux 添加动态链接库路径
  4. python语言属于-python属于哪种语言
  5. 分类mysql_MySql分类
  6. 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
  7. Linux每个用户单独配置ssh,大神全面解读如何限制SSH用户访问Linux中指定的目录...
  8. python怎么去掉换行符_python去除字符串中的换行符
  9. python 在线培训费用-线下python培训要多少钱?
  10. Spring子项目了解
  11. 1597: [Usaco2008 Mar]土地购买 斜率优化
  12. packet协议源码解析
  13. python存储数据到mysql--针对dataframe格式下的
  14. 【7 kyu】Descending Order
  15. java 模拟天眼查登陆,scrapy,我想模拟登陆天眼查网站,那个网站要滑动对齐验证,我能怎么办才能模拟登陆成功呢?...
  16. Plugin工具类-Unreal4源码拆解-UnrealBuildTool功能流程解析
  17. SPSS MODELER笔记1----数据基本处理和整体方法概念
  18. 关于Windows系统问题
  19. Scala class和case class的区别
  20. 【计组】设计大型DMP系统--《深入浅出计算机组成原理》(十四)

热门文章

  1. 2017年4月11日
  2. JavaScript学习笔记之 数组方法一 堆栈 和队列
  3. __block 和 __weak的区别
  4. 修改git commit默认触发的编辑器
  5. OpenCV支持向量机SVM对线性不可分数据的处理
  6. ORACLE创建用户,建表空间,授予权限
  7. 通过 .htaccess 实现缓存策略
  8. tf.one_hot
  9. CentOS启用sudo方法
  10. 【Matlab】如何对二维矩阵进行线性/非线性插值?