您的位置:首页 > 其它

使用Mmap系统调用进行硬件地址访问

2015-12-01 14:50 344 查看

Mmap系统调用:

Mmap函数是内存映射函数,负责把文件内容映射到进程的虚拟内存空间,通过对这段内存的读取和修改,来实现堆文件的读取和修改,而不需要再调用read,write等操作。

原型如下:



其参数含义如下:



有映射函数就有解除映射函数,munmap就是解除映射的函数:



注意:直接映射过来的区间虽然用字符型形式表示,但是不一定包含‘\0’,所以使用字符型拷贝函数的时候要慎重。最好用内存拷贝函数。

Mmap设备操作:



而mmap设备操作时如何建立页表的呢?主要有以下几种方法:



Remap_pfn_range函数的原型及参数如下:





所以mmap和poll设备方法一样,实现比较单一,大部分的活都被linux做了,一次标准的调用如下:



申请io内存:

存在着内存空间和io空间的概念:



他们的关系如下图所示:



由此可以引出io端口和io内存的概念:



由于io空间是x86的概念,arm实际上只有内存空间,所以这里不记载io端口的使用方法。

使用io内存分4步:

1. 申请:



使用方式如下:





2. 映射:



使用方法如下:



3. 访问:



4. 释放:



混杂设备驱动:

在linux里,存在一类字符设备,他们共享一个主设备号-10,但次设备号不同,我们称这类设备为混杂设备。这类设备一般都是简单的字符设备,比如LED可以设置为混杂驱动(也可以不设置为混杂驱动)。

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: