ioremap之后得到的地址是否可以用memcpy和memset函数

发布于 2022-09-20 02:27:35 字数 125 浏览 11 评论 9

用ioremap将设备的寄存器重映射到一个地址上,比如得到地址0xC0000000, 正常来说可以用readl() writel()函数进行读写,
那么是否可以用memcpy()或者memset()进行批量的读写呢?而不是四个字节的读写?

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

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

发布评论

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

评论(9

对你再特殊 2022-09-20 03:41:05

回复 7# emmoblin

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

逆光飞翔i 2022-09-20 03:41:05

回复 1# 527639827

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

茶花眉 2022-09-20 03:41:02

不知道数据是从哪来的
感觉单纯IO的话可能速度就是这样了
如果数据是从用户态来的,可以考虑这方面有没有 ...
openspace 发表于 2010-07-05 16:12

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

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

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

故事未完 2022-09-20 03:40:42

做了ioremap就是把对外设的访问转换成对内存的访问

娇妻 2022-09-20 03:39:41

不知道数据是从哪来的
感觉单纯IO的话可能速度就是这样了
如果数据是从用户态来的,可以考虑这方面有没有可以提升的地方

旧人 2022-09-20 03:33:29

经测试是可以的,不过memset的效率并不高啊。跟for循环一样。

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

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

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

注定孤独终老 2022-09-20 03:28:47

LZ可以试一下
我理解的既然映射到内存地址空间了,应该可以这样做

随梦而飞# 2022-09-20 03:18:20

我觉得不可以
io读写只能是字/半字读写

祁梦 2022-09-20 02:55:13

回复 1# 527639827

可以

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