Subject: Son of diskless boot
To: None <port-i386@NetBSD.ORG>
From: maximum entropy <entropy@zippy.bernstein.com>
List: port-i386
Date: 05/23/1997 02:44:00
I'm still working on getting this system to come up cleanly using
netboot.com (the libsa version).  If I configure and build a system
and boot it with netboot, the system can't determine its boot device,
hence it can't determine its root device.

At the point where it stops, the kernel prints:
boot device: <unknown>
root device:

I have to manually enter "ep0" at the root device prompt, then it asks
me:
file system (default nfs):

and I tap return.  Things then proceed normally.

So as I said the last time I brought this up, I tried the following
config line (and several variations) to explicitly specify where the
root device is:

config	netbsd root on ep0 type nfs

But config complains:

tanstaafl# config FOO
FOO85: netbsd says root on ep0, but there's no ep0
*** Stop.

Is there a correct way to do what I mean, or have I encountered a bug
in config?

As a workaround, I manually edited swapnetbsd.c after doing a config:

#include <sys/param.h>
#include <sys/conf.h>

const char *rootspec = "ep0";
dev_t   rootdev = NODEV;        /* wildcarded */
dev_t   dumpdev = NODEV;        /* unspecified */

struct  swdevt swdevt[] = {
        { NODEV, 0, 0 },        /* unspecified */
        { NODEV, 0, 0 }
};

extern int nfs_mountroot __P((void));
int (*mountroot) __P((void)) = nfs_mountroot;


As you can see, I changed rootspec from NULL to "ep0".  With that
minor change, the system boots without manual intervention:

boot device: <unknown>
nfs_boot: using network interface 'ep0'
nfs_boot: client_addr=0xce1453ce
nfs_boot: server_addr=0xce1453c1
nfs_boot: hostname=tanstaafl

I'd like to learn the "real" way to do this, as manually editing
swapnetbsd.c each time is a real pain.  Unfortunately NetBSD doesn't
seem to have a chapter in the SMM for config...and the one from the
4.4BSD-Lite is hopelessly out of date.

Can anyone give me a clue?

Thanks,
entropy

p.s.: system is -current, network card is 3c509.

p.p.s.:  Here is my config file:
#	$NetBSD: GENERIC,v 1.74 1997/03/26 01:16:23 perry Exp $
#
#	GENERIC -- everything that's currently supported
#

include "arch/i386/conf/std.i386"

#options		I386_CPU	# CPU classes; at least one is REQUIRED
options		I486_CPU
#options		I586_CPU
#options		I686_CPU
#options		MATH_EMULATE	# floating point emulation
options	VM86		# Virtual 8086 emulation

# Some BIOSes don't get the size of extended memory right.  If you
# have a broken BIOS, uncomment the following and set the value
# properly for your system.
#options	BIOSEXTMEM=...	# size of extended memory

#options	DUMMY_NOPS	# speed hack; recommended
options		XSERVER,UCONSOLE
options		INSECURE	# insecure; allow /dev/mem writing for X

maxusers	32		# estimated number of users
options		RTC_OFFSET=0	# hardware clock is this many mins. west of GMT
#options	NTP		# NTP phase/frequency locked loop

options		DDB		# in-kernel debugger
#makeoptions	DEBUG="-g"	# compile full symbol table
options		DIAGNOSTIC	# internal consistency checks
options		KTRACE		# system call tracing, a la ktrace(1)

options		SYSVMSG		# System V-like message queues
options		SYSVSEM		# System V-like semaphores
options		SYSVSHM		# System V-like memory sharing
#options	SHMMAXPGS=1024	# 1024 pages is the default

options		COMPAT_NOMID	# compatibility with 386BSD, BSDI, NetBSD 0.8,
options		COMPAT_09	# NetBSD 0.9,
options		COMPAT_10	# NetBSD 1.0,
options		COMPAT_11	# NetBSD 1.1,
options 	COMPAT_12	# NetBSD 1.2,
options		COMPAT_43	# and 4.3BSD
options		TCP_COMPAT_42	# TCP bug compatibility with 4.2BSD

#options		COMPAT_SVR4	# binary compatibility with SVR4
#options		COMPAT_IBCS2	# binary compatibility with SCO and ISC
options		COMPAT_LINUX	# binary compatibility with Linux
options		COMPAT_FREEBSD	# binary compatibility with FreeBSD

options		EXEC_ELF32	# 32-bit ELF executables (SVR4, Linux)

options		USER_LDT	# user-settable LDT; used by WINE
#options		LKM		# loadable kernel modules

file-system 	FFS		# UFS
#file-system 	LFS		# log-structured file system
file-system 	MFS		# memory file system
file-system 	NFS		# Network File System client
file-system 	CD9660		# ISO 9660 + Rock Ridge file system
file-system 	MSDOSFS		# MS-DOS file system
file-system 	FDESC		# /dev/fd
file-system 	KERNFS		# /kern
file-system 	NULLFS		# loopback file system
#file-system 	PORTAL		# portal filesystem (still experimental)
file-system 	PROCFS		# /proc
#file-system 	UMAPFS		# NULLFS + uid and gid remapping
file-system 	UNION		# union file system

#options		QUOTA		# UFS quotas
options		NFSSERVER	# Network File System server
options		FIFO		# FIFOs; RECOMMENDED

#options	GATEWAY		# packet forwarding
options		INET		# IP + ICMP + TCP + UDP
#options	MROUTING	# IP multicast routing
#options		NS		# XNS
#options	NSIP		# XNS tunneling over IP
#options		ISO,TPIP	# OSI
#options		EON		# OSI tunneling over IP
#options		CCITT,LLC,HDLC	# X.25
#options	PFIL_HOOKS	# pfil(9) packet filter hooks

#config		netbsd	root on ? type ?
config		netbsd	root on ? type nfs
#options	COMCONSOLE=0,CONADDR=0x3f8,CONUNIT=0,CONSPEED=9600

options 	EISAVERBOSE	# verbose EISA device messages
#options 	PCIVERBOSE	# verbose PCI device messages

mainbus0 at root

#pci0	at mainbus0 bus ?
eisa0	at mainbus0

#ppb*	at pci? dev ? function ?	# PCI-PCI bridges
#pci*	at ppb? bus ?
#pchb*	at pci? dev ? function ?	# PCI-Host bridges
#pcib*	at pci? dev ? function ?	# PCI-ISA bridges

#isa*	at pcib?			# ISA on PCI-ISA bridge
isa*	at mainbus0			# all other ISA

#apm0	at mainbus0			# Advanced power management

npx0	at isa? port 0xf0 irq 13	# math coprocessor

#pc0	at isa? port 0x60 irq 1		# generic PC console device
vt0	at isa? port 0x60 irq 1

com0	at isa? port 0x3f8 irq 4	# standard PC serial ports
com1	at isa? port 0x2f8 irq 3
com2	at isa? port 0x3e8 irq 5
#com3	at isa? port 0x2e8 irq 9
#ast0	at isa? port 0x1a0 irq 5	# AST 4-port serial cards
#com*	at ast? slave ?
#boca0	at isa? port 0x100 irq 5	# BOCA 8-port serial cards
#com*	at boca? slave ?
#rtfps0	at isa? port 0x1230 irq 10	# RT 4-port serial cards
#com*	at rtfps? slave ?
#cy0	at isa? iomem 0xd4000 irq 12	# Cyclades serial cards
#cy*	at pci? dev ? function ?	# Cyclades serial cards
  
lpt0	at isa? port 0x378 irq 7	# standard PC parallel ports
lpt1	at isa? port 0x278
lpt2	at isa? port 0x3bc

lms0	at isa? port 0x23c irq 5	# Logitech bus mouse
lms1	at isa? port 0x238 irq 5
mms0	at isa? port 0x23c irq 5	# Microsoft InPort mouse
mms1	at isa? port 0x238 irq 5
#pms0	at pckbd? irq 12		# PS/2 auxiliary port mouse

#aha0	at isa? port 0x330 irq ? drq ?	# Adaptec 154[02] SCSI controllers
#aha1	at isa? port 0x334 irq ? drq ?	# Adaptec 154[02] SCSI controllers
#scsibus* at aha?
#ahb*	at eisa? slot ?			# Adaptec 174[024] SCSI controllers
#scsibus* at ahb?
#ahc0	at isa? port ? irq ?		# Adaptec 284x SCSI controllers
ahc*	at eisa? slot ?			# Adaptec 274x, aic7770 SCSI controllers
#ahc*	at pci? dev ? function ?	# Adaptec [23]94x, aic78x0 SCSI controllers
scsibus* at ahc?
#aic0	at isa? port 0x340 irq 11	# Adaptec 152[02] SCSI controllers
#scsibus* at aic?
#bha0	at isa? port 0x330 irq ? drq ?	# BusLogic [57]4X SCSI controllers
#bha1	at isa? port 0x334 irq ? drq ?	# BusLogic [57]4X SCSI controllers
#bha*	at eisa? slot ?
#bha*	at pci? dev ? function ?
#scsibus* at bha?
#ncr*	at pci? dev ? function ?	# NCR 538XX SCSI controllers
#scsibus* at ncr?
#sea0	at isa? iomem 0xc8000 irq 5
#scsibus* at sea?
#uha0	at isa? port 0x330 irq ? drq ?	# UltraStor [13]4f SCSI controllers
#uha1	at isa? port 0x334 irq ? drq ?	# UltraStor [13]4f SCSI controllers
#uha*	at eisa? slot ?			# UltraStor 24f SCSI controllers
#scsibus* at uha?
#wds0	at isa? port 0x350 irq 15 drq 6	# WD7000 and TMC-7000 controllers
#wds1	at isa? port 0x358 irq 11 drq 5
#scsibus* at wds?
#isp*	at pci? dev ? function ?	# Qlogic ISP 10x0 SCSI controllers
#scsibus* at isp?

sd*	at scsibus? target ? lun ?	# SCSI disk drives
st*	at scsibus? target ? lun ?	# SCSI tape drives
cd*	at scsibus? target ? lun ?	# SCSI CD-ROM drives
ch*	at scsibus? target ? lun ?	# SCSI autochangers
ss*	at scsibus? target ? lun ?	# SCSI scanners
uk*	at scsibus? target ? lun ?	# SCSI unknown

fdc0	at isa? port 0x3f0 irq 6 drq 2	# standard PC floppy controllers
#fdc1	at isa? port 0x370 irq ? drq ?
fd*	at fdc? drive ?

#mcd0	at isa? port 0x300 irq 10	# Mitsumi CD-ROM drives

wdc0	at isa? port 0x1f0 irq 14	# ST506, ESDI, and IDE controllers
wdc1	at isa? port 0x170 irq ?
wd*	at wdc? drive ?

# note: the wt driver conflicts unpleasantly with ed devices at the
# same I/O address. The probe reprograms their eeproms. Don't
# uncomment it unless you are actually using it.
#wt0	at isa? port 0x300 irq 5 drq 1	# Archive and Wangtek QIC tape drives

#ed0	at isa? port 0x280 iomem 0xd0000 irq 9	# WD/SMC, 3C503, and NE[12]000
#ed1	at isa? port 0x250 iomem 0xd8000 irq 9	#   ethernet cards
#ed2	at isa? port 0x300 iomem 0xcc000 irq 10
#eg0	at isa? ...				# 3C505 ethernet cards
#el0	at isa? port 0x300 irq 9		# 3C501 ethernet cards
ep0	at isa? port ? irq ? 			# 3C509 ethernet cards
#ie0	at isa? port 0x360 iomem 0xd0000 irq 7	# StarLAN and 3C507
#ie1	at isa? port 0x300 irq 10		# EtherExpress
#le0	at isa? port 0x320 irq 10 drq 7		# IsoLan, NE2100, and DEPCA
#ep*	at eisa? slot ?				# 3C579 ethernet cards
#fea*	at eisa? slot ?				# DEC DEFEA FDDI cards
#le*	at pci? dev ? function ?		# PCnet-PCI based ethernet cards
#de*	at pci? dev ? function ?		# DC21X4X-based ethernet cards
#ep*	at pci? dev ? function ?		# 3C590 ethernet cards
#fpa*	at pci? dev ? function ?		# DEC DEFPA FDDI cards

#pss0	at isa? port 0x220 irq 7 drq 6  # Personal Sound System
#sp0	at pss0 port 0x530 irq 10 drq 0	# 	sound port driver

#sb0	at isa? port 0x220 irq 7 drq 1	# SoundBlaster
#wss0	at isa? port 0x530 irq 10 drq 0	# Windows Sound System
#pas0	at isa? port 0x220 irq 7 drq 1	# ProAudio Spectrum
#gus0	at isa? port 0x220 irq 7 drq 1 flags 6 # Gravis Ultra Sound (flags is record drq for full-duplex)
#spkr0	at pckbd? port 0x61

# Joystick driver. Probe is a little strange; add only if you have one.
#joy0	at isa? port 0x201

# PnP bus and devices should be declared last 
#isapnp0	at isa? 
#ep*	at isapnp?
#sb*	at isapnp?
#joy*	at isapnp?

include	"arch/i386/conf/GENERIC.local"

pseudo-device	loop	1		# network loopback
pseudo-device	bpfilter 8		# packet filter
pseudo-device	sl	2		# CSLIP
pseudo-device	ppp	2		# PPP
pseudo-device	tun	2		# network tunneling over tty
#pseudo-device	ipfilter		# ip filter

pseudo-device	pty	64		# pseudo-terminals
pseudo-device	tb	1		# tablet line discipline
pseudo-device	vnd	4		# paging to files
pseudo-device	ccd	4		# concatenated disk devices


--
entropy -- it's not just a good idea, it's the second law.