今天看LDD3时发现了这样一段话,破解了我一直以来在驱动编写时io内存的访问中所带来的困惑。
这段话的内容是这样:根据计算机平台和所使用的总线不同,i/o内存的访问可能是、也可能不是通过页表来访问的,如果访问时经由页表进行的,那么内核必须首先安排物理地址使其对设备驱动程序可见(这就意味着在进行任何i/o之前必须先调用ioremap()函数)。如果访问无需页表,那么i/o内存区域就非常类似于i/o端口,可以使用适当形式的函数来读写他们。
----------------------------------------------------------------------------------
我之前的疑惑:在编写基于arm开发板的adc驱动时必须这样做:
之后才能对端口进行访问:
可见这个io内存的访问是基于页表访问的,
在我进行蜂鸣器驱动编写的时候,是这样进行,并没有调用ioremap来重新映射io地址。
可见这应该是io内存的非页表访问方式。现在终于明白了~~
----------------------------------------------------------------------------------
但是问题又来了,我怎样去区分或者是识别,哪些io内存是页表访问,哪些是非页表访问呢????????
现在终于明白怎么样来区分io内存是页表访问还是非页表访问了,通过查看源代码,我们可以发现,针对以上的两个io内存(S3C2410_ADCCON与S3C2410_TCON)通过查看源码可以看到:
和
从代码可以看出原因,你看出了吗??呵呵~~~~