ioremap如何用?
小弟最近在写一驱动,需要把物理地址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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
回复 3# commandow01
addr+1代表001
回复 2# smalloc
敢问这8个端口是什么?是把映射到的地址addr+1代表001,addr+2代表002,还是以8位为单位地寻址呢?
是的.就是32位线性地址
size是端口占的字节数 这里就是8
实际上一次影射了的一个页大小的物理地址
也就是8个端口如果连续且在一页中.就直接为这个页建立一个页表项