- 论坛徽章:
- 0
|
看看《LINUX设备驱动程序》吧。里面有一章是讲这个的。。本论坛有下载的。
简单的说一下吧:
对于ioremap,此函数是将物理地址映射到虚拟地址,其原型为:
void *ioremap(unsigned long phys_addr,unsigned long size); 参数1是物理地址,参数2是你要映射的size,返回值就为内核虚拟地址。。成功后,使得phys_addr+size内的地址都可以通过其虚拟地址+相应的偏移来访问。
一般的,在驱动程序中的init函数及probe函数中会调用此函数。解除映射的函数是
void iounmap(void *virt_addr)
对于mmap,记忆中不是用在内核驱动中的,它好像是用在用户空间程序中的,mmap系统调用使进程之间通过映射同一个普通文件实现共享内存。这个不是太清楚,你自己查查。。
另外,内核驱动中,还有一种静态映射,也是将物理地址映射到虚拟地址的。。对于我的s3c2440平台,加入静态映射的位置是在arch/arm/mach-s3c2410/mach-smdk2440文件中smdk2440_iodesc结构体中。你可以看看此文件 |
评分
-
查看全部评分
|