ioremap如何用?

发布于 2022-09-19 11:48:10 字数 554 浏览 15 评论 3

小弟最近在写一驱动,需要把物理地址0x80000000开始的连续8个端口映射成虚拟地址,并对其进行I/O操作

端口地址是8位的, 分别是000,001,...,111。

现在想用ioremap把物理映射过来

以下是ioremap的原型函数:

void *ioremap(unsigned long phys_addr, unsigned long size)

我想问的是:

映射之后的地址是什么类型的?是void *addr吗?因为我在驱动中直接就 addr=ioremap(0x80000000, ;

ioremap的第二参数size怎么填,size的单位是什么?直接填8吗?

我知道网上说ioremap地方还挺多的,但一直没搞懂上述两个问题,问题可能提得不好,希望各位大侠帮助一下!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

GRAY°灰色天空 2022-09-19 15:29:53

回复 3# commandow01

    addr+1代表001

究竟谁懂我的在乎 2022-09-19 14:39:50

回复 2# smalloc

    敢问这8个端口是什么?是把映射到的地址addr+1代表001,addr+2代表002,还是以8位为单位地寻址呢?

深空失忆 2022-09-19 13:49:17

是的.就是32位线性地址
size是端口占的字节数 这里就是8

实际上一次影射了的一个页大小的物理地址
也就是8个端口如果连续且在一页中.就直接为这个页建立一个页表项

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文