⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 io-port-programming-8.html

📁 Linux初学者最好的老师就是howto了。相当于函数man。
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
 <TITLE>如何在 Linux 下撰写程式来使用 I/O 埠: 问题排除</TITLE>
 <LINK HREF="IO-Port-Programming-9.html" REL=next>
 <LINK HREF="IO-Port-Programming-7.html" REL=previous>
 <LINK HREF="IO-Port-Programming.html#toc8" REL=contents>
</HEAD>
<BODY>
<A HREF="IO-Port-Programming-9.html">Next</A>
<A HREF="IO-Port-Programming-7.html">Previous</A>
<A HREF="IO-Port-Programming.html#toc8">Contents</A>
<HR>
<H2><A NAME="s8">8. 问题排除</A></H2>

<P>
<DL>
<DT><B>Q1.</B><DD><P>当我存取 I/O 埠时结果碰到 segmentation faults 这个问题
<P>
<DT><B>A1.</B><DD><P>不是你的程式没有 root 权限, 就是因为某些理由导致函式 <CODE>ioperm()</CODE> 
呼叫失败. 检查函式 <CODE>ioperm()</CODE> 的传回值. 同时, 检查你所存取的埠也就是你以
函式 <CODE>ioperm()</CODE> 所启用的埠位址 (参考 Q3).
如果你使用的是延迟时间的巨集指令 (<CODE>inb_p()</CODE>, <CODE>outb_p()</CODE>, 等等),
记得也要呼叫函式 <CODE>ioperm()</CODE> 以便存取埠位址 0x80.
<P>
<DT><B>Q2.</B><DD><P>我无法找到 <CODE>in*()</CODE>, <CODE>out*()</CODE> 等函式被定义在何处,
同时 gcc 也抱怨参考到未定义的符号 (undefined references).
<P>
<DT><B>A2.</B><DD><P>你在编译程式时没有打开最佳化选项 (<CODE>-O</CODE>),
因此 gcc 不能解析 <CODE>asm/io.h</CODE> 中的巨集指令.
或是你根本就没有使用 <CODE>#include &lt;asm/io.h&gt;</CODE>.
<P>
<DT><B>Q3.</B><DD><P><CODE>out*()</CODE> 没有动作, 或是动作怪怪的.
<P>
<DT><B>A3.</B><DD><P>检查参数所放置的次序; 他应该是这样 <CODE>outb(value, port)</CODE> ,
而不是 MS-DOS 上常用的那样 <CODE>outportb(port, value)</CODE> 
<P>
<DT><B>Q4.</B><DD><P>我想要控制一个标准的 RS-232 装置/连接并列埠的印表机/操纵□...
<P>
<DT><B>A4.</B><DD><P>你最好能停止此事而使用现有的驱动程式 (他们存在於 Linux 的核心中或 
X 伺服器中或其他的地方) 来达成你的目标. 
这些驱动程式通常相当具通用性, 所以就算是有点不标准的装置, 他们通常都能正常运作.
这些标准 I/O 埠的相关资讯请参考前面说过的文件指引.
</DL>
<P>
<HR>
<A HREF="IO-Port-Programming-9.html">Next</A>
<A HREF="IO-Port-Programming-7.html">Previous</A>
<A HREF="IO-Port-Programming.html#toc8">Contents</A>
</BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -