old-www/HOWTO/IO-Port-Programming-8.html

58 lines
2.3 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<TITLE>Linux I/O port programming mini-HOWTO: Troubleshooting</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. Troubleshooting</A></H2>
<P>
<DL>
<DT><B>Q1.</B><DD><P>I get segmentation faults when accessing ports.
<P>
<DT><B>A1.</B><DD><P>Either your program does not have root privileges, or the
<CODE>ioperm()</CODE> call failed for some other reason. Check the return
value of <CODE>ioperm()</CODE>. Also, check that you're actually accessing the
ports that you enabled with <CODE>ioperm()</CODE> (see Q3). If you're using
the delaying macros (<CODE>inb_p()</CODE>, <CODE>outb_p()</CODE>, and so on), remember
to call <CODE>ioperm()</CODE> to get access to port 0x80 too.
<P>
<DT><B>Q2.</B><DD><P>I can't find the <CODE>in*()</CODE>, <CODE>out*()</CODE> functions defined
anywhere, and gcc complains about undefined references.
<P>
<DT><B>A2.</B><DD><P>You did not compile with optimisation turned on (<CODE>-O</CODE>),
and thus gcc could not resolve the macros in <CODE>asm/io.h</CODE>. Or you
did not <CODE>#include &lt;asm/io.h&gt;</CODE> at all.
<P>
<DT><B>Q3.</B><DD><P><CODE>out*()</CODE> doesn't do anything, or does something weird.
<P>
<DT><B>A3.</B><DD><P>Check the order of the parameters; it should be
<CODE>outb(value, port)</CODE>, not <CODE>outportb(port, value)</CODE> as is common in
MS-DOS.
<P>
<DT><B>Q4.</B><DD><P>I want to control a standard RS-232 device/parallel
printer/joystick...
<P>
<DT><B>A4.</B><DD><P>You're probably better off using existing drivers (in the
Linux kernel or an X server or somewhere else) to do it. The drivers
are usually quite versatile, so even slightly non-standard devices
usually work with them. See the information on standard ports above
for pointers to documentation for them.
</DL>
<P>
<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>