免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1710 | 回复: 6
打印 上一主题 下一主题

关于内存与IO操作的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-15 14:37 |只看该作者 |倒序浏览
本帖最后由 哥特de忧伤 于 2010-11-15 14:39 编辑

大家都知道__ioremap的作用吧,用来将外设的IO物理地址映射到内核虚拟地址空间,那么可不可以不采取这种映射方式,直接为外设的物理地址空间定义虚拟地址空间,然后达到对外设的直接寄存器控制,比如:


#define IO_PHYS        (0x48000000)
//2440片上寄存器物理地址
#define IO_VIRT        (0xf0000000)
//要映射的虚拟地址
#define __io_virt_to_phys(x) ((x)-IO_VIRT+IO_PHYS)
#define UART0_BASE_ADDR         __io_phys_to_virt(0x50000000)
//uart0由物理地址0x50000000转换虚拟地址

不知道这样可以吗,可能可移植性不太好吧!

论坛徽章:
0
2 [报告]
发表于 2010-11-15 22:35 |只看该作者
不懂,帮顶

论坛徽章:
0
3 [报告]
发表于 2010-11-16 11:12 |只看该作者
这样做不好, 移植性肯定不理想, 因为并不是所有的平台都在kernel初始化时,就把片内设备的地址都构建好映射表的, 如at9261就没有, 因此得具体问题具体分析了, 貌似嵌入式方面的驱动, 可移植性就不好。

论坛徽章:
0
4 [报告]
发表于 2010-11-16 11:51 |只看该作者
回复 3# kamingli


    哦,那就是说是可以这么做的,虽说linux开源,但是把他用在商业上就没那么无私了,老板就要移植性差的,然后他的代码就安全了,哎,悲哀啊,

论坛徽章:
0
5 [报告]
发表于 2010-11-16 18:42 |只看该作者
难道不用建立页表吗?

论坛徽章:
0
6 [报告]
发表于 2010-11-16 18:44 |只看该作者
这样做不好, 移植性肯定不理想, 因为并不是所有的平台都在kernel初始化时,就把片内设备的地址都构建好映 ...
kamingli 发表于 2010-11-16 11:12



    LZ可以自己建立页表,我想LZ应该判断对应的虚拟地址是否已被占用吧

论坛徽章:
0
7 [报告]
发表于 2010-11-17 15:37 |只看该作者
这样做是有前提的, 就是kernel在初始化时, 已经做好映射表了,要不然,只能采用ioremap
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP