当我访问端口时,出现段错误。
要么你的程序没有 root 权限,要么 ioperm()
调用因其他原因失败。检查 ioperm()
的返回值。还要检查你是否真的在访问你用 ioperm()
启用的端口(参见 Q3)。如果你正在使用延迟宏(inb_p()
、outb_p()
等等),请记住调用 ioperm()
以获取端口 0x80 的访问权限。
我找不到任何地方定义了 in*()
、out*()
函数,并且 gcc 抱怨未定义引用。
你编译时没有打开优化 (-O
),因此 gcc 无法解析 asm/io.h
中的宏。或者你根本没有 #include <asm/io.h>
。
out*()
没有执行任何操作,或者执行了一些奇怪的操作。
检查参数的顺序;它应该是 outb(value, port)
,而不是像 MS-DOS 中常见的那样 outportb(port, value)
。
我想控制一个标准的 RS-232 设备/并行打印机/操纵杆...
你最好使用现有的驱动程序(在 Linux 内核中或 X 服务器中或其他地方)来执行此操作。驱动程序通常非常通用,因此即使是稍微非标准的设备通常也可以与它们一起工作。请参阅上面关于标准端口的信息,以获取指向其文档的指针。