我对I/O端口的指令和I/O内存的指令都写了相应的驱动程序,都经过了测验。在这里值得注意的有4点:
(1)一切的读写指令所赋的地址有必要都是虚拟地址,你有两种挑选:运用内核现已定
义好的地址,如
S3C2440_GPJCON等等,这些都是内核界说好的虚拟地址,有爱好的能够看源码。还有一种办法便是运用自己用ioremap映射的虚拟地址。肯定
不能运用实践的物理地址,否则会由于内核无法处理地址而呈现oops。
(2)在运用I/O指令时,能够不运用request_region和request_mem_region,而直接运用outb、ioread等指令。由于request的功用仅仅告知内核端口被谁占用了,如再次request,内核会阻止。
(3)在运用I/O指令时,所赋的地址数据有时有必要经过强制类型转换为 unsigned long ,否则会有正告(详细原因请看
Linux设备驱动程序学习(7)-内核的数据类型
) 。尽管你的程序或许也能够运用,可是最好仍是不要有正告为妙。
(4)在includeasm-armarch-s3c2410hardware.h中界说了许多io口的操作函数,有需求能够在驱动中直接运用,很便利。