superfisha 发表于 2009-12-30 19:09

菜鸟求教/dev/mem 的mmap问题

我在驱动中申请了一块内存,在应用程序中打开/dev/mem,再mmap,结果dmesg中报错,mmap也返回失败。

/var/log/messages的报错:Program test tried to read /dev/mem between 209800000->209a28000

原来在redhat 企业版5.2(内核版本2.6.18-98)下是没问题的,结果现在换成redhat 企业版5.3(内核版本2.6.18-128)就不行了

哪位大侠知道原因吗?多谢了!

Godbach 发表于 2009-12-30 21:35

首先确定一下/dev/mem是否有读取的权限

Godbach 发表于 2009-12-30 21:38

LZ可以看一下偶的这篇文章中的实现。
http://blog.chinaunix.net/u/33048/showart_1271210.html

另外,你内核态分配的地址是否已经转换成了物理地址

superfisha 发表于 2009-12-31 07:47

原帖由 Godbach 于 2009-12-30 21:35 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
首先确定一下/dev/mem是否有读取的权限
 
我是用root执行的

superfisha 发表于 2009-12-31 07:48

原帖由 Godbach 于 2009-12-30 21:38 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
LZ可以看一下偶的这篇文章中的实现。
http://blog.chinaunix.net/u/33048/showart_1271210.html

另外,你内核态分配的地址是否已经转换成了物理地址

是的,用的是物理地址,方法一样

Godbach 发表于 2009-12-31 10:08

建议LZ这样实验一下。既然/dev/mem可以读取的话,你就把它当个文件。打开文件后,按照你得到的物理地址作为偏移,读取文件内容即可。

看一下这样是否可行。

superfisha 发表于 2009-12-31 10:54

原帖由 Godbach 于 2009-12-31 10:08 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
建议LZ这样实验一下。既然/dev/mem可以读取的话,你就把它当个文件。打开文件后,按照你得到的物理地址作为偏移,读取文件内容即可。

看一下这样是否可行。

/dev/mem是实现了fops的函数吗?

Godbach 发表于 2009-12-31 11:12

原帖由 superfisha 于 2009-12-31 10:54 发表 http://linux.chinaunix.net/bbs/images/common/back.gif


/dev/mem是实现了fops的函数吗?

之前在2.4下直接按照文件的方式读取过/dev/mem,你可以试一下

hb12112 发表于 2009-12-31 11:13

应该跟内核编译选项有关系,你看下CONFIG_STRICT_DEVMEM是否打开,如果是打开的关掉试下.

Godbach 发表于 2009-12-31 11:20

我觉得写个测试程序应该是几分钟的事情,行不行很快就得到验证了
页: [1] 2
查看完整版本: 菜鸟求教/dev/mem 的mmap问题