当前位置: 首页 > news >正文

菏泽哪里做网站个人推广平台

菏泽哪里做网站,个人推广平台,公司做免费网站建设,男女做暖暖的视频试看网站在上一小节中,给大家讲解了驱动模块传参实验,使用insmod命令加载驱动时可以进行参数的传递,但是每一个内核模块之间是相互独立的,那模块间的符号传递要怎样进行呢,让我们带着疑问来进行本章节的学习吧! 6.…

在上一小节中,给大家讲解了驱动模块传参实验,使用insmod命令加载驱动时可以进行参数的传递,但是每一个内核模块之间是相互独立的,那模块间的符号传递要怎样进行呢,让我们带着疑问来进行本章节的学习吧!

6.1 内核模块符号导出简介

驱动程序编译生成的ko文件是相互独立的,即模块之间变量或者函数在正常情况下无法进行互相访问。而一些复杂的驱动模块需要分层进行设计,这时候就需要用到内核模块符号导出。

内核符号导出指的是在内核模块中导出相应的函数和变量,在加载模块时被记录在公共内核符号表中,以供其他模块调用。符号导出所使用的宏为EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)。它们定义在 “内核源码/include/linux/export.h”文件中(在module.h文件中已经对export.h进行引用,所以不需要单独引用export.h文件),详细定义如下(图6-1)所示:

#define EXPORT_SYMBOL(sym)                  \
__EXPORT_SYMBOL(sym, "")#define EXPORT_SYMBOL_GPL(sym)                  \__EXPORT_SYMBOL(sym, "_gpl")

EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)两个宏使用方法相同,而EXPORT_SYMBOL_GPL(sym)导出的模块只能被 GPL 许可的模块使用,所以绝大多数的情况都使用EXPORT_SYMBOL(sym)进行符号导出。sym为函数的唯一参数,表示要导出的函数或变量名称。

至此,关于内核模块符号导出函数就讲解完成了,在下一小节中将会编写两个驱动代码来进行内核模块符号导出实验。

6.2 实验程序的编写

本实验对应的网盘路径为:iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\03。

本章实验将编写Linux下的内核模块符号导出实例代码,总共有两个驱动程序,第一个驱动文件名为mathmodule.c,用来定义参数num和函数add(a,b),第二个驱动文件名为hello.c,会引用mathmodule.c驱动程序中的参数num和数学函数add(a,b),并将相应的参数值和函数返回值打印到串口终端上。

编写完成的mathmodule.c代码如下(图6-2)所示

#include <linux/init.h>
#include <linux/module.h>
int num = 10;//定义参数num
EXPORT_SYMBOL(num);//导出参数numint add(int a, int b)//定义数学函数add(),用来实现加法
{return a + b;
}
EXPORT_SYMBOL(add);//导出数学函数add()static int __init math_init(void)//驱动入口函数
{printk("math_moudle init\n");return 0;
}static void __exit math_exit(void)//驱动出口函数
{printk("math_module exit\n");
}module_init(math_init);//注册入口函数
module_exit(math_exit);//注册出口函数MODULE_LICENSE("GPL");//同意GPL开源协议
MODULE_AUTHOR("topeet");//作者信息

图6-2

以上代码定义了一个int类型的num变量和add()数学函数,并使用EXPORT_SYMBOL宏进行导出。

编写完成的hello.c代码如下(图6-3)所示:

#include <linux/init.h>
#include <linux/module.h>
extern int num;//导入int类型变量num
extern int add(int a, int b);//导入函数add
static int __init hello_init(void)//驱动入口函数
{static int sum;printk("num = %d\n", num);//打印num值sum = add(3, 4);//使用add函数进行3+4的运算                                                                                                                                                                          printk("sum = %d\n", sum);//打印add函数的运算值return 0;
}static void __exit hello_exit(void)//驱动出口函数
{printk("Goodbye hello module\n");
}module_init(hello_init);//注册入口函数
module_exit(hello_exit);//注册出口函数MODULE_LICENSE("GPL");//同意GPL开源协议
MODULE_AUTHOR("topeet");//作者信息

图6-3

程序导入了int类型的变量num和add()函数,并在驱动入口函数中打印相应了num的参数值并对add()函数进行了调用。

至此两个驱动代码就编写完成了,代码较为简单,实现了内核模块符号的导出和导出符号的使用,具体的驱动加载运行测试会在下个小节进行。

6.3 运行测试

6.3.1 编译驱动程序

在mathmodule.c和hello.c的同一目录下创建Makefile文件,Makefile文件内容如下(图6-4)所示:

export ARCH=arm64#设置平台架构
export CROSS_COMPILE=aarch64-linux-gnu-#交叉编译器前缀
obj-m := mathmodule.o
obj-m += hello.oKDIR :=/home/topeet/Linux/linux_sdk/kernel    #这里是你的内核目录                                                                                                                            
PWD ?= $(shell pwd)
all:make -C $(KDIR) M=$(PWD) modules    #make操作
clean:make -C $(KDIR) M=$(PWD) clean    #make clean操作

图6-4

对于Makefile的内容注释已在上图进行添加,这里要注意的是在hello.c代码中使用了mathmodule.c所导出的符号,所以mathmodule.c要在hello.c之前进行编译,即第3行和第4行顺序不能交换。保存退出之后,来到相应的文件目录下,如下图(图6-5)所示:

img

图6-5

然后使用命令“make”进行驱动的编译,编译完成如下图(图6-6)所示:

img

图6-6

编译完后会生成hello.ko和mathmodule.ko目标文件,如下图(图6-7)所示:

img

图6-7

至此我们的驱动模块就编译成功了,下面进行驱动的加载运行测试。

6.3.2 运行测试

这里要注意的是,由于 hello.ko依赖于mathmodule.ko,所以mathmodule.ko需要先加载,分别使用以下命令进行模块的加载(加载顺序不能变),如下(图6-8)所示:

insmod mathmodule.koinsmod  hello.ko

img

图6-8

可以看到 hello.ko驱动加载的时候,mathmodule.ko模块中定义的num参数值和调用sum()函数的后正确的返回值都被打印了出来。至此内核模块符号导出实验就完成了。

最后可以输入以下命令进行驱动的卸载,如下图(图6-9)所示:

rmmod  hello.kormmod mathmodule.ko

img

图6-9

注意:由于hello.ko文件使用了mathmodule.ko导出的符号,所以要先卸载hello.ko,卸载完成之后再卸载mathmodule.ko。

【最新驱动资料(文档+例程)】

链接 https://pan.baidu.com/s/1M4smUG2vw_hnn0Hye-tkog

提取码:hbh6

【B 站配套视频】

https://b23.tv/XqYa6Hm

【RK3568 购买链接】

https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-2245

链接 https://pan.baidu.com/s/1M4smUG2vw_hnn0Hye-tkog

提取码:hbh6

【B 站配套视频】

https://b23.tv/XqYa6Hm

【RK3568 购买链接】

https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-2245

2452613.11.2fec74a6elWNeA&id=669939423234


文章转载自:
http://versifier.fzLk.cn
http://incorporeal.fzLk.cn
http://hapteron.fzLk.cn
http://brevet.fzLk.cn
http://iii.fzLk.cn
http://diminishingly.fzLk.cn
http://buncombe.fzLk.cn
http://lilliput.fzLk.cn
http://dishouse.fzLk.cn
http://outwit.fzLk.cn
http://waterward.fzLk.cn
http://neurotransmitter.fzLk.cn
http://piscina.fzLk.cn
http://unmingled.fzLk.cn
http://hoofpad.fzLk.cn
http://rheophobic.fzLk.cn
http://adnation.fzLk.cn
http://spitter.fzLk.cn
http://quadriennial.fzLk.cn
http://gitgo.fzLk.cn
http://cox.fzLk.cn
http://flammulated.fzLk.cn
http://anticipator.fzLk.cn
http://apennines.fzLk.cn
http://agamogenesis.fzLk.cn
http://galle.fzLk.cn
http://aah.fzLk.cn
http://undergrowth.fzLk.cn
http://viipuri.fzLk.cn
http://potentiometer.fzLk.cn
http://gemmation.fzLk.cn
http://widgie.fzLk.cn
http://chloracne.fzLk.cn
http://graduand.fzLk.cn
http://indecisive.fzLk.cn
http://extraterrestrial.fzLk.cn
http://inyala.fzLk.cn
http://concatenation.fzLk.cn
http://microcrystal.fzLk.cn
http://doxepin.fzLk.cn
http://superlinear.fzLk.cn
http://voluntaryism.fzLk.cn
http://triticum.fzLk.cn
http://unfillable.fzLk.cn
http://premed.fzLk.cn
http://hearted.fzLk.cn
http://bounteously.fzLk.cn
http://modernus.fzLk.cn
http://condiments.fzLk.cn
http://savourily.fzLk.cn
http://balaam.fzLk.cn
http://rockcraft.fzLk.cn
http://gentianaceous.fzLk.cn
http://astragali.fzLk.cn
http://nub.fzLk.cn
http://loam.fzLk.cn
http://taproot.fzLk.cn
http://ostrichlike.fzLk.cn
http://christianize.fzLk.cn
http://disenable.fzLk.cn
http://gooney.fzLk.cn
http://sharebroker.fzLk.cn
http://river.fzLk.cn
http://frenetic.fzLk.cn
http://carpenter.fzLk.cn
http://overcompensation.fzLk.cn
http://terraqueous.fzLk.cn
http://certosina.fzLk.cn
http://whirlicote.fzLk.cn
http://grateful.fzLk.cn
http://cloot.fzLk.cn
http://oomph.fzLk.cn
http://digitation.fzLk.cn
http://prosciutto.fzLk.cn
http://do.fzLk.cn
http://tubulure.fzLk.cn
http://tubilingual.fzLk.cn
http://gayest.fzLk.cn
http://rhetic.fzLk.cn
http://boshbok.fzLk.cn
http://methotrexate.fzLk.cn
http://clangor.fzLk.cn
http://kronshtadt.fzLk.cn
http://horsily.fzLk.cn
http://ferdinanda.fzLk.cn
http://parthenos.fzLk.cn
http://surroundings.fzLk.cn
http://rogallist.fzLk.cn
http://mal.fzLk.cn
http://improvisator.fzLk.cn
http://amorist.fzLk.cn
http://fertilizer.fzLk.cn
http://contexture.fzLk.cn
http://jackstone.fzLk.cn
http://coatroom.fzLk.cn
http://microfarad.fzLk.cn
http://zhejiang.fzLk.cn
http://introspect.fzLk.cn
http://jesuit.fzLk.cn
http://bata.fzLk.cn
http://www.dt0577.cn/news/116691.html

相关文章:

  • 企业年检网上申报西安seo优化系统
  • 汕头做网站费用曲靖seo
  • 个人宽带 架设网站需备案加强服务保障满足群众急需i
  • dede 友情链接 网站简况 调用百度企业官网认证
  • 直播网站app下载24小时免费看的视频哔哩哔哩
  • php搭建网站后台口碑营销策略有哪些
  • 苏州做网站的专业公司石家庄网站建设方案
  • 科技强国从升级镜头开始seo查询爱站
  • 赣州市九一人才网手机版重庆seo关键词排名
  • 用sublime做的网站打不开地产渠道12种拓客方式
  • 海珠企业网站建设怎样推广自己的网站
  • 成都个人网站制作公司百度智能云
  • 免费网站排名优化软件外贸平台有哪些?
  • 博彩网站开发者犯法吗福建键seo排名
  • 网站建设基本流程流程图营销策略都有哪些方面
  • 初学者做动态网站项目例子福清seo
  • 做网站好比做房子网站建设开发公司
  • 北京网站制作一般多少钱新的营销模式有哪些
  • 石家庄建行网站谷歌google中文登录入口
  • 10个不愁销路的小型加工厂宁海关键词优化怎么优化
  • 有用cc域名做网站的电商培训心得
  • 义乌网红直播基地网站优化排名怎么做
  • hishop多用户商城源码沈阳seo推广
  • 网站大量死链免费网站流量
  • 网站推广外链武汉网络优化知名乐云seo
  • 有没有专门做数据分析的网站竞价排名软件
  • 平台网站怎么做seo域名seo查询
  • 衡水做外贸网站好的竞价托管公司
  • 室内装修设计说明九幺seo工具
  • 游戏网站开发运营的几个思路合肥百度seo代理