内核程序实现多文件的调用
要实现这个功能,编程步骤和应用程序多文件的调用是一样的,只是在这个基础上,会显示的将变量或者函数名进行导出,导出的宏如下:
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 ();
内核程序实现多文件的调用相关推荐
- JavaScript文件中调用AngularJS内部方法或改变$scope变量
需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controll ...
- Matlab编程与数据类型 -- 函数M文件的调用
本图文介绍了Matlab中函数M文件的调用方式.
- python运行系统找不到指定文件_“系统无法找到指定的文件”当调用Python中的subprocess.Popen...
我试图使用svnmerge.py来合并一些文件.底下它使用python,当我使用它时,我得到一个错误 - "系统找不到指定的文件".工作中的同事正在运行相同版本的svnmerge. ...
- 使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
文章目录: 1 准备环境 2 调用`Cython库包`把python的`.py`文件生成`.so`文件 2.1 写源码文件 2.2 调用源码接口 2.3 调用Cython库把`.py`源码生成`.so ...
- makefile 和shell文件相互调用
shell 文件内调用makefile文件: #!/bin/bash cd ctemplate-2.1 ./configure sudo make -f install cd ../ cd Templ ...
- Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略
Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略 目录
- Java如何通过WSDL文件来调用这些web service
下面我们来看Java如何通过WSDL文件来调用这些web service: 注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准, ...
- 在.c文件中调用cuda函数
在.c文件中调用cuda函数 2014-04-19 17:17 446人阅读 评论(0) 收藏 举报 分类: cuda编程(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. 问题描述:假设在 ...
- 帝国cms php sql,帝国CMS下在PHP文件中调用数据库类执行SQL语句实例
帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 例1:连接MYSQL数据库例子.(a.php) db_close(); //关闭MYSQL链接$empire=null; //注消操作类变量? ...
最新文章
- ORB特征提取算法分析与实现,算法分解
- 讀書收穫 The Untold Story of Milk, Ron Schmid
- linux 添加动态链接库路径
- python语言属于-python属于哪种语言
- 分类mysql_MySql分类
- 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
- Linux每个用户单独配置ssh,大神全面解读如何限制SSH用户访问Linux中指定的目录...
- python怎么去掉换行符_python去除字符串中的换行符
- python 在线培训费用-线下python培训要多少钱?
- Spring子项目了解
- 1597: [Usaco2008 Mar]土地购买 斜率优化
- packet协议源码解析
- python存储数据到mysql--针对dataframe格式下的
- 【7 kyu】Descending Order
- java 模拟天眼查登陆,scrapy,我想模拟登陆天眼查网站,那个网站要滑动对齐验证,我能怎么办才能模拟登陆成功呢?...
- Plugin工具类-Unreal4源码拆解-UnrealBuildTool功能流程解析
- SPSS MODELER笔记1----数据基本处理和整体方法概念
- 关于Windows系统问题
- Scala class和case class的区别
- 【计组】设计大型DMP系统--《深入浅出计算机组成原理》(十四)