驱动定义的地址和datasheet的地址疑惑

yuedahan 2016-01-28 01:50:18
小弟看到一个帖子http://blog.csdn.net/qianrushizaixian/article/details/46536005,是对MT7628的PWM驱动,在程序中定义的BASE地址和datasheet中的地址是不同的。有的说Linux系统下使用的是虚拟地址,使用ioremap()建立内存地址映射,但是在那个帖子中有没有看到类似映射的函数啊?那到底什么时候需要映射呢?
...全文
516 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
常书 2016-03-02
  • 打赏
  • 举报
回复
引用 4 楼 xinzha 的回复:
看了下链接里的内容,有很大的疑惑。 如果没看错的话,basereg是落在了0xB0005000附近的一个地址,这个地址应该位于用户空间,并且没有和硬件地址进行映射,如何能够正确操作?即使有某些地方对它进行了初始化以保证映射关系,那怎么保证每个进程都把这段地址空间给这些寄存器用,至少我是没看明白。
内核里访问内存地址,取决于datasheet的内存映射,不存在用户空间地址的说法 想操作用户空间内容,使用copy_from_user一系列操作,直接在用户空间读地址,然后在内核里访问是会被映射到其它地方的
常书 2016-03-02
  • 打赏
  • 举报
回复
找了份datasheet看了下,10005000就是物理内存地址,楼主确定他的程序能正常运行?
常书 2016-03-02
  • 打赏
  • 举报
回复
你找下完整的datasheet,感觉上面的PWM base address应该是偏移地址,应该有个地方描述寄存器基地址为A000 0000H
happy小文字 2016-02-16
  • 打赏
  • 举报
回复
看了一下链接中的代码,感觉是系统或者芯片前面直接完成了映射,直接拿着映射好的地址来读写了,那段代码不太全
fly 100% 2016-02-16
  • 打赏
  • 举报
回复
查看驱动的probe 函数里面应该会有物理地址转虚拟地址的remap 过程
猪头三小队长 2016-02-15
  • 打赏
  • 举报
回复
看了下链接里的内容,有很大的疑惑。 如果没看错的话,basereg是落在了0xB0005000附近的一个地址,这个地址应该位于用户空间,并且没有和硬件地址进行映射,如何能够正确操作?即使有某些地方对它进行了初始化以保证映射关系,那怎么保证每个进程都把这段地址空间给这些寄存器用,至少我是没看明白。
nswcfd 2016-02-01
  • 打赏
  • 举报
回复
看了一下楼主的给出的链接,忽略#2楼的内容吧。
nswcfd 2016-02-01
  • 打赏
  • 举报
回复
两回事,ioremap是说要想使用datasheet里的物理地址,必须先使用ioremap(或其它类似的函数)先映射到虚拟地址(因为cpu只认线性地址,不认物理地址 --- 至少对x86是成立的,对其它cpu可能不成立)。 至于楼主的代码跟datasheet不一致的问题,不清楚楼主的驱动,没有发言权。通常情况下需要跟datasheet里的地址一致。
yuedahan 2016-01-28
  • 打赏
  • 举报
回复
没人么 自己顶一下

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧