[[!meta copyright="Copyright © 2010,2011 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] This guide explains how to build and set up a DDE-based network card driver with Debian GNU/Hurd, if your (wired) network card is not supported by the old in-kernel drivers shipped with gnumach. This guide assumes that you have an installation of Debian GNU/Linux on the same machine, which helps in fetching the required packages in absence of working networking in the Hurd. The whole process is much more cumbersome otherwise. It also assumes that apart from networking, your Hurd system is already installed and operational. Start by booting into Debian GNU/Linux for some preparations: (as root) > $ mount /dev/hdd1 /mnt -t ext2 # assuming your Hurd partition is hdd1 -- replace with whatever matches your setup > $ cd /mnt/etc/apt > $ echo "deb http://ftp.debian-ports.org/debian unreleased main" >> sources.list > $ echo "deb-src http://ftp.debian-ports.org/debian unreleased main" >> sources.list > $ echo "deb http://ftp.uk.debian.org/debian unstable main" >> sources.list > $ echo "deb-src http://ftp.uk.debian.org/debian unstable main" >> sources.list > $ wget http://www.gnu.org/software/hurd/hurd/running/debian/DebianAptOffline/apt.conf.offline > $ cd /mnt > $ apt-get -c etc/apt/apt.conf.offline update > $ apt-get -c etc/apt/apt.conf.offline upgrade > $ apt-get -c etc/apt/apt.conf.offline install git-core > $ apt-get -c etc/apt/apt.conf.offline build-dep hurd gnumach > $ apt-get -c etc/apt/apt.conf.offline install build-essential libpciaccess-dev libpcap0.8-dev > $ cd /mnt/home > $ git clone git://git.sv.gnu.org/hurd/incubator.git -b dde hurd_dde > $ git clone git://git.sv.gnu.org/hurd/gnumach.git -b master-user_level_drivers gnumach_dde Now you need to get the actual driver from the Linux source tree. You have to find out which Linux driver is responsible for your network card, and which source file corresponds to this driver. In this guide we will use the forcedeth driver (for Nvidia nForce chipsets) as example. Download http://git.kernel.org/?p=linux/kernel/git/stable/linux-2.6.29.y.git;a=blob_plain;f=drivers/net/forcedeth.c;hb=HEAD and save under the file name forcedeth.c in /mnt/home (Note: the download from the Git URL above doesn't work with wget or other simple user agents without JavaScript. You will need to use Firefox or some such... Or figure out a better URL to get the file directly :-) ) Now everything should be in place, so we can boot into Hurd to do the actual work: (again as root) > $ apt-get update > $ apt-get upgrade > $ apt-get install git-core > $ apt-get build-dep hurd gnumach > $ apt-get install build-essential libpciaccess-dev libpcap0.8-dev (this part can be done as normal user) > $ cd /home/gnumach_dde > $ autoreconf -i && ./configure --enable-kdb --enable-device-drivers=none --enable-lpr --enable-floppy --enable-ide > $ make > $ cd ../hurd_dde > $ cp -r dde_pcnet32 dde_forcedeth > $ cd dde_forcedeth > $ rm pcnet32.c > $ cp /home/forcedeth.c ./ > $ sed -i 's/pcnet32/forcedeth/g' Makefile > $ sed -i 's/pcnet32/forcedeth/g' .gitignore > $ sed -i 's:-lhurd-slab:../libhurd-slab/libhurd-slab.a:' Makefile > $ sed -i 's:-I/include:-I..:' Makefile > $ nano forcedeth.c # Near the top of the file, there will be many #include lines. After the last one, add this: #include > $ cd .. > $ git add dde_forcedeth > $ git commit -a -m 'Add forcedeth driver' > $ autoreconf -i && ./configure > $ mkdir -p hurd/include/ddekit > $ make libddekit libmachdev devnode pfinet > $ cd libdde_linux26 > $ make > $ cd ../dde_forcedeth > $ make If the make fails it might be necassary to replace some of the -l options (or all) in Makefile with the real path to the library objects (example: change *-lhurd-slab* to *../libhurd-slab/libhurd-slab.a*) (as root) > $ cp /home/gnumach_dde/gnumach /boot/gnumach_dde > $ mkdir /hurd/dde > $ cp /home/hurd_dde/devnode/devnode /hurd/dde > $ cp /home/hurd_dde/pfinet/pfinet /hurd/dde > $ cp /home/hurd_dde/dde_forcedeth/dde_forcedeth /hurd/dde/forcedeth Now everything should be built. Before we can use the driver, we have to boot with the newly built gnumach_dde instead of the standard kernel. (Adapt your grub configuration; or manually edit the entry in the boottime grub menu while testing.) Once there, set up the translators for the driver: (as root) > $ settrans -c /dev/forcedeth /hurd/dde/forcedeth > $ settrans -c /dev/eth0 /hurd/dde/devnode -M /dev/forcedeth eth0 Finally, we can set up the actual network translator, using something like: > $ settrans -c /servers/socket/2 /hurd/dde/pfinet -i /dev/eth0 -a 192.168.1.194 -g 192.168.1.254 -m 255.255.255.0 For the exact syntax, see the normal network setup documentation. The only differences here are the different location of the pfinet binary, and the different syntax for the -i option.