最近开始实际尝试编写linux的驱动,平台是BBBlack,使用的是英贝特提供的anstrom系统,3.8.13版本的内核,现在刚写GPIO(目前是来控制LED)驱动,在网上查阅资料发现,实现GPIO驱动的方法五花八门,有的是借助sysfs,有的是用源码提供的通用函数(不一样的源码还不一定有同样的函数),有的是用ioremap直接读写寄存器的方式,总之感觉前两种方法通用性不强,还是直接读写用ioremap来映射物理内存的方法比较通用,然后问题就来了:
1.同一物理内存可以多次ioremap吗?多次ioremap后得到的虚拟地址可以访问同一物理地址吗?ioremap使用时要注意什么?可否提供一些实例?(AM335X的)
2.ioremap的方法是否会与系统自带驱动冲突?如何避免?
3.一般都是怎么来写类似GPIO驱动之类的简单驱动的?(通用性最强的方法)那些非linux通用的函数怎么来的,如何才能知道那些函数是否可以使用?