***对读写GPIO的拙见***

blue_yxt 2007-02-26 06:19:12
看了一些关于读写GPIO的文章,大家争论很多。我想把自己整理好的想法写下来,欢迎大家拍砖:

GPIO的读写最终是要转化为对总线地址的读写。

无论在内核还是在用户态,仅仅知道GPIO的绝对总线地址是不够的。

因为LINUX对地址解析可能需要通过页表进行映射,如果页表中没有对这段地址的映射,读写工作肯定是无法进行的。

当然对于UCLINUX就不存在这个问题,因为它的寻址都是直接寻址,无须通过页表,只要你给出的GPIO地址存在,它就可以直接进行读写工作,所以在UCLINUX中,有些驱动程序甚至可以在应用程序中完成(至少我是这么干的:)

对于标准LINUX,进行GPIO的读写,事先都应该作好映射工作,这里常用的方法是:ioremap和****_map(名字记不得了)

其实除此之外还有一个办法,那就是在启动页表前,提前设置GPIO,这时CPU是直接寻址,不会通过页表来访问GPIO,所以这时的GPIO是非常简单的,跟读写一般内存没有什么两样。
...全文
1042 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmoon1983 2007-03-27
  • 打赏
  • 举报
回复
收藏,学习。
olivercheung 2007-03-26
  • 打赏
  • 举报
回复
有些是被映射为I/O端口,有些是被映射为I/O内存。它们分别有自己的一套函数。
footway 2007-02-27
  • 打赏
  • 举报
回复
对于标准LINUX,进行GPIO的读写,事先都应该作好映射工作,这里常用的方法是:ioremap和****_map

=========
个别情况:有的cpu的GPIO是映射到PCI空间的。访问GPIO,就是读写0xcf8, 0xcfc寄存器。
lionwq 2007-02-27
  • 打赏
  • 举报
回复
不错,谢谢
hyg2008 2007-02-27
  • 打赏
  • 举报
回复
mark

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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