A/UX device drivers

William Roberts liam at cs.qmw.ac.uk
Sat Mar 24 00:53:55 AEST 1990


In article <3126 at sol1.oakhill.UUCP> gabler at sol1.UUCP (Christopher Gabler) writes:
>Variations in the autoconfig routine can place the TEST device as a module in the kernel.  This is seen by using the command "module_dump /unix".  Listing the contents of /dev also shows the TEST device with others like console and tty, etc.  However, if I try to open the device TEST, I get an error "device notfound".  I am also using the "launch -n" command in the sash when I startup the A/UX.
>
>I have also noticed a strange occurrence when the autoconfig routine loads the TEST device in the list of device modules.  The Apple ethercard (already present) is excluded from the listing of startup devices.  When this happens, I lose my ethernet access.  The autoconfiguration routine is of the format "autoconfig -o /testunix -L loadfile -S /etc/startup -M /etc/master".

Your problem is that the "-L loadfile" option means "ignore the
list of cards actually present, just use this information
instead". You should change the TEST file in /etc/master.d so
that instead of having an "id" line, it has something like

include .
cp0    -       qmc_  -      32       1

Alternatively, put the correct ID number for your GPIB card and
put the card into the machine: it shouldn't be able to do
anything until you enable it (it may kill your machine if the
MacOS driver was installed in the Sash partition, though,
because the MacOS driver close routine probably doesn't disable
the card properly (if at all)).

Once you've done this, try autoconfig without the -L option.

As for your "device not found" problem, I suspect that you
aren't remaking the device special files as part of the startup
script. Here are my versions of the TEST driver install and
uninstall scripts, based on the 1.0 device drivers kit, for a
software only device driver we use here at QMW.

I've also provided the revised Makefile which puts these files
in the right places and does /etc/newunix to get it going. You
should be able to recognise the Apple TEST stuff as a very near
ancestor of these files....

#         This is a shar archive.
#         Remove everything above and including the cut line.
#         Then run the rest of the file through sh.
#--------cut--------cut--------cut--------cut--------cut--------
#! /bin/sh
#  shar:  Shell Archiver
#         Run the following with /bin/sh to create:
#             qmc.install
#             qmc.uninstall
#             Makefile
# This archive created: Fri Mar 23 14:51:47 WET 1990
echo shar: extracting "qmc.install" '('1959 chars')'
if test -f qmc.install
then
    echo shar: will not overwrite existing file "qmc.install"
else
cat << \SHAR_EOF > qmc.install
: "@(#)Copyright 1988-89, Apple Computer - Version 1.16 of TEST.install on 09:35:50 3/8/89"

###############################################################################
###
###  /etc/install.d/TEST
###
###############################################################################

PATH=/bin:/usr/bin:/etc:/usr/etc
name=qmc

###-------------------------------------------------------------------------###
###  Install the driver object file
###-------------------------------------------------------------------------###

   cp /etc/install.d/boot.d/$name /etc/boot.d
   chmod 644 /etc/boot.d/$name

###-------------------------------------------------------------------------###
###  Install the driver master script file
###-------------------------------------------------------------------------###
###
### Note that the qmc driver is not associated with a specific
### card id of any sort, so we use "include ." instead of a card id.

### flags   nvec   prefix_   soft   devcnt   ipl

### c   - I am a character device driver
### p0  - call my init routine after initialising the kmem structures

cat > /etc/master.d/$name <<'--EOF--'
include .
cp0    -       qmc_  -      32       1
--EOF--

chmod 644 /etc/master.d/$name

###-------------------------------------------------------------------------###
###  Install the startup file
###-------------------------------------------------------------------------###

cat > /etc/startup.d/$name <<'--EOF--'
: "@(#)Copyright 1988-89, Apple Computer - Version 1.16 of TEST.install on 09:35:50 3/8/89"

#  startup script for qmc

PATH=/bin:/usr/bin:/etc:/usr/etc
scriptname=$0
name=qmc

while test -n "$1"
do
    case $1 in

        -M )
             #  For -M flag: Save the major number

             shift
             major=$1
             rm -f /dev/qmc
             mknod /dev/qmc c $major 0
             echo created /dev/qmc
             ;;

         * )
             # Ignore all other flags

             ;;
    esac
    shift
done
--EOF--

chmod 755 /etc/startup.d/$name
SHAR_EOF
if test 1959 -ne `wc -c < qmc.install`
then
    echo shar: error transmitting "qmc.install" '('should be 1959 chars')'
else
    echo qmc.install
fi
fi
echo shar: extracting "qmc.uninstall" '('1016 chars')'
if test -f qmc.uninstall
then
    echo shar: will not overwrite existing file "qmc.uninstall"
else
cat << \SHAR_EOF > qmc.uninstall
: "@(#)Copyright 1988-89, Apple Computer - Version 1.16 of TEST.uninsta on 09:35:53 3/8/89"

###############################################################################
###
###  /etc/uninstall.d/TEST
###
###############################################################################

PATH=/bin:/usr/bin:/etc:/usr/etc
name=qmc

###-------------------------------------------------------------------------###
###  Remove the driver object file
###-------------------------------------------------------------------------###

   rm -f /etc/boot.d/$name

###-------------------------------------------------------------------------###
###  Remove the driver master script file
###-------------------------------------------------------------------------###

   rm -f /etc/master.d/$name

###-------------------------------------------------------------------------###
###  Remove the startup script file
###-------------------------------------------------------------------------###

   rm -f /etc/startup.d/$name
SHAR_EOF
if test 1016 -ne `wc -c < qmc.uninstall`
then
    echo shar: error transmitting "qmc.uninstall" '('should be 1016 chars')'
else
    echo qmc.uninstall
fi
fi
echo shar: extracting "Makefile" '('1035 chars')'
if test -f Makefile
then
    echo shar: will not overwrite existing file "Makefile"
else
cat << \SHAR_EOF > Makefile
# "@(#)Copyright 1988-89, Apple Computer - Version 1.16 of Makefile on 09:35:45 3/8/89"

# Define DEST to point to your root directory
# ( this is usually / )
DEST=/

DEFINES= -DKERNEL -DNEW_PMMU -DDEBUG
FLAGS= ${DEFINES} ${INCLUDES}

CFLAGS= ${FLAGS} -O

DRIVER_OBJS= qmc_device.o

install:        demo unix.symtab
                sync
                sync

all:            ${DRIVER_OBJS}

unix.symtab:    qmc
                @echo  install the files and make the new kernel
                cp qmc $(DEST)/etc/install.d/boot.d/qmc
                chmod 644 $(DEST)/etc/install.d/boot.d/qmc
                cp qmc.install $(DEST)/etc/install.d/qmc
                chmod 755 $(DEST)/etc/install.d/qmc
                cp qmc.uninstall $(DEST)/etc/uninstall.d/qmc
                chmod 755 $(DEST)/etc/uninstall.d/qmc
                $(DEST)/etc/newunix qmc
                autoconfig -I \
                    -S $(DEST)/etc/startup -o $(DEST)/unix \
                    -M $(DEST)/etc/master
                echo nm -xe $(DEST)/unix | sort -t\| +1 >unix.symtab
                sync
                sync

qmc:          ${DRIVER_OBJS}
                ld -o qmc -x -r ${DRIVER_OBJS} /usr/lib/unshared.ld

demo: demo.c
        cc ${CFLAG} -o demo demo.c

demo ${DRIVER_OBJS}: qmc_dev.h
SHAR_EOF
if test 1035 -ne `wc -c < Makefile`
then
    echo shar: error transmitting "Makefile" '('should be 1035 chars')'
else
    echo Makefile
fi
fi
#         End of shar archive
exit 0
-- 

William Roberts                 ARPA: liam at cs.qmw.ac.uk
Queen Mary & Westfield College  UUCP: liam at qmw-cs.UUCP
Mile End Road                   AppleLink: UK0087
LONDON, E1 4NS, UK              Tel:  01-975 5250 (Fax: 01-980 6533)



More information about the Comp.unix.aux mailing list