Linux/Dreamcast - SEGA LAN adapter (HIT-0300) driver

Information about the SEGA Dreamcast on my main website.

The latest driver for the SEGA LAN adapter is 0.0.7 02/28/2003.

Type of source Version Size
SEGA LAN adapter device driver: source code (tar.bz2) 0.0.7 02/28/2003 14.594 bytes
SEGA LAN adapter device driver: patch for linuxsh 2.4.13 (tar.bz2) 0.0.7 02/28/2003 15.464 bytes
SEGA LAN adapter device driver: patch for linuxsh 2.4.18 (tar.bz2) 0.0.7 02/28/2003 15.421 bytes
SEGA LAN adapter device driver: patch for linuxsh 2.4.19 (tar.bz2) 0.0.7 02/28/2003 15.421 bytes


This source code is released under the terms of the GNU General Public License.
As these drivers are ALPHA software they may have bugs, so it COULD block
yout dreamcast or leave the LAN adapter in an unsafe state.
If you think you've found a bug, please feel free and mail me a short
description of the circumstances which led to an unexpected behaviour.

USE THESE DRIVERS AT YOUR OWN RISK!

Have fun!
  Christian Berger (c.berger@tu-braunschweig.de)


Linux/Dreamcast - Goals

Ziel ist die Implementierung eines ADSL - Routers inklusive Firewall zur Versorgung eines Netzwerk aus einer Hand voll Rechnern, um Erfahrungen in embedded Linux zu sammeln.

Linux/Dreamcast - Schedule


Mir schwebt vor, dass ich zunächst eine Linux - Distribution für die Dreamcast entwickle, mit der ich den seriellen Anschluss als SLIP-Device nutzen kann. Diese Entwicklungen wollte ich über den dcserial - Server laden, um nicht zu viele CD-Rs zu verschwenden - bin ja ein armer Student... ;-)

Steht dann diese Distribution, wollte ich diese Distribution auf CD brennen und die Dreamcast damit laden. Dann wollte ich über das SLIP - Device die Dreamcast mit meinem Rechner verbinden, um die Entwicklung eines Treibers für den LAN - Adapters zu vereinfachen und mich mit der Dreamcast via Telnet zu verbinden.

Sollte der Treiber (irgendwann) funktionieren (ich hab noch nie einen Treiber geschrieben, aber irgendwann ist's immer das erste Mal), wollte ich die notwendigen Software - Pakete für Firewalling und PPPoE kompilieren und in eine neue Distribution schaufeln.

Milestone Getting Info Planning Implementing & Testing Pre - Alpha Alpha Beta Stable
Coders Cable testen.       - - -  
Dreamcast für Modul-
entwicklung vorbereiten.
             
Informationen über den
LAN-Adapter sammeln.
    - - - -  
Implementierung über
NetBSD oder Linux
vergleichen.
    - - - -  
Treiber für LAN - Adapter
schreiben oder in NetBSD
patchen.
             
Distribution zusammenstellen.              
Dokumentation... :-)              



Linux/Dreamcast - Diary


25.02.2003   Es funktioniert!!! Jippieh! Hab meinen ersten Treiber geschrieben! Das fühlt sich soooo toll an - der Wahnsinn. Eben gerade hat's geklappt.

Ich habe verschiedene Quellen kontaktiert. Unter anderem wären da zu nennen (wo ich mich auch gleich herzlich für bedanken möchte):

  • Christian Groessler samt seiner Korrespondenz bezüglich seines Treibers für NetBSD,
  • Dan Potter mit seiner Implementierung innerhalb seines KOS,
  • Datasheet MB8696x von Fujitsu,
  • Rubini und Corbet mit dem Buch Linux Device Drivers,
  • ... und natürlich weitere, unzählige OpenSource-Entwickler, deren Sourcen mir einen tieferen Einblick in das System gewährt haben.

    Ich muss sagen, dass es verdammt viel Spass gemacht hat, auch wenn der Weg zum Treiber ganz schön steinig war :-)

    In den nächsten paar Tagen werde ich hier einen Patch bereitstellen, der sich gegen die neusten linux-sh Quellen einspielen lässt. Dokumentation wollte ich auch noch zusammenstellen, mal sehen, wie das so klappt.
  • 31.10.2002   Soweit - so gut. Die SLIP - Verbindung läuft zu meiner vollsten Zufriedenheit. Es ist schon beeindruckend, Seiten wie www.kde-look.org oder www.freshmeat.net via Telnet auf der Dreamcast zu bewundern.

    Da ich einige Zeit aus gesundheitlichen sowie studiumstechnischen Gründen nicht weiter an der Dreamcast arbeiten konnte, zog sich dieser Eintrag nun knapp zehn Tage hin. Aber gut Ding will Weile haben... :-)

    Heute hab ich die Dreamcast - Kernelmodul - Entwicklungs - CD-ROM fertiggestellt. Das Linux - System ist jetzt so eingerichtet, dass es nach dem Laden selbständig das SLIP - Device einrichtet und den utelnetd - Prozess startet. Der nächste Schritt war es nun, meinen Host - Rechner so anzupassen, dass automatisch beim Systemstart die Gegenseite der SLIP - Verbindung geladen wird.

    Die letzte Hürde zu Beginn der Kernelmodulentwicklung ist die Dateiübertragung. Ich hab mehrere Varianten getestet:

  • FTP - Server auf der Dreamcast, FTP - Client auf dem Host
  • FTP - Client auf der Dreamcast, FTP - Server auf dem Host
  • HTTP - Server auf dem Host, wget auf der Dreamcast

    Die beiden oberen erschwerten die Entwicklung, da alle in Frage kommenden Clients oder Server auf proprietären Bibliotheken aufsetzten, die ich so ohne Weiteres nicht auf die Mini - Linux - Distribution für die Dreamcast bekam.

    Ich hab dann heute nochmal bei Freshmeat geschaut und Anti Web HTTPD gefunden, einen Mini - HTTPD - Server, der genau meinen Wünschen entspricht: Kompilieren, starten, fertig. Kurz noch mit Telnet auf die Dreamcast verbinden, um von dort mittels wget ein Testmodul (das schon bekannte hello_world.o) zu übertragen. Alles läuft wunderbar.

    Nachdem jetzt die Voraussetzungen geschaffen sind, stehe ich an einem Punkt, an dem ich mich entscheiden muss, ob ich mit Linux oder mit NetBSD weitermache. Für NetBSD spricht, dass es anscheinend schon einen Treiber für den HIT-300 - LAN - Adapter gibt, jedoch stellt sich das Cross Compiling für die SH4 -Architektur als sehr exotisch schwierig dar. Für Linux spricht, dass im Endeffekt alles vorbereitet ist und somit sofort mit der Treiberentwicklung begonnen werden kann - wenn ich das nur könnte.... :-/

    Naja, wie heisst es so schön: RTFM - Howtos gibt's ja genug...
  • 20.10.2002   Nachdem gestern die SLIP - Geschichte lief, war es nur noch eine Pflicht- aufgabe, einen telnet - Dämon zu übersetzen und in
    /etc/inittab
    einzubinden, damit bei jedem Systemstart dieser Dienst zur Verfügung steht.

    Des weiteren hab ich noch ein Beispielquelltext (HelloWorld) geschrieben, der die Modulfunktionen des Kernel demonstriert. Zu beiden Meilensteinen liegen die unten angegebenen Logs vor.

    Telnetsitzung
    Modul in den laufenden Kern einfügen
    hello_world.c
    19.10.2002   Heute hat meine Oma Geburtstag. Darum widme ich ihr den folgenden Meilenstein ganz besonders.

    SLIP - nein, nix versautes. SLIP bedeutet Serial Line Internet Protocol. Also auf eine serielle Verbindung gekapselte Internet Protocol - Pakete. Man muss sich das in etwa so vorstellen: Der User verwenden TCP/IP - typische Programme - angefangen vom ping, über telnet bis hin zu NFS. Alle diese Programme setzen, bildlich gesprochen, am Networklayer von Linux an. Wenn man nun SLIP verwendet, wird eine "virtuelle" Netzwerkkarte sl? erzeugt, über die mit den gängigen Network-Tools (ifconfig, route, ...) eine Grundkonfiguration erzeugt wird. Wandern nun Anfragen (Pakete) an dieses Interface (sl0 bespielsweise), werden diese Pakete über das SLIP - Protokoll verändert und an den das sl? - Device erzeugenden Prozess weitergeleitet.

    Dieser Prozess ist ein UserLand - Programm, welches als Parameter die Gerätedatei erhält, über die mit einer Gegenstelle über Modem oder Nullmodem kommuniziert werden soll. Erhält dieser Prozess nun veränderte IP - Pakete, werden diese über die serielle Schnittstelle versandt. Das ist eigentlich schon alles.

    Mini - HOWTO: SEGA Dreamcast: SLIP/Linux
    16.10.2002   Gestern bin ich günstig an einen älteren festplattenlosen Rechner gekommen (AMD-K6 233, 64MB RAM). Naja, schon länger wollte ich mal probieren, einen diskless X-client mit Linux zu basteln. Here we are:

    Man nehme einen handelsüblichen NFS-Server und richte dort ein spezielles Verzeichnis für den X-client ein, beispielsweise /remote/192.168.0.99
    Anschließend installiert/kopiert/tar't man sein Lieblingslinux in dieses Verzeichnis, insbesondere die Verzeichnisse
  • /bin
  • /dev
  • /lib
  • /etc
  • /sbin
  • /var
    Da in einigen Verzeichnissen Schreibrechte benötigt werden oder der Kernel sonst seinen init nicht findet, entbehrt sich hier ein Symlink.

    Anschließend wird auf dem NFS-Server in /etc/exports mittels
    /remote/192.168.0.99	192.168.0.99(rw,root_no_squash)

    dieses sog. NFS-Root exportiert. Jetzt muss dem Server noch in /etc/hosts.allow die Clients bekannt gegeben werden, die NFS importieren dürfen:

    /etc/hosts.allow
    ALL: 192.168.0.0/255.255.255.0: ALLOW
    

    Anschließend muss nur noch der NFS-Dienst gestartet werden und der Client kann bereits gebootet werden.

    Doch um auf dem Client auch was zu sehen, ist ein spezieller Kern zu backen. Dazu ist unter den Networking Options IP kernel auto configuration DHCP, BOOTP oder RARP je nach örtlichen Begebenheiten und unter Filesystems-->Network Filesystems ist den NFS-Client mit NFS-Root Option zu wählen. Nachdem der Kern mit samt den Modulen gebacken wurde, wird er mittels syslinux auf eine Startdiskette (mir lag die Erstellung eines BootROMs für die die Netzwerkkarte fern... ;-) gebannt:

    mknod /dev/boot255 c 0 255
    rdev /usr/src/linux/arch/i386/boot/bzImage /dev/boot255
    
    mkfs.msdos /dev/fd0 
    syslinux -s /dev/fd0
    mount -t msdos /dev/fd0 /mnt/floppy
    cp /usr/src/linux/arch/i386/boot/bzImage /mnt/floppy/linux
    
    cat <<. > /mnt/floppy/syslinux.cfg
    default linux
    append init=/sbin/init root=/dev/nfs nfsroot=server-ip:/path/to/remote ip=Host-IP:Server-IP:GW-IP:Netmask
    .
    
    umount /dev/fd0
    

    Den plattenlosen Dummy mit der Diskette booten und feststellen, dass /home, /root, /usr, /opt fehlen und evtl. Dienste in /remote/192.168.0.99/etc/rc.d/XYZ abgestellt werden müssen.

    Um die fehlenden Verzeichnisse einzupflegen, wird auf dem NFS - Server einfach für die entsprechenden Verzeichnisse ein Eintrag vorgenommen:
    /remote/192.168.0.99	192.168.0.99(rw,root_no_squash)

    /usr	192.168.0.99(ro,root_no_squash)

    /home	192.168.0.99(rw,root_no_squash)

    ...

    Jetzt muss lediglich noch die Datei /remote/192.168.0.99/etc/fstab mit den exportierten Verzeichnissen angepasst werden und der User ist glücklich.
    Die gewünschte X-Session wird entweder über startx oder über XFree86 -query Server-IP gestartet.
    Have fun!

    Das wollte ich schon immer mal gemacht haben... ;-)
  • 15.10.2002   Coupling.... ;-)
    14.10.2002   So, der heutige Abend kann beginnen. Die Erstsemester der ersten Runde sind beraten :-), hab's geschafft, mich zum Sprachkurs Business English anzumelden und mein Auto hat auch seine Winterpuschen drauf. Endlich kann ich mich mal wieder meiner Neugierde widmen.

    Heute wollte ich es wissen. Kann ich mit diesem dcload - Tool ein CD - ISO auf die Dreamcast redirecten? Nur ein Bild anzeigen - dafür hab ich keine 25 Euro ausgegeben. Nachdem ich versucht hab, mehrere Demoversionen diverser Spiele zu laden - dies schlug alles fehl -, bin ich auf www.linuxdevices.com fundig geworden: ein Mini - HOWTO mit der Beschreibung, wie man sich ein kleines Linux mit BusyBOX bastelt und auf einer Dreamcast ausführt.

    Die Anweisungen konnte ich fast Schritt für Schritt übernehmen. Lediglich den letzten Schritt - CD brennen und in die Dreamcast einlegen - ließ ich weg und ersetze ihn durch:

    [christian@Rechner1 SERIAL-LINK]$ dc-tool-serial-1.0.3-linux -t /dev/ttyS1 -e -b 115200 -x kernel-boot.bin
    


    Nach knapp zwei Minuten war der Bootloader, der Kernel und ein ramdisk - Abbild auf die Dreamcast übertragen. Jetzt folgte der spannendste Moment: Die Dreamcast zeigte
    Executing...
    und rührte sich knapp 10 Sekunden gar nicht. Mein PC zeigte:

    Console enabled
    Alternate 115200 enabled
    Changing speed to 115200 bps... done
    Upload 
    File format is raw binary, start address is 0x8c010000
    send_data: CCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUCUUCUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUCCUC
    effective: 11344.764609 bytes / sec
    Executing at <0x8c010000>
    Sending execute command (0x8c010000, console=1)...executing
    [christian@Rechner1 SERIAL-LINK]$
    


    Doch dann lachte er mich an: Der Hitachi-Tux:

    Meine erste eigene Dreamcast - Linux - Distribution war über das serielle Kabel zur Konsole geflogen -YEAH!

    Jetzt stelle ich mir die weiteren Schritte ungefähr wie folgt vor:

  • Den Standardkern verwerfen und eigene Konfigurationseinstellungen testen,
       insbesondere den Treiber fmv18x.c, da laut Kommentaren der
       Chipsatz dem auf dem LAN-Adapter entspricht.
  • Den seriellen Anschluss unter Linux testen, um darüber eine SLIP-Verbindung
       zum Host-PC aufbauen zu können.
  • Notwendige Programme dem ramdisk - Abbild hinzufügen, um mit der Linux-
       Distribution weiter zu entwickeln, insbesondere ftp und
        telnet - Daemonen.
  • 13.10.2002  
    Nachtrag
    00:d0:f1:02:16:23

    Das ist die MAC - Adresse meines LAN - Adapters. Er ist technisch einwandfrei! - Jippieh... Hab auf einer Dreamcast - Development -Seite ein dcload für den LAN - Adapter gefunden. Kurz auf CD gebrannt und getestet - schon wurde ich vom idle... - Prompt des dcloads begrüßt.

    Die Entwicklung kann beginnen!
    13.10.2002   Die letzte Woche meiner Semesterferien bricht an. Morgen muss ich an die Uni, Fragen der neue Erstsemestler beantworten. Meine Klausuren hab ich Gott sei Dank hinter mir, und nun kann ich mich endlich mit den Dingen beschäftigen, die mich schon lange brennend interessieren. Ich möchte aus einer Dreamcast einen ganz normalen ADSL - Router basteln. Warum ich das mache? Nun, "Langeweile" nennen es die einen, "verrückt" die anderen, ich nenne es Neugierde. Ich könnte mir ja auch einen handelsüblichen Hardware - Router kaufen, doch das kann ja jeder. Zudem ist es ein Reiz, neben der mir schon bekannten Intel - Plattform mal eine neue - die Hitachi SH7750 CPU - kennenzulernen. Die Hardware hab ich für ca. 200 Euro als Auslaufmodelle vor gar nicht langer Zeit im Spielzeughandel erworben. Dazu zählt die Dreamcast selbst, ein LAN - Adapter (HIT-300), ein VGA - Adpater, eine Tastatur und das Coders Cable (serielles Verbindungskabel zwischen PC und Dreamcast).

    Da meine Klausuren alle geschrieben sind, konnte ich mich erst jetzt mit dieser Aufgabe auseinander setzen. Heute hab ich mein "Rechenzentrum", sprich die Dreamcast und meinen PC so aufgebaut, dass ich damit vernünftig entwickeln kann. Dabei stellte ich fest, dass die Hersteller von Tastaturen und Mäusen wohl davon ausgehen, dass man Tower generell rechts von sich aufbaut, da die Kabel beider Eingabeperipherie viel zu kurz sind. Naja. Es geht.

    Die Dreamcast funktioniert. Jedenfalls mit Spielen. Soweit konnte ich das schon am Fernseher testen. Das VGA - Kabel geht auch. Doch wie steht es mit dem teuren, aus Japan importierten Coders Cable und dem LAN - Adapter? Das Kabel könnte man testen, doch die zum LAN - Adapter mitgelieferte CD will partout nicht laden.

    Heute wollte ich auf jeden Fall meine serielles Kabel testen. Dazu bietet sich dcload von Andrew Kieschnick an. Das Programm setzt sich aus einem Server für die Dreamcast, der die Daten empfängt und ausführt, und einem Client für eine *nix - kompatibles Betriebssystem (Linux :-) zusammen. Der Server wird auf eine CD gebrannt und in die Dreamcast eingelegt. Wird die Dreamcast gebootet, meldet sich sich mit dcload - idle...

    Nun muss die hungrige Dreamcast nur noch vom PC aus gefüttert werden. Ich habe lange gesucht, was ich an die Dreamcast senden soll, bis ich auf einer französischen Homepage ein Programm gefunden hatte, das lediglich ein Bild anzeigt. Aber das war schon ein Erfolg. Das Kabel funktionierte und ich konnte für heute Feierabend machen... ;-)

    Konsole - Log:
    -----------------------------------------------------------------
    [christian@Rechner1 SERIAL-LINK]$ dc-tool-serial-1.0.3-linux -t /dev/ttyS1 -e -b 115200 -x ex.bin
    Console enabled
    Alternate 115200 enabled
    Changing speed to 115200 bps... done
    Upload 
    File format is raw binary, start address is 0x8c010000
    send_data: CCCCCCCCCCCCCCCCCCCC
    effective: 16968.254446 bytes / sec
    Executing at <0x8c010000>
    Sending execute command (0x8c010000, console=1)...executing
    
    --
    KallistiOS 1.1.7: Fri May 10 11:30:48 2002
      Sébastien@HAL:/usr/local/dc/kos
    maple: active drivers:
        VMU Driver: Clock, LCD, MemoryCard
        Mouse Driver: Mouse
        Keyboard Driver: Keyboard
        Controller Driver: Controller
      DMA Buffer at ac051160
    vid_set_mode: 640x480 NTSC
    ROMFS image recognized. Full size is 0x5420 bytes
      Checksum is 0xbe243f01
      Volume ID is ``rom 3ce92ff1''
      File entries begin at offset 0x20
    dc-load console support enabled
    maple: attached devices:
      A0: Dreamcast Controller          (01000000: Controller)
      D0: Keyboard                      (40000000: Keyboard)
    pvr: initialized PVR buffers:
      texture RAM begins at 005cb380
      vertex/vertex_size: 00000000/00080000
      opb base/opb_size: 000d0580/00059b80
      opbs per type: 000d0580 80000000 000d5080 80000000 80000000
      tile_matrix/tile_matrix_size: 00133700/00001c68
      frame/frame_size: 00135380/00096000
      vertex/vertex_size: 00400000/00080000
      opb base/opb_size: 004d0580/00059b80
      opbs per type: 004d0580 80000000 004d5080 80000000 80000000
      tile_matrix/tile_matrix_size: 00533700/00001c68
      frame/frame_size: 00535380/00096000
      list_mask 00100202
      opb sizes per type: 00004b00/00000000/00004b00/00000000/00000000
      w/h = 640/480, tw/th = 20/15
      zclip 38d1b717
      pclip_left/right 00000000/0000027f
      pclip_top/bottom 00000000/000001df
      opb_completed_full 00000005
      Using poly buffers 000d0580/80000000/000d5080/80000000/80000000
      Using poly buffers 004d0580/80000000/004d5080/80000000/80000000
    pvr: disabling vertical scaling for VGA
    [christian@Rechner1 SERIAL-LINK]$
    -----------------------------------------------------------------
    

    Die Ausgabe war:


    *nices rule!

     Christian Berger