UNIX PC BOF Minutes, and Fixdisk 2.0

norman yarvin yarvin-norman at CS.YALE.EDU
Wed Feb 14 14:09:42 AEST 1990


In article <1089 at icus.islp.ny.us> lenny at icus.islp.ny.us (Lenny Tropiano) writes:
>            Discussions about porting X-windows to the UNIX-pc can be
>       summarized  in  one  sentence, "X windows can be ported to the
>       UNIX-pc, but we need someone to write it."  Nobody at the  BOF
>       volunteered  to  port  X,  but the MGR demonstration did spark
>       some additional enthusiasm about doing it.

On a Sun, the X11R3 server takes 500K for the code segment and over a
megabyte total.  On the Unix PC, less storage would be required for window
data (because of the smaller screen), but the server alone would still take
up a substantial percentage of the memory.  The X clients together generally
take more memory than the server.

X was too big for the Sun-2, another 68010 machine; a friend who tried
running X on a Sun-2 says that the machine was very slow, and would crash
under the high load.

In summary, X is much too big and slow for the Unix PC, even if someone were
to port it.  The Unix PC is a slow machine with a small amount of memory.



Some comments on Fixdisk 2.0:  First, I unpacked it by hand (in case of any
AT&T treachery...).  In the process, I discovered a couple of things in the
Install files that deserve comment.  (Each fix has its own directory and
Install file; a central Install file runs the Install file in all the
directories.)

1) The Install file for the ATE fix creates the file /usr/lib/ua/ate_info
with permissions 666 (as follows, starting from line 20):

|	# Create /usr/lib/ate_info and make 666 for permissions fix
|	> /usr/lib/ua/ate_info
|	chmod 666 /usr/lib/ua/ate_info

I have no idea why a blank file called ate_info should be created, much less
why everyone should be able to bash it.

2) The Install file for the kernel fix contains the following code (starting
from line 26):

|	echo "Unpacking window driver --- please standby ...\c"
|	unpack wind.o 2>/dev/null
|	echo
|	mv /etc/lddrv/wind.o /etc/lddrv/wind.o.OLD
|	mv ./wind.o /etc/lddrv/wind.o
|	chown bin /etc/lddrv/wind.o
|	chgrp bin /etc/lddrv/wind.o
|	chmod 644 /etc/lddrv/wind.o
|	rm -f wind  #  Force a new one to be built

The last line, "rm -f wind", does not work, because the routine has not
changed directory to /etc/lddrv.  Does anyone out there know the difference
between "wind" and "wind.o", and how "wind" would be rebuilt?  I decided not
to remove "wind", seeing as the fix had probably worked fine on lots of
other machines.


The second comment on 3.51m is that a bug which has made me reboot quite a
few times still exists.  It is activated by the following sequence:

(rm /usr/spool/uucp/LCK..ph0)
(kermit; starts up on line /dev/ph0 at 1200 baud)
(phtoggle, from another window)

at which point the Phone Mangler switches its window to display "DATA 1:",
followed by the screen blanking as the machine crashes, followed by a relay
clicking five seconds later.  (no, the relay bit isn't really that
significant.)

Configuration: Kermit (don't know version # off hand), Fixdisk 2.0 phone
manager, Unix 3.51m kernel, phtoggle from Foundation Set 3.51, stock 67MB/2MB
3b1.  Well, not quite stock; I put in a new clock battery.  The problem only
occurs on the first use of the phone after booting the machine.

Workaround: running phtoggle twice before the above sequence.

This sequence is the only way I have found to get kermit to work.  Starting
up kermit with the line already in DATA mode does not work, and not removing
the lock does not work -- kermit detects the lock, and refuses to open the
line.  I don't remember what else doesn't work.  Normally, after the steps
mentioned above, I dial from within kermit.  This produces the message
"Can't release lock file" (or something similar), then "Dialing xxx-yyyy, 
/dev/ph0, 1200 baud" (or something similar).  Sometimes the dialing does not
start until I hit ^\, kermit's interrupt key, after which all is OK.

After the phtoggle, the disk starts a repetitive pattern of accesses, which
continue indefinitely until kermit starts dialing.


My last comment on 3.51m is that loading device drivers seems to take longer.
I have not verified this by a stopwatch (I will soon), but after each driver
is loaded, the system seems to wait for maybe 5 seconds before loading the
next.  I would not notice this, except that I have modified /etc/.drvload to
display to the screen rather than to /tmp/<whatever>.  I load two drivers:
lipc (SYSV IPC) and dup (Ford's /dev/fd/* device driver).  After each there
is the pause.  The modified .drvload follows:  (I do suggest installing it.)

#
#  called from /etc/rc to load drivers at boot time:
#	/etc/.drvload
#   requires:
#	/etc/master	(with entries for loadable devices)
#	/etc/lddrv	(directory)
#	/etc/lddrv/lddrv (setuid root)
#	/etc/lddrv/mkifile
#	/etc/lddrv/drivers
#	.o files for loadable drivers in /etc/lddrv
#
if [ ! -f /etc/lddrv/drivers ]
then
	exit
fi
cd /etc/lddrv
exec < drivers

find . -name unix.sym ! -newer /unix -exec rm {} \; 
if [ ! -r unix.sym ]
then
	echo creating unix.sym 
	./mkifile /unix unix.sym 
fi

# Addition by F. Dewey 5/86 to take care of drivers that cause a panic 
# during binding.  The name of the current driver is kept in /etc/current.driver
# so that if, on the reboot after a panic or hang, the file contains
# the name of a driver, that driver is removed from the /etc/drivers
# file for subsequent bootups.

if [ -s /etc/current.driver ]
then
	read driver </etc/current.driver
	rm -f /etc/current.driver
	echo "Removing problem driver $driver"
	grep -v $driver /etc/lddrv/drivers >/tmp/$$.drv
	mv /tmp/$$.drv /etc/lddrv/drivers
 	exec < drivers
fi

while read driver
do
	echo $driver >/etc/current.driver
	sync;sync;sync
	sleep 1

	if [ -z "$driver" ]
	then
		continue
	fi
	./lddrv -q $driver 
	if [ "$?" != "0" ]
	then
		./lddrv -av $driver 
		retcode="$?"
	else
		retcode="0"
	fi
	if [ \( "$retcode" = "0" \) -a \( -x ./${driver}.rc \) ]
	then
		./${driver}.rc 
		retcode="$?"
		if [ "$retcode" != "0" ]
		then
			./lddrv -dv $driver
		fi
	else
		if [ \( "$retcode" != "0" \) -a \( -x ./${driver}.brc \) ]
		then
			./${driver}.brc 
		fi
	fi
	if [ "$retcode" != "0" ]
	then
		echo "Error loading driver $driver"
	fi

	# if we got this far, the current driver didnt cause a panic or
	# system hang, so it is OK to remove it from the current driver.file.
	rm -f /etc/current.driver
done



exit 0
		Norman Yarvin		yarvin-norman at cs.yale.edu
  "The blastoff looked much like the Challenger, except it appeared to take
  place at night and there was no subsequent explosion"



More information about the Comp.sys.att mailing list