***对读写GPIO的拙见***
看了一些关于读写GPIO的文章,大家争论很多。我想把自己整理好的想法写下来,欢迎大家拍砖:
GPIO的读写最终是要转化为对总线地址的读写。
无论在内核还是在用户态,仅仅知道GPIO的绝对总线地址是不够的。
因为LINUX对地址解析可能需要通过页表进行映射,如果页表中没有对这段地址的映射,读写工作肯定是无法进行的。
当然对于UCLINUX就不存在这个问题,因为它的寻址都是直接寻址,无须通过页表,只要你给出的GPIO地址存在,它就可以直接进行读写工作,所以在UCLINUX中,有些驱动程序甚至可以在应用程序中完成(至少我是这么干的:)
对于标准LINUX,进行GPIO的读写,事先都应该作好映射工作,这里常用的方法是:ioremap和****_map(名字记不得了)
其实除此之外还有一个办法,那就是在启动页表前,提前设置GPIO,这时CPU是直接寻址,不会通过页表来访问GPIO,所以这时的GPIO是非常简单的,跟读写一般内存没有什么两样。