嵌入式培训教程-linux驱动开发_第1页
嵌入式培训教程-linux驱动开发_第2页
嵌入式培训教程-linux驱动开发_第3页
嵌入式培训教程-linux驱动开发_第4页
嵌入式培训教程-linux驱动开发_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AnEmbeddedLinuxTech.ProviderinMainland基于ARM的嵌入式linux驱嵌入式linux系统下驱动简述异常处理机制设计 AnEmbeddedLinuxTech.ProviderinMainland嵌入式linux驱动简 区分系统调用和设备驱动 序 程这样在应用程序看来,硬件设备只是一个设备文件,序 AnEmbeddedLinuxTech.ProviderinMainland 设备驱动程序是内核的一部分,它主要完成以下功能把数据从内核传送到硬件和从硬 数据检测和处理设备出现的错误 AnEmbeddedLinuxTech.ProviderinMainland字符设备,块设备和网络设备的主要区别 AnEmbeddedLinuxTech.ProviderinMainland网络设备是linux下特殊设备的典型,此类设备在dev下主次设备号,态,抢先式 AnEmbeddedLinuxTech.ProviderinMainland NO_VERSION

charkernel_version[]=可少.最好,驱动程序的开头能包含<linux/config.h>; AnEmbeddedLinuxTech.ProviderinMainland,如,close....,注意,不是fopen,fread,但是如何把系统调用和驱动程序关联起来呢structfile_operations AnEmbeddedLinuxTech.ProviderinMainlandstructfile_operations

*,

*,

*,

*,

}

AnEmbeddedLinuxTech.ProviderinMainland这个结构的每一个成员的名字都对应着一个系统调程序,然后这个数据结构相应的函数指针,接着把控制权这是linux下设备驱动程序工作的基本原相当简单,不是吗 AnEmbeddedLinuxTech.ProviderinMainland一些常见的问题 AnEmbeddedLinuxTech.ProviderinMainland异常或中断形态异常处理函数设计可重入中断设计 AnEmbeddedLinuxTech.ProviderinMainland异常或中断是用户程序中最基本的一种执行流程或DataAbortPrefetchUndefined

。 AnEmbeddedLinuxTech.ProviderinMainland跳转范围硬件处理软件处理 AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland其中FIQ_Handler()可以直接从地址0x1C处开始,省下一条跳ARM的跳转指令(B)是有范围限制的(±32MB),但很多况下不能保证所有的异常处理函数都定位在向量表的32MB围内,需要大于32MB长跳转,而且因为向量表空间的限制 AnEmbeddedLinuxTech.ProviderinMainland2.把目标地址直接赋给PC寄存器MOVPC,MOVPC, 是合法的,因为 可以过0x03循环右移4位而得到而MOVPC, 就 指令 AnEmbeddedLinuxTech.ProviderinMainland 器单元上的32位数据传送给PC来实现跳转。LDRPC, 器单元必须在当前指令的±4KB空间范围内 水线中指令预取对PC值的影响,以图-2的情况为例:offset=addresslocation–vectoraddress–pipelineeffect=0xFFC–0x4–= AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland异常分支问题的提出ARM内核只有二个外部中断输入信号nFIQ和但对于一个系统来说,中断源可能多达几十个 AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland异常发生时处理器的动作异常返回ARM编译器对异常处理函数实现的扩展软中断处理 AnEmbeddedLinuxTech.ProviderinMainland任何一个异常发生并得到响应时,ARM核自动完注意当响应异常后,不管异常发生在ARMThumb进入ARM拷贝CPSRSPSR_<mode>设置适当的CPSR位:改变处理器状态进入ARM AnEmbeddedLinuxTech.ProviderinMainland进入异常处理程序以后,用户可以完全按照自己的意愿来进行程序设计,包括调用Thumb状态的函数,等等。特别注意,清中断 AnEmbeddedLinuxTech.ProviderinMainland 寄存器的恢复、状态寄存器的恢复以及PC指针的恢复。的恢复可以通过一条指令来实现,下面是3个例子:MOVSpclr或SUBSpclr4或LDMFDsp!这几条指令都是普通的数据处理指令,特殊之处就是把PC寄 CPSR的拷贝,达到恢复状态寄存器的目的。 AnEmbeddedLinuxTech.ProviderinMainland定是正确的中断返回地址下面,透过一个简单指令的流水作业来详细说 AnEmbeddedLinuxTech.ProviderinMainland3.在ARM架构里,PC值指向当前执行指令的地址加8处。也就是说,当执行指令A(地址0x8000)时,PC等于指令C的地址(0x8008)。假如指令A是BL指令,则当执行时,会把PC(=0x8008)保存到LR寄存器里面,但是接下去处理器会马上对LR进行一个自动的调整动作:LR=LR-0x4。这样,最终保存在LR里面的是B指令的地址,所以当从BL返回时,LR里面正同样的调整机制在所有LR自动保存操作中都存在 AnEmbeddedLinuxTech.ProviderinMainland4.对不同异常类型的返回地址比较存的地址,所以只要直接把LR恢复给PC。如果发生的是IRQ或FIQ等指因为外部中断请求中断了B令的执行,当中断返回后,需要需要把LR减4。。 AnEmbeddedLinuxTech.ProviderinMainlandARM编译器的函数扩IRQ_HandlerSTMFDSP!,{R0-R12,LR}BLIrqHandlerLDMFDSP!,{R0-R12,LR}SUBSPC,LR,#4

进入普通处理函数,C或 AnEmbeddedLinuxTech.ProviderinMainlandARM编译器的函数扩 且自动加入对LR进行减4的处理,符合IRQ和FIQ中断处理的 irqvoidIRQ_Handler AnEmbeddedLinuxTech.ProviderinMainland AnEmbeddedLinuxTech.ProviderinMainland2.在C程序中调用软件中断需要用到编译器的扩展功能,使用关键字swi来中断函数。注意软中断号码同时在函数 swi(0x24)voidmy_swi这样当调用函数my_swi的时候,就会用SWI0x24来代替普通的函数调用BLmy_swi。 AnEmbeddedLinuxTech.ProviderinMainland3.软中断指令的编码格式 AnEmbeddedLinuxTech.ProviderinMainland4.需要注意的一点是当SWI指令的执行状态不同时,其指令地址间隔不一样,如果进入SWI执行前是在ARM状态下,需要通过LR-4来获得SWI指令地址,如果是在Thumb状态下进入 AnEmbeddedLinuxTech.ProviderinMainland1.缺省情况下ARM中断是不可重入的,因为一旦进入异常响应状态,ARM自动关闭中断使能。套,显然新的异常处理将破坏原来的中断现场而导致关键问题如LR_irq和SPSR_irq等,这一点容易想到也容易做到;.中断处理过程中对BL的保护 AnEmbeddedLinuxTech.ProviderinMainlandSTMFDSTMFDSP!,{R0-R3,…LDMFDSP!,{R0-R3,ADD……

AnEmbeddedLinuxTech.ProviderinMainland3.程序Foo()无法正确返回中断是在指令流BLFooSTMFDSP{R0-R3LR}执行过程中插入的,完成跳转操作后,进行流水线刷新,最后LR_irq保存的是STMFD后面一条指令的地址;这样当新中断利用(PC=LR-4)操作返回时,正好可以继续原来的流程执行STMFD指令。这二次对LR_irq的操作发生了,当新中断返回后往下执行STMFD指令,这时候压栈的LR已不是原来需要的ADD指令的地址,从而使子程序Foo()无法正确返回。 AnEmbeddedLinuxTech.ProviderinMainland4.这个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论