|
|

楼主 |
发表于 2005-8-23 18:23:25
|
显示全部楼层
|
总结一下:硬件驱动程序肯定是要对硬件的I/O端口(寄存器)或设备内存进行读写,那么对于x86来说是通过专门的函数in_b()/out_b(), in_w()/out_w(),in_l()/out_l(),(分别用于8/16/32位机的)所以说不用对他们的地址进行内存映射。而另一种对硬件读写的机制就是将其端口或设备内存映射成Cpu可访问到的或预留的内存地址空间上(这样的目的自然有他的好处)-----这段内存地址被称作是I/O内存,由于映射成内存地址后是作为虚拟地址(这是由iormap()函数来实现的)使用或返回,这样对这些硬件上的端口(寄存器)的访问是通过类似下面的函数,readb(),writeb()/readw(),write()/readl(),writel()来实现的,而不能取这段地址指针访问他们,因为这样很不安全(书上说的)。如果这段I/O内存的访问不是通过页号来访问的(有这种情况发生),那么这就跟没映射一样,只能当作I/O端口来使用了---------------------纯属个人理解,不代表他人意见。 |
|