- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
A. 可重入函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误
在kernel/Resource.c中定义了全局变量ioport_resource和iomem_resource,分别描述基于I/O映射方式的I/O端口空间和基于内存映射方式的I/O内存资源空间(包括I/O端口和外设内存)。其定义如下:?
?struct?resource?ioport_resource? =??{?PCI?IO,?0x0000,?IO_SPACE_LIMIT,?IORESOURCE_IO?}
struct?resource?iomem_resource ?=?{?PCI?mem,?0?0xffffffff,?IORESOURCE_MEM?}
?其中,宏IO_SPACE_LIMIT表示整个I/O空间的大小,对于X86平台而言,它是0xffff(定义在include/asm-i386/io.h头文件中)。显然,I/O内存空间的大小是4GB。
●IO端口空间?的申请、检测、释放操作
基于I/O?Region的操作函数__XXX_region(),Linux在头文件include/linux/ioport.h中定义了三个对I/O端口空间进行操作的宏:①request_region()宏,请求在I/O端口空间中分配指定范围的I/O端口资源。②check_region()宏,检查?I/O端口空间中的指定I/O端口资源是否已被占用。③release_region()宏,释放I/O端口空间中的指定I/O端口资源。这三个宏的定义如下:
1???#define?request_region(start,n,name)??? __request_region(ioport_resource,?(start),?(n),?(name))?
2???#define?check_region(start,n)? ?__check_region(ioport_resource,?(start),?(n))?
3???#define?release_region(start,n)? ?__release_region(ioport_resource,?(start),?(n))
其中,宏参数start指定I/O端口资源的起始物理地址(是I/O端口空间中的物理地址),宏参数n指定I/O端口资源的大小。
●读写I/O端口空间
?在驱动程序请求了I/O端口空间中的端口资源后,它就可以通过CPU的IO指定来读写这些I/O端口了。在读写I/O端口时要注意的一点就是,大多数平台都区分8位、16位和32位的端口,也即要注意I/O端口的宽度。
Linux中访问IO端口函数:inb(),inw(),inl(),outb(),outw(),outl(), “b”“w”“l”分别代表8位,16位,32位。
●I/O内存资源的申请、检测、释放操作
基于I/O?Region的操作函数__XXX_region(),Linux在头文件include/linux/ioport.h中定义了三个对I/O内存资源进行操作的宏:
#define?request_mem_region(start,n,name)? ?__request_region(iomem_resource,?(start),?(n),?(name))?
#define?check_mem_region(start,n)? ?__check_region(iomem_resource,?(start),?(n))?
#define?release_mem_region(start,n)? __release_region(iomem_resource,?(start),?(n)
1) request_mem_region(),请求分配指定的IO内存资源
2) check_mem_region(),检查指定的IO内存资源是否已被占用
3) release_mem_region(),释放指定的IO内存资源
其中,参数start是IO内存区的物理地址(是CPU的RAM物理地址空间中的物理地址),参数n指定I/O内存资源的大小。
●驱动开发人员可以将内存映射方式的IO端口和外设内存统一看作是IO内存资源。
ioremap()用来将IO资源的物理地址映射到内核虚地址空间(3GB - 4GB)中,参数addr是指向内核虚地址的指针。
●读写IO内存资源
Linux中访问IO内存资函数:readb(),readw(),readl(),writeb(),writew(),
您可能关注的文档
- 反应工程CO中温变换.pptx
- 反应气压缩机试车方案.docx
- 励志 没关系爱情.ppt
- 利用化学方程式的计算1.ppt
- 反应器-从失效到更安全的设计和制造.ppt
- 利用图像滤波算法实习对高椒盐噪声的去噪处理——杨建春.doc
- 列车图运行图.ppt
- 刘彦文等《Linux环境嵌入式系统开发基础》第10章.ppt
- 内蒙赤峰景点简介.ppt
- 华北油田冀中坳陷勘探情况介绍.ppt
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)