免费注册 查看新帖 |

Chinaunix

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

ioremap之后得到的地址是否可以用memcpy和memset函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-05 08:19 |只看该作者 |倒序浏览
用ioremap将设备的寄存器重映射到一个地址上,比如得到地址0xC0000000, 正常来说可以用readl() writel()函数进行读写,
那么是否可以用memcpy()或者memset()进行批量的读写呢?而不是四个字节的读写?

论坛徽章:
0
2 [报告]
发表于 2010-07-05 08:33 |只看该作者
回复 1# 527639827

可以

论坛徽章:
0
3 [报告]
发表于 2010-07-05 08:50 |只看该作者
我觉得不可以
io读写只能是字/半字读写

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
4 [报告]
发表于 2010-07-05 10:24 |只看该作者
LZ可以试一下
我理解的既然映射到内存地址空间了,应该可以这样做

论坛徽章:
0
5 [报告]
发表于 2010-07-05 11:25 |只看该作者
经测试是可以的,不过memset的效率并不高啊。跟for循环一样。


我的程序主要是对一大片内存区域写值,随便什么值都行。

一开始我用的是for循环+writel组合,感觉效率低,
就想到用memset写,想不到还是一样的速率,才30MB/s左右的速度。


请教各位大侠一下,有没有办法提高这个写入速度?

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
6 [报告]
发表于 2010-07-05 16:12 |只看该作者
不知道数据是从哪来的
感觉单纯IO的话可能速度就是这样了
如果数据是从用户态来的,可以考虑这方面有没有可以提升的地方

论坛徽章:
0
7 [报告]
发表于 2010-07-05 20:39 |只看该作者
做了ioremap就是把对外设的访问转换成对内存的访问

论坛徽章:
0
8 [报告]
发表于 2010-07-06 09:02 |只看该作者
不知道数据是从哪来的
感觉单纯IO的话可能速度就是这样了
如果数据是从用户态来的,可以考虑这方面有没有 ...
openspace 发表于 2010-07-05 16:12



    数据就是随意想的,比如100个循环,可以每次都写i值到4Byte的地方

  单纯IO是啥意思?你是说Linux内核对for的操作也就这么快了?30MB/s的写入速度?

   数据没在用户态产生,直接在内核态写的

论坛徽章:
0
9 [报告]
发表于 2010-07-06 09:08 |只看该作者
回复 7# emmoblin


    恩,是这样的,这句话总结得深入浅出啊

论坛徽章:
0
10 [报告]
发表于 2010-07-06 15:19 |只看该作者
回复 1# 527639827


    这个不一定的,要看具体环境,比如同一个PCI设备的MMIO空间,通过ioremap()映射之后,如果在x86-linux下,是可以当做一片普通的RAM来access的,如果在ppc-linux下,则不能,只能用readl(),writel()
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP