驱动程序的内核I/O端口函数选择
Linux支持不同位宽的端口函数,用于I/O端口的读写。端口可以是8位,16位或32位。Linux的内 核头文件定义了访问I/O端口的内联(inline)函数,用于读取(inx)或写入(outx) 8位,16位以及32位端口。这些函数是:
__u8 inb (unsigned int port);
void outb (__u8 data, unsigned int port);
__u16 inw (unsigned int port);
void outw(__u16 data, unsigned int port);
__u32 inl (unsigned int prot);
void outl (__u32 data, unsigned int port); |
这些函数的串版本(string versions)能让你在单位时间内更有效的传输一个以上的数据,通过以下函数:
void insb(unsigned int port, void *addr, unsigned long count);
void outsb(unsigned int port, void *addr, unsigned long count); |
addr 是被传入或传出的内存单元地址,count是被传输单元的数量。 Data 则是被读取或 写入到"port"端口的数据:
void insw(unsigned int port, void *addr, unsigned long count);
void outsw(unsigned int port, void *addr, unsigned long count); |
向16位端口读写16位数据:
void insl(unsigned int port, void *addr, unsigned long count);
void outsl(unsigned int port, void *addr, unsigned long count); |
向32位端口读写32位数据。