Linux系统对IO端口和IO内存的管理
|
·写I/O内存 void iowrite8(u8 value, void *addr); void iowrite16(u16 value, void *addr); void iowrite32(u32 value, void *addr); 更多精彩内容:http://www.bianceng.cn/OS/Linux/ 与上述函数对应的较早版本的函数为(这些函数在Linux 2.6中仍然被支持): void writeb(unsigned value, address); void writew(unsigned value, address); void writel(unsigned value, address); 流程如下:
六、Linux下访问IO内存IO内存的访问方法是:首先调用request_mem_region()申请资源,接着将寄存器地址通过ioremap()映射到内核空间的虚拟地址,之后就可以Linux设备访问编程接口访问这些寄存器了,访问完成后,使用ioremap()对申请的虚拟地址进行释放,并释放release_mem_region()申请的IO内存资源。 struct resource *requset_mem_region(unsigned long start, unsigned long len,char *name); 这个函数从内核申请len个内存地址(在3G~4G之间的虚地址),而这里的start为I/O物理地址,name为设备的名称。注意,。如果分配成功,则返回非NULL,否则,返回NULL。 另外,可以通过/proc/iomem查看系统给各种设备的内存范围。 要释放所申请的I/O内存,应当使用release_mem_region()函数: void release_mem_region(unsigned long start, unsigned long len) 申请一组I/O内存后, 调用ioremap()函数: void * ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags); 其中三个参数的含义为: phys_addr:与requset_mem_region函数中参数start相同的I/O物理地址; size:要映射的空间的大小; flags:要映射的IO空间的和权限有关的标志; 功能:将一个I/O地址空间映射到内核的虚拟地址空间上(通过release_mem_region()申请到的) 流程如下:
(编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |



