打印
[嵌入式linux]

如何把User Mode和kernel mode地址转换到物理地址

[复制链接]
2905|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcujackie|  楼主 | 2007-9-13 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何把User Mode和kernel mode地址转换到物理地址

我使用arm 跑linux,但外接的一个硬件芯片要求输入一个物理地址让它做一些操作
在没有linux 及mmu 下,这个是可以的!
在linux kernel 下,我开始晕了!是不是用_virt_to_phys()就可以呢!
但是,如果应用程式经常要从User mode跳进Kernel Mode,要浪费很多资源跟时间 (1秒要做1000多次..)

因此我想使用mmap 在user mode 映射芯片的暂存器,然後把malloc()分配出来的 User Mode地址转换为Kernel Mode的地址,然後再把kernel mode的地址变为物理地址,那我就可以把物理地址写进出暂存器了。

有高手可以帮忙吗?

相关帖子

沙发
rockos| | 2007-9-14 09:57 | 只看该作者

re


把应用级把应用程序空间的地址转换成物理地址?

其实你的需求可以写一个简单的, 基于内存的驱动, 只要实现open, release, mmap三个方法就可以了, mmap()后直接操作内核内存, 就像X Server那样, 不要使用read/write方法.

使用特权

评论回复
板凳
mcujackie|  楼主 | 2007-9-15 22:07 | 只看该作者

请指教 malloc and mmap

其实我是在做程式移植,那个程式都是用malloc 的,然後我现在要用硬件加速,便要把那个malloc 出来的地址给硬件, 我该怎样利用mmap 跟open 呢?请指教!

使用特权

评论回复
地板
mcujackie|  楼主 | 2007-9-15 22:14 | 只看该作者

若果不理会动机,有机会把malloc 出来的变成真实地址吗?

若果不理会动机,有机会把malloc 出来的变成真实地址吗?

使用特权

评论回复
5
rockos| | 2007-9-25 14:46 | 只看该作者

re


据我所知:

1. 在应用程序空间里没有办法把应用程序申请到的内存换算成物理地址

2. 在内核空间里也没有办法把应用程序申请到的内存换算成物理地址

原因是一样的, 由应用程序申请的地址不一定能映射成固定的物理地址.

3. 在内核空间里申请内存, 肯定可以换算到它的物理地址。而且这个地址可以很方便地传到应用空间, v4l2标准的图像数据从内核向应用就是这样传递的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

16

帖子

0

粉丝