|   | 
IV.3 Trouble under Linux
 
The most popular problems under Linux are permission conflicts and wrong
(or no) configuration. Problems may even change with the version number
of the Linux kernel!Note that some changes suggested here will lower your systems security
against attackers who have login access to your machine. Direct access
to hardware ports and security do not mix well.
 On some distributions changes in the /dev directory might be detected
by periodically run jobs and automatically reverted to the old state.
 
The boot script aborts with the error message
 
 ./upload: /dev/ttyS1: Permission denied
 (or something like that).
 You don't have read/write access to the serial port in use (ttyS1).
 If you are the only user of this computer, you can log in as root,
    and simply allow read/write operations for all users:
 
 
     chmod a+rw /dev/ttyS1
 If there are more users who have access to the system, better define
    a new group called "embedded" (or something) in /etc/group
    and add all users who need access to this port. Finally do
 
 
     chgrp embedded /dev/ttyS1chmod o-rw,ug+rw /dev/ttyS1
The boot script hangs on any attempt to output an Intel-HEX file to
    a particular serial port.There may be an I/O address or interrupt conflict, or the serial ports
    are not configured correctly, or not at all.
 Make sure that every serial port uses a base I/O address and an IRQ
    that does not conflict with any other hardware installed in your system.
    (For example, port ttyS3 at 0x2e8 conflicts with an 8514 graphics card!)
    Check the BIOS setup menu for on-board peripherals, as well as the jumper
    settings of all the legacy (ISA) boards.
 Watch the console output when Linux is booting.
    There are messages like
 
 
 ttyS00 at 0x03f8 (irq = 4) is a 16550A
 A log file is usually kept in /var/log. The file name depends on the
    Linux distribution and version. Look for boot.msg,
    bootlog, or something.
 Linux doesn't really auto-probe the serial ports. It assumes standard
    port addresses and IRQ numbers. If your hardware doesn't match this
    default configuration, it will not work. In this case you have to
    configure your serial ports manually with the setserial command,
    e.g.
 
 
 
        setserial -v /dev/ttyS0 port 0x3f8 irq  4 autoconfigsetserial -v /dev/ttyS1 port 0x2f8 irq  3 autoconfig
 setserial -v /dev/ttyS2 port 0x3e8 irq  9 autoconfig
 setserial -v /dev/ttyS3 port 0x2e8 irq 10 autoconfig
 Unfortunately the best place where to put these commands, in order to
    execute them during system boot, depends on the Linux distribution.
    For most Linux distributions, /etc/init.d/serial
    is a good choice!
    SuSE distributions kept it in /sbin/init.d/serial
    until version 7.0.
 For detailed information on serial port configuration refer to the
    setserial man-pages and the Serial-HOWTO.
 
The boot script aborts with an error message like
 
      resetting target system ...@@@@@ access denied: /dev/lp0 @@@@@
 on a system with a 2.2.x (or later) kernel, or with
 
 
      resetting target system ...@@@@@ no root privilege @@@@@
 on a system with a 2.0.x (or earlier) kernel.
 The reset51 program needs root privileges for direct access
    to I/O ports!
 If you are the only user of this computer, you can log in as root,
    and simply allow to run reset51 as root for all users:
 
 
     chown root reset51chmod a+x,u+s reset51
 Once again a warning: don't do this, if your system should have a higher
    level of security! If there are more users who have access to the system,
    better define a special group "embedded" (or something) in
    /etc/group and add all users who need to run
    reset51. Then disable execution for all other users:
 
 
     chown root reset51chgrp embedded reset51
 chmod o-x,ug+x,u+s reset51
 This may considerably improve your system security.
 
The boot script aborts with the error message
 
      resetting target system ...@@@@@ hardware failure: lp0 @@@@@
 although there are two perfectly working printer ports in your PC.
 The reason may be that you run a 2.0.x (or earlier) Linux
    kernel, which assigns fixed I/O base addresses to the printer port devices:
    there is no printer port with base address 0x3bc in your system!
 Try /dev/lp1 (0x378) and /dev/lp2
    (0x278) as reset devices, and change your boot script accordingly.
 
The boot script aborts with the error message
 
      resetting target system ...@@@@@ port not found: /dev/lp2 @@@@@
 on a PC with two printer ports and a 2.2.x (or later) kernel.
 There is no entry for /dev/lp2 in
    /proc/parport/2!
 
 From version 2.2.0 the Linux kernel provides the parport
    layer for dynamic printer port assignment, as known from the PC-BIOS.
    If you have recently updated from a 2.0.x (or earlier)
    kernel, your previous printer port /dev/lp2 may now
    simply be called /dev/lp1 in a 2.2.x
    (or later) system.
 Try /dev/lp1 as reset device, and change your
    boot script accordingly.
 If this doesn't apply, make sure that
 
 
    the /proc file system is configured and mountedthe kernel contains the kernel module loader kmodthe kernel is configured for parport supportthe kernel modules lp, parport, and parport_pc are loadedall printer ports are configured in /etc/modules.conf, e.g.
 
 options parport_pc io=0x378,0x278 irq=7,none Configure and recompile your kernel respectively, if necessary.
    For further information refer to the documentation files
    parport.txt, modules.txt,
    kmod.txt and README provided with recent
    kernel sources, or ask a real Linux expert!
 (See also chapter
    III.4 Shell Script Operation under Linux.)
 
The boot script aborts with the error message
 
      resetting target system ..../upload: /dev/ttyS4: Device or resource busy
 The interrupt of the serial interface may already be used by another
    driver (i.e. printer port, USB).
 Try to find and solve the interrupt conflict. (See items 2 and 5.)
 
 
 |