嵌入式linux驱动开发实例分析new

嵌入式linux驱动开发实例分析new

ID:34388474

大小:560.80 KB

页数:21页

时间:2019-03-05

嵌入式linux驱动开发实例分析new_第1页
嵌入式linux驱动开发实例分析new_第2页
嵌入式linux驱动开发实例分析new_第3页
嵌入式linux驱动开发实例分析new_第4页
嵌入式linux驱动开发实例分析new_第5页
资源描述:

《嵌入式linux驱动开发实例分析new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Thesuccess'sroad嵌入式嵌入式LLinuxinux驱动开驱动开发简介发简介华清远见主主要内容要内容vLinux内核与驱动的关系vLinux内核中驱动的分类v驱动开发的两前题:模块、节点vLinux下驱动程序的基本框架vLinux下驱动程序的调试方法vLinux中驱动编程的高级接口华清远见LLiinuxnux设备驱动的概念设备驱动的概念v驱动程序为硬件提供一个定义良好的内部接口v驱动程序封装了硬件细节v驱动程序为应用程序提供了访问设备的机制华清远见设设备驱备驱动动健壮性健壮性和和安全性安全性v驱动程序是内核的一部分v驱动程序

2、的漏洞和缺陷直接危及内核v留心未初始化的指针,恶意用户程序,缓冲区溢出华清远见驱驱动程动程序序与内核与内核的的关系关系v字符设备驱动与块设备驱动由内核中的文件系统来管理v网络设备驱动由内核中的协议栈来管理华清远见LLinuxinux设设备备和模块和模块的的分类分类v设备和模块的分类:字符设备,块设备,网络接口以及提供公共服务的特定类型设备Ø例如Dma驱动Ø系统时钟驱动Ø终端控制器驱动华清远见LLinuxinux下下构建构建和和运行运行模块模块v为什么用模块?v模块和应用程序有什么不同v#ifdef__KERNEL__v#ifdefMOD

3、ULEvKernel和userspace华清远见模模块的编块的编译译和装和装载载v编译模块都需要什么v编译模块相关的宏v模块工具insmod,rmmod华清远见LLinuxinux驱驱动动程序模块程序模块加载加载华清远见设设备访问备访问--设备设备节点节点vmknod创建设备文件v字符设备文件例子vcrw-rw----1rootuucp4,642005-03-2003:36/dev/ttyS0v主设备号区分设备驱动程序v用户程序调用openclose等操作,内核根据主设备号找到对应的驱动程序设设备访问备访问--主设备主设备号号和和次次设

4、备设备华清远见号号v次设备号区分同一个驱动程序创建的多个设备v常见于多个串口,硬盘分区等v次设备号通常依次对应同类型多个设备主设备号次设备号hda131hda232hda333华清远见设设备驱备驱动动的框架的框架v设备的注册-驱动程序的开始v注册的结构体v注册的fop指针华清远见三三类设类设备备驱动程驱动程序的序的结构结构框架框架v字符设备驱动框架v块设备驱动框架v网络设备驱动框架华清远见设设备驱备驱动动程序的程序的调调试方法试方法vPrintk/printasciivkgdbv看系统崩溃信息v用硬件调试器v使用proc或sysfs文件

5、系统华清远见设设备驱备驱动动高级接口高级接口--内内存存管理管理vkmallocvslabv基于页的内存分配vvmallocvBootmem的分配华清远见内内核内核内存存分分配配v内核程序员获得内存的方法kmalloc,使用方法类似于用户空间的malloc版本vkmalloc传递不同标志,导致该函数的不同行为ØGFP_KERNELØGFP_ATOMICØGFP_USERØ__GFP_DMA华清远见后后备高备高速速缓缓存存v设备驱动程序如果常常反复使用同样大小的内存块,可以自己创建一个内存池v在大量使用固定大小内存块,使用后备高速缓存比k

6、malloc更快速,同时也节省空间v/proc/slabinfo入口提供内存池的状态信息,方便我们跟踪华清远见分分页页式式内内存存v当需要在驱动程序中使用大块的内存,直接使用面向页的内存分配方式比较适合v使用get_free_page函数族申请整数倍于页大小的内存空间vfree_page函数用来释放不用的页面v分配、释放多个页面时,传递的参数为order,表示2的order次幂个页面华清远见VVmmaallllococ和和相相关关函数函数vvmalloc函数用来分配虚拟地址空间的连续区域vvmalloc函数获得的连续虚拟地址空间在物理地

7、址上可能是不连续的vvmalloc函数获得的地址是平台相关的华清远见内核内核引引导导时时的内的内存存分分配配v如果需要连续的大块内存区域,就需要在内核引导时分配v使用引导时分配的方式跳过了linux内存管理,直接保留需要的内存区域v调用alloc_bootmem函数族可以在boottime分配大块的连续区域,绕过了get_free_page等函数对分配内存大小的限制成功之路www.www.FFaarrSSiighghtt..ccoomm..cncn谢谢谢!谢!

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。