在Linux系統中,無論是核心程式還是應用程式,都隻能使用虛拟位址,而晶片手冊中給出的硬體
寄存器位址或者RAM位址則是實體位址,無法直接使用,是以,我們讀寫寄存器的第1步就是将
它的實體位址映射為虛拟位址。
所謂動态映射,是指在驅動程式中采用ioremap函數将實體位址映射為虛拟位址。
原型:void * ioremap(physaddr, size)
參數:
Physaddr:待映射的實體位址
Size: 映射的區域長度
傳回值:映射後的虛拟位址
在完成位址映射後,就可以讀寫寄存器了,Linux核心提供了一系列函數,來讀寫寄存器。
unsigned ioread8(void *addr)
unsigned ioread16(void *addr)
unsigned ioread32(void *addr)
unsigned readb(address)
unsigned readw(address)
unsigned readl(address)
void iowrite8(u8 value, void *addr)
void iowrite16(u16 value, void *addr)
void iowrite32(u32 value, void *addr)
void writeb(unsigned value, address)
void writew(unsigned value, address)
void writel(unsigned value, address)