- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内核驱动设计入门-模块方式驱动实验
一、实验目的
学习在LINUX下进行驱动设计的原理
掌握使用模块方式进行驱动开发调试的过程
二、实验内容
在PC机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。
三、预备知识
有C语言基础。
掌握在Linux下常用编辑器的使用。
掌握Makefile 的编写和使用。
掌握Linux下的程序编译与交叉编译过程。
有驱动开发的基本知识。
四、实验设备及工具
硬件:PC机Pentium 500以上, 硬盘40G以上,内存大于128M。
软件:PC机操作系统REDHAT LINUX 9.0 +MINICOM + AMR-LINUX开发环境
五、实验原理
Linux中的驱动设计是嵌入式Linux开发中十分重要的部分,它要求开发者不仅要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口关系、考虑系统中对设备的并发操作等等,而且还要非常熟悉所开发硬件的工作原理。这对驱动开发者提出了比较高的要求,这个实验主要是给大家进入驱动设计提供一个简单入门的一个实例,并不需要提供太多与硬件相关的内容,这部分应该是通过仔细阅读芯片厂家提供的资料来解决。
驱动程序的作用是应用程序与硬件之间的一个中间软件层,驱动程序应该为应用程序展现硬件的所有功能,不应该强加其他的约束,对于硬件使用的权限和限制应该由应用程序层控制。但是有时驱动程序的设计是跟所开发的项目相关的,这时就可能在驱动层加入一些与应用相关的设计考虑,主要是因为在驱动层的效率比应用层高,同时为了项目的需要可能只强化或优化硬件的某个功能,而弱化或关闭其他一些功能;到底需要展现硬件的哪些功能全都由开发者根据需要而定。驱动程序有时会被多个进程同时使用,这时我们要考虑如何处理并发的问题,就需要调用一些内核的函数使用互斥量和锁等机制。
驱动程序主要需要考虑下面三个方面:提供尽量多的选项给用户,提高驱动程序的速度和效率,尽量使驱动程序简单,使之易于维护。
Linux的驱动开发调试有两种方法,一种是直接编译到内核,再运行新的内核来测试;二是编译为模块的形式,单独加载运行调试。第一种方法效率较低,但在某些场合是唯一的方法。模块方式调试效率很高,它使用insmod工具将编译的模块直接插入内核,如果出现故障,可以使用rmmod从内核中卸载模块。不需要重新启动内核,这使驱动调试效率大大提高。我们的实验在PC机和UP-NETARM2410-S上都可以运行,编译时使用不同的编译器就可以了。
1.驱动程序与应用程序的区别
应用程序一般有一个main函数,从头到尾执行一个任务;驱动程序却不同,它没有main函数,通过使用宏module_init(初始化函数名); 将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止等待被应用软件调用。驱动程序中有一个宏moudule_exit(退出处理函数名)注册退出处理函数。它在驱动退出时被调用。
应用程序可以和GLIBC库连接,因此可以包含标准的头文件,比如stdio.h stdlib.h,在驱动程序中是不能使用标准C库的,因此不能调用所有的C库函数,比如输出打印函数只能使用内核的printk函数,包含的头文件只能是内核的头文件,比如linux/module.h。
2.内核版本与编译器的版本依赖
当模块与内核链接时,insmod会检查模块和当前内核版本是否匹配,每个模块都定义了版本符号__module_kernel_version,这个符号位于模块文件的ELF头的.modinfo段中。只要在模块中包含linux/module.h,编译器就会自动定义这个符号。
每个内核版本都需要特定版本的编译器的支持,高版本的编译器并不适合低版本的内核,比如UP-NETARM2410-S实验仪中的LINUX-2.4.19的内核需要2.95.3的GCC版本编译器。Linux-2.4版本的insmod 命令装载模块时,首先从/lib/modules目录和内核相关的子目录中查找模块文件,如果需要从当前目录装载,使用insmod module.o。
3.主设备号和次设备号
传统方式中的设备管理中,除了设备类型外,内核还需要一对称作主次设备号的参数,才能唯一标识一个设备。主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。比如PC机中的IDE设备,一般主设备号使用3,WINDOWS下进行的分区,一般将主分区的次设备号为1,扩展分区的次设备号为2、3、4,逻辑分区使用5、6….。
设备操作宏MAJOR()和MINOR()可分别用于获取主次设备号,宏MKDEV()用于将主设备号和次设备号合并为设备号,这些宏定义在include/linux/
您可能关注的文档
- (新课标人教版)生物必修二:5-2-2染色体变异教学.ppt
- (一)防艾试卷答案分析.doc
- (一)内脏运动神经:支配平滑肌、心肌和腺体,其 纤维成分 …教学.ppt
- (已读)第二章按钮编辑框复选框分析.doc
- (用)细胞的生命历程_第1节细胞增殖教学.ppt
- (整理后的)计算机控制系统复习题答案分析.doc
- (中英文对照版)外商投资产业指导目录 2011年版分析.doc
- (必威体育精装版最全)2012年高考试题+模拟新题分类汇编专题8 稳态与脊椎动物生命活动的调节分析.doc
- )上(定鉴法司论分析.doc
- ++HW 神经外科医院获得性感染教学.ppt
- DB32T3444 健康企业评估规范.pdf
- DBJ25-82-2000 甘肃省聚苯板外保温墙体设计与施工规程 甘肃省地方标准.pdf
- DB32T-核与辐射突发事件卫生应急处置技术规范 第3部分:现场流行病学调查及编制说明.pdf
- DB44T1430-2014 冷冻水产品流通冷链管理技术规范.pdf
- TCASME-监控系统安装与维护规范.pdf
- TCSAE-汽车远程升级(OTA)信息安全测试规范.pdf
- TJSSAE-智能网联汽车开放道路测试管理要求及编制说明.pdf
- TEERT-挥发性有机物污染治理设施工况自动监控技术规范.pdf
- TCASME-三跨连续节段梁悬浇施工技术规范.pdf
- DB36T-行政执法案卷评查规范编制说明.pdf
最近下载
- (完整版)初三化学方程式大全.pdf
- 卫健委临检中心 15项临床检验质量控制指标——解读与应用.pptx VIP
- GB/T 14165-2008_金属和合金 大气腐蚀试验 现场试验的一般要求.pdf
- NB∕T11502-2024光伏光热一体组件和空气源热泵联合热水系统通用技术条件.pdf
- 抖音粉丝群体数据分析报告.pptx
- 【国家标准】QBT 3826-1999 轻工产品金属镀层和化学处理层的耐腐蚀试验方法 中性盐雾试验(NSS)法.pdf
- 足部特效反射区疗法一览表 附足底穴位图.doc
- 按次收费合同5篇.docx VIP
- 棋类运动协会章程.docx
- 口腔科的2024年工作总结6篇.docx VIP
文档评论(0)