[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Trying out http://people.debian.org/~tfheen/d-i



Herbert Xu <herbert@gondor.apana.org.au> wrote:
> 
> With PCI/USB devices, we really should be using the module system to
> autodetect (i.e., the hotplug approach).  There is no point in duplicating
> all the information in another list when the modules themselves have
> it.  To start with, just look at /lib/modules/2.4.19-386/modules.pcimap.

Here's a script that takes the list of modules and pcimap from the kernel
packages, mixes it with the description from pci.ids to produce a
ethpci.list for ddetect.

The advantage of this is that for all the PCI network devices that we
actually have modules for, we are guaranteed to have an entry in this
list with the correct module name.  It's also true that we won't have
an entry in this list if the card is not supported by one of our modules.

The modlist file can be obtained by doing

cat modules/nic-modules* > modlist

in an unpacked kernel-image-2.4.19-i386 source tree.

The resulting list when run against 2.4.19-3 can be downloaded from

http://gondor.apana.org.au/~herbert/debian/ethpci.list
-- 
Debian GNU/Linux 3.0 is out! ( http://www.debian.org/ )
Email:  Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
#!/bin/sh

set -e

usage() {
	echo "Usage: $0 <modlist> <pcimap> <pciids>" >&2
	exit 1
}

cleanup() {
	[ $TMPDIR ] && rm -r $TMPDIR
}

mesh='
	function read() {
		while (1) {
			if ((getline < f) <= 0) {
				eof = 1
				return
			}

			if (/^[^\t]/) {
				v = substr($0, 1, 4)
				h = v " " substr($0, 7)
				continue
			}

			if (/^\t\t/)
				continue

			break
		}

		n = v substr($0, 2, 4)
		d = substr($0, 8)
	}

	BEGIN {
		f = ARGV[1]
		ARGV[1] = ""

		read()
	}

	{
		m = $1
		u = $2
		p = $3
		k = u p

		while (!eof && n < k)
			read()

		if (v == u) {
			if (h)
				print h
		} else {
			v = u
			print v
		}
		h = ""

		print "\t" k "\tethernet\t" m "\t" (n == k ? d : p)
	}
'

[ $# -ge 3 ] || usage

modlist=$1
pcimap=$2
pciids=$3

trap cleanup EXIT
for i in INT HUP TERM; do
	trap "cleanup; kill -$i $$" $i
done
TMPDIR=$(mktemp -d)

sed 's%.*/%%; s/..$//' $modlist | sort > $TMPDIR/c
tail +2 $pcimap | sort | join -o 1.1,1.2,1.3 - $TMPDIR/c | sort -k 2,3 |
	sed -n 's/ 0x0000/ /; t n; :n; s/ 0x0000/ /; t g; b; :g; p' > $TMPDIR/d
sed -n '/^#/d; /^0000/,/^ffff/p' $pciids > $TMPDIR/e
awk "$mesh" $TMPDIR/e $TMPDIR/d



Reply to: