




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.1,Linux内核模块编程,2,主要参考文献,Linux设备驱动开发详解(第2版)宋宝华人民邮政通信出版社编辑。3,主要参考文献,Linux设备驱动程序(第三版)魏永明耿悦等站中国电力出版社。4,主要参考文献,精通Linux驱动程序开发 Sreekrishnan编辑人民邮件和通信出版社。5,可以加载内核模块,为了更灵活地扩展系统功能,Linux支持内核的动态扩展,即在系统运行时向内核添加新功能(即模块模块模块模块模块模块)。模块是可以动态连接的目标代码(.ko),可以通过insmod命令动态装载并链接到运行的内核。连接后,它将成为内核的一部分,直到您使用rmmod命令取消链接并卸载它。Linux驱动程序是一个特殊的内核模块。6,内核模块与应用程序不同,内核模块在内核空间(supervisorspace)上运行,应用程序使用“事件驱动模型”,该模型是由多个回调函数组成的“手动”代码集。应用程序始终从头到尾执行单个任务。内核模块不能调用c标准库(glibc库),只能调用从Linux内核导出的内核函数。内核模块在编程时必须考虑到可重用(reentrant)内核模块可用的堆栈较小(通常仅4096字节)。7,配置内核模块程序源代码,8,最简单的kernelmodule,# include # include module _ license( dual BSD/GPL );static int _ _ init hello _ init(void)/这是模块加载函数printk (kern _ alert hello,world n )Return0 static void _ _ exit hello _ exit(void)/卸载模块函数printk (kern _ alert goodbye,cruel world module _ init(hello _ init);module _ exit(hello _ exit);9,通过模块加载函数、insmod或modprobe命令加载内核模块时,模块的加载函数将由内核自动运行,以完成模块的相关初始化任务。通常(1)将某些数据结构注册到内核;(二)硬件和软件资源申请;(3)初始化硬件模块加载函数必须指定为返回整数值的“module_init”宏。初始化成功时返回0,失败时返回负值作为错误代码。 _init 和 _exit 都是要求编译器将使用gcc的扩展关键字声明的函数的目标代码放在 init.text 和 exit.text 部分(两个特殊ELF段)中的宏。Static关键字用于控制此文件中函数名的可见性。# define _ _ init _ _ attribute _ _(_ _ section _( . init . text )# define _ _,10,module _ init后面的秘密,# define module _ init(x)_ _ init call(x);# define _ _ init call(fn)device _ init call(fn)# define device _ init call(fn)_ _ defineinitcall level 。init)=fn因此,Module_init(x)是statcinit call _ t _ _ init call _ # # fn # # id _ _ usesinitcall level 。init)=fnitcall _ t是指向函数的指针类型typedefint(*initcall_t)(void),因此默认情况下,module_init将函数指针变量设置为.放置在initcall6.initELF部分。11,executableandlinkingformat,12,卸载模块函数,卸载模块函数必须指定为不带返回值的“module_exit”宏。通过Rmmod命令卸载模块时,模块的卸载函数将由内核自动运行,以完成与模块装载函数相反的功能。(注销某些内核数据结构并释放资源等)。,13,内核打印函数printk,printk(fmt,args)级别KERN_EMERG用于紧急消息,通常是崩溃前消息。KERN_ALERT是需要立即采取行动的情况。KERN_CRIT与严重情况、严重硬件或软件故障相关。KERN_ERR用于报告错误情况。设备驱动程序经常使用KERN_ERR出现不会导致严重系统问题的硬件故障。报告KERN_WARNING的警告。KERN_NOTICE正常,但仍值得注意。此级别的某些安全相关情况是。KERN_INFO报告基于信息的消息。在此级别,打印启动时发现的硬件的大量驱动程序信息。KERN_DEBUG用作调试消息。浮点数,14,printk消息流,可以在/etc/syslog.conf中配置syslogd的部署规则,例如kern .*/tmp/kernel _ debug . txt/proc/kernel/printk文件中设置了优先级。高于此优先级的消息可以显示在控制台中。15,模块许可证声明,模块许可证声音(MODULE_LICENSE)说明内核模块的许可证权限。如果不声明许可证,模块加载后,将在内核更改警告、16、内核模块编译条件、GCC工具链中安装并编译一个或多个内核源。内核模块程序在编译过程中使用内核源的头文件(include目录)和编译内核时生成的符号文件。17,编译内核模块,可以编写最简单的Makefile:obj-m :=hello.o,makec/lib/modules/$(shell uname-r,18,编译内核模块,如果要将名为module.ko的模块配置为两个源文件(例如,file1.c和file2.c),则可以编写makefile中的obj-m变量3360,如下所示:obj-m :=module . o module-objs :=file 1 . ofile 2 . o,19,加载和卸载内核模块,使用insmod命令或modprobe加载模块:insmod。/hello.ko,使用rmmod命令卸载模块:使用rmmodhello,lsmod命令查看有关内核中加载的内核模块的信息您还可以通过/proc/modules文件查看有关内核中加载的内核模块的信息。通过查看/sys/module目录,还可以查看有关内核中加载的内核模块的信息。Modprobe考虑要装载的模块是否引用当前内核中不存在的某些符号。如果存在这些引用,modprobe将在当前模块路径中搜索定义了这些符号的其他模块,并将这些模块装载到内核中。(/lib/modules modules . dep/ect/mod prob . conf),20,内核模块参数,module_param(参数名称、参数类型和参数读/写权限)内核支持以下模块参数类型:byte、short、ushort、int、uint、ulong、charp(文字指针)和bool。staticchar * whom= worldstatatic inthowmany=1;Module _ param (howmany,int,s _ irugo);Module _ param (whom,charp,s _ irugo);21,装载模块指定通过insmod或modprobe装载模块时可以传递的参数。您可以从insmod hello _ ext . ko how many=5 whom= students mod probe组态档案(/etc/modprobe.conf)中读取参数值,或。22,最简单的kernelmodule,/export.cintadd _ integer (inta,intb) returna b; intsub _ integer (inta,intb) returna-b; EXPORT _ SYMBOL(add _ integer);EXPORT _ SYMBOL(sub _ integer);exeternintadd _ integer (inta,intb);/import . cextern sub _ integer(inta,intb);static int _ _ init hello _ init(void)/这是模块加载函数printk (kern _ alert% d n ,_ _ init);Return0,要编译import.c,请编译export.c时生成的符号文件module.symvers,23,补充信息,模块声明和说明MODUL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全培训教师岗位证书课件
- 2025年榆林华源电力有限责任公司招聘(5人)模拟试卷及完整答案详解1套
- 2025春季中国电信实习生招聘模拟试卷含答案详解
- 2025年安徽皖信人力资源管理铜陵分公司招聘20人模拟试卷含答案详解
- 2025内蒙古鄂尔多斯市康巴什区青年就业见习计划招募模拟试卷及答案详解(名师系列)
- 2025国家农业农村部食物与营养发展研究所综合办公室助理招聘4人模拟试卷及答案详解(必刷)
- 小学劳动安全培训制度课件
- 2025河北邯郸冀南新区选聘农村党务(村务)工作者111人考前自测高频考点模拟试题及完整答案详解
- 2025年PCB制板项目合作计划书
- 2025年上海市金融稳定发展研究中心公开招聘工作人员考前自测高频考点模拟试题及1套完整答案详解
- 保险的销售合同(标准版)
- 电子元器件仓库管理规范
- 房屋安全知识培训资料课件
- 2025年第十七届广东省中学生天文知识竞赛试题(含答案)
- 小学生新能源汽车
- 2025年职业病诊断医师资格考试(职业性化学中毒)历年参考题库含答案详解(5卷)
- 2025年仓库保管工技师考试题库
- 肥胖患者体重管理护理查房
- (新教材)2025年秋期人教版一年级上册数学全册核心素养教案(教学反思无内容+二次备课版)
- 2025年音乐新课标试题及答案
- 黑龙江省合格考数学试卷
评论
0/150
提交评论