Linux系统下设备驱动的安全端口分配

http://tech.ddvip.com   2007年03月11日    社区交流

Linux系统下设备驱动的安全端口分配。

  为了避免混淆,例子代码中去掉了错误检查和和主(设备)号的动态分配。 当端口分配成功时,我们可以在proc目录中检查:

$cat /proc/ioports

  驱动程序的内核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位数据。

作者:tanktang    责编:豆豆技术应用

正在加载评论...