深圳创业板上市条件在编写Linux驱动过程中,不可避免涉及外设操作,而外设地址空间与DDR地址空间一般不连续,在linux上电时,并不会为外设地址空间建立页表,又因为linux访问内存使用的都是虚拟地址,因此如果想访问外设的(一般包括数据寄存器、控制寄存器与状态寄存器),需要在驱动初始化中将外设所处的物理地址映射为虚拟地址,linux为应对该问题提供了较多接口,包括:ioremap/ioremap_wc/devm_ioremap/devm_ioremap_resource等,以应对不同的场景需求,本文即阐述这些接口的使用,以及需要注意的区别。
在系统运行时,外设IO资源的物理地址是已知的,由硬件的设计决定(参考SOC的datesheet,一般会有memorymap)。驱动程序不能通过物理地址访问IO资源,必须将其映射到内核态的虚拟地址空间(通过页表)[1],然后根据映射所得到的内核虚拟地址范围,通过线性偏移(virt_addr = virt_base + phy_addr - phy_base)访问这些IO内存资源。
API接口中的res_cookie参数是需要映射的物理地址,size参数是需要映射的内存大小,单位是Byte。不需要考虑物理地址的页对齐问题,底层通过PAGE_ALIGN接口完成了页对齐。
不论采用以上哪种映射方式,解映射为统一接口,其中iomem_cookie参数为映射后的虚拟地址。
我们已经知道如何映射和解映射虚拟内存,内存映射是为了访问,理论上这时候可以像读写RAM那样直接通过虚拟地址指针读写IO内存资源,但是为了保证驱动程序跨平台的可移植性【这一点还不太理解,直接指针操作怎么影响的移植性,望大家指教】,我们应该采用linux中特定的接口函数来访问IO内存[1]。常用接口如下:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。侵权投诉
被划分为多个区域,每个区域有不同的作用,包括内核空间、用户空间、缓存、交换分区等。
。讨论的内容包括可测量的通用参数,其中涉及散射参数(S参数)的概念。还对一些射频基本知识,如传输线和史密斯原图进行回顾。
本帖最后由 eehome 于 2013-1-5 09:48 编辑 步进电机
6.4.2n型和p型SiC的欧姆接触6.4金属化第6章碳化硅器件工艺《碳化硅技术
——生长、表征、器件和应用》往期内容:6.4.1.2SiC上的肖特基接触∈《碳化硅技术
策略,答案也是非常简单,当当前的执行环境不允许睡眠的时候就不能睡眠,比如说中断,当前可以睡眠的时候就可以睡 眠等待,比如进程的
要点掌握电磁波的多种传播途径在规划和建设一个移动通信网时从频段的确定频率
|