ioremap()函数

发布于 2022-09-21 01:15:27 字数 177 浏览 15 评论 0

我将一个寄存器用ioremap函数定义到驱动中,R_GPECON=ioremap(GPECON,4),我是不是可以这样对这个寄存器直接赋值:
         R_GPECON=0xffffffff还是这样*R_GPECON=0xffffffff。到底那个正确呀。
谢谢

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

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

发布评论

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

评论(9

深府石板幽径 2022-09-28 01:15:27

writeb/writew/readb/readw in 2.4 kernel,
writeb(内容,地址)。
R_GPECON=ioremap(GPECON,4);
writew(0xffffffff,R_GPECON);:wink:

ioremap 将物理地址映射到内核中的一段地址,映射之后你看到的R_GPECON跟物理地址有一段偏移,所以不能直接操作~~

就是这个样子~~

半步萧音过轻尘 2022-09-28 01:15:27

ls的,应该是writel(0xffffffff,R_GPECON);吧?看它映射的是32位。还有,一般多用~0,而不是0xffffffff

真心难拥有 2022-09-28 01:15:27

ls的,应该是writel(0xffffffff,R_GPECON);吧?看它映射的是32位。还有,一般多用~0,而不是0xffffffff

趁微风不噪 2022-09-28 01:15:27

*addr = data时要用修饰词volatile

开始看清了 2022-09-28 01:15:27

谢谢各位的指教

桃扇骨 2022-09-28 01:15:27

原帖由 小瓶盖儿 于 2008-9-2 08:11 发表
writeb/writew/readb/readw in 2.4 kernel,
writeb(内容,地址)。
R_GPECON=ioremap(GPECON,4);
writew(0xffffffff,R_GPECON);:wink:

ioremap 将物理地址映射到内核中的一段地址,映射之后你看到的R_GP ...

一般是推荐用writeX系列函数而不是直接用指针操作,不过原因好像不是你所说的吧?主要是这个函数经常用于映射外设的一些地址空间到虚拟地址中,而外设的访问有时有一些限制,而用writeX系列比较安全。如果是映射一些不用的物理内存如系统启动时保留出来的内存,则直接做内存访问即可。

送君千里 2022-09-28 01:15:27

请教,如果在驱动中~~
#define kaka      (*((volatile INT32U *) 0x01c00000))
kaka=0xfc;
可以访问成功么?

夜空下最亮的亮点 2022-09-28 01:15:27

原帖由 小瓶盖儿 于 2008-9-7 16:38 发表
请教,如果在驱动中~~
#define kaka      (*((volatile INT32U *) 0x01c00000))
kaka=0xfc;
可以访问成功么?

1、这段代码是驱动中的,说明执行kaka=0xfc;时享有cpu特权,此时的代码可以做内核能够做得任何事情~~
2、如果有mmu的话,cpu将0x01c00000送给mmu,mmu会查表,找出0x01c00000对应的物理地址(假设是add_temp),
3、mmu从ram中寻址add_temp
4、我也不知道到底能不能正确访问,我是新手,请高人分析一下其中的过程~~

撩发小公举 2022-09-28 01:15:27

你这样的访问编译后的指令使用的是虚拟地址,能否访问取决于这一地址有没有映射吧。

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