Bislang hatte ich neben mir auf dem Schreibtisch eine serielle Konsole von HP. Doch leider scheint sich der Hochspannungsteil verabschiedet zu haben, jedenfalls hoerte ich beim letzten Einschaltversuch nur noch ein leise zirpendes Geraeusch, dass sich gut mit einer Entladung erklaeren laesst -- und der Bildschirm blieb finster. Nicht, dass ich die Kiste nicht noch zu reparieren versuchen werde, aber fuer den Moment habe ich keine Zeit (und keine Lust auf Kondensatoren, an denen ein paar hundert Voelter anliegen koennten...). Und da in der elektronischen Bucht ein Igel schwamm, wurde er kurzerhand fuer ein kleines Taschengeld an Land gezogen.

Die Hardware und die Software

In einem schmalen, weisslich-vergilbten (Tribut an eBay) Metallgehaeuse daherkommend, Typenbezeichnung "IGEL 316 Compact", hinten brav aufgereiht TP-LAN, RS232, LPT, Audio, VGA, Keyboard, Maus, Strom (230V AC); vorn ein Smartcard-Reader nebst zweier USB-Anschluesse. Um von den aeusseren zu den inneren Werten zu kommen: Folgendes laesst sich ueber die Hard- und Software ergruenden (was nicht weiter schwer faellt, da netterweise ein XTerm sehr einfach zu haben ist):
root@stachelrechner:/proc >uname -a
Linux stachelrechner 2.4.21 #2 Die Okt 26 16:11:42 CEST 2004 i586 unknown
root@stachelrechner:/proc >cat version 
Linux version 2.4.21 (root@daisy) (gcc version 2.95.2 19991024 (release)) #2 Die Okt 26 16:11:42 CEST 2004
root@stachelrechner:/proc >cat cpuinfo 
processor       : 0
vendor_id       : Geode by NSC
cpu family      : 5
model           : 9
model name      : Geode(TM) Integrated Processor by National Semi
stepping        : 2
cpu MHz         : 300.680
cache size      : 16 KB
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 2
wp              : yes
flags           : fpu tsc msr cx8 cmov mmx cxmmx
bogomips        : 599.65
root@stachelrechner:/proc >cat meminfo 
        total:    used:    free:  shared: buffers:  cached:
Mem:  59502592 37613568 21889024        0   991232 14929920
Swap:        0        0        0
MemTotal:        58108 kB
MemFree:         21376 kB
MemShared:           0 kB
Buffers:           968 kB
Cached:          14580 kB
SwapCached:          0 kB
Active:           8196 kB
Inactive:        22332 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:        58108 kB
LowFree:         21376 kB
SwapTotal:           0 kB
SwapFree:            0 kB
root@stachelrechner:/proc >cat pci 
PCI devices found:
  Bus  0, device   0, function  0:
    Host bridge: Cyrix Corporation PCI Master (rev 0).
  Bus  0, device  15, function  0:
    Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 16).
      IRQ 15.
      Master Capable.  Latency=64.  Min Gnt=32.Max Lat=64.
      I/O at 0xef00 [0xefff].
      Non-prefetchable 32 bit memory at 0xfbffef00 [0xfbffefff].
  Bus  0, device  18, function  0:
    ISA bridge: Cyrix Corporation 5530 Legacy [Kahlua] (rev 48).
      Master Capable.  Latency=64.  
  Bus  0, device  18, function  1:
    Bridge: Cyrix Corporation 5530 SMI [Kahlua] (rev 0).
      Non-prefetchable 32 bit memory at 0x40012000 [0x400120ff].
  Bus  0, device  18, function  2:
    IDE interface: Cyrix Corporation 5530 IDE [Kahlua] (rev 0).
      I/O at 0xfc00 [0xfc7f].
  Bus  0, device  18, function  3:
    Multimedia audio controller: Cyrix Corporation 5530 Audio [Kahlua] (rev 0).
      Non-prefetchable 32 bit memory at 0x40011000 [0x4001107f].
  Bus  0, device  18, function  4:
    VGA compatible controller: Cyrix Corporation 5530 Video [Kahlua] (rev 0).
      Non-prefetchable 32 bit memory at 0x40800000 [0x40ffffff].
      Non-prefetchable 32 bit memory at 0x40010000 [0x40010fff].
  Bus  0, device  19, function  0:
    USB Controller: Compaq Computer Corporation ZFMicro Chipset USB (rev 6).
      IRQ 11.
      Master Capable.  Latency=64.  Max Lat=80.
      Non-prefetchable 32 bit memory at 0xfbfff000 [0xfbffffff].

...und schliesslich noch das Bootlog aus /prog/kmsg...
<4>Linux version 2.4.21 (root@daisy) (gcc version 2.95.2 19991024 (release)) #2 Die Okt 26 16:11:42 CEST 2004
<6>BIOS-provided physical RAM map:
<4> BIOS-e820: 0000000000000000 - 0000000000098800 (usable)
<4> BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
<4> BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
<4> BIOS-e820: 0000000000100000 - 0000000003c00000 (usable)
<4> BIOS-e820: 0000000003c00000 - 0000000004000000 (reserved)
<4> BIOS-e820: 0000000040000400 - 00000000400005a0 (reserved)
<4> BIOS-e820: 0000000040008000 - 0000000040009000 (reserved)
<4> BIOS-e820: 0000000040400000 - 0000000040800000 (reserved)
<4> BIOS-e820: 00000000fff10000 - 0000000100000000 (reserved)
<5>60MB LOWMEM available.
<4>On node 0 totalpages: 15360
<4>zone(0): 4096 pages.
<4>zone(1): 11264 pages.
<4>zone(2): 0 pages.
<4>Kernel command line: igel_syslog=quiet console=,1 bootversion=15
<6>Initializing CPU#0
<6>Working around Cyrix MediaGX virtual DMA bugs.
<4>Detected 300.684 MHz processor.
<4>Console: colour dummy device 80x25
<4>Calibrating delay loop... 599.65 BogoMIPS
<6>Memory: 58016k/61440k available (1126k kernel code, 3008k reserved, 771k data, 92k init, 0k highmem)
<4>Checking if this processor honours the WP bit even in supervisor mode... Ok.
<6>Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
<6>Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
<6>Mount cache hash table entries: 512 (order: 0, 4096 bytes)
<4>Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
<4>Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
<6>Working around Cyrix MediaGX virtual DMA bugs.
<7>CPU:     After generic, caps: 00808131 00818131 00000000 00000001
<7>CPU:             Common caps: 00808131 00818131 00000000 00000001
<4>CPU: NSC Geode(TM) Integrated Processor by National Semi stepping 02
<6>Checking 'hlt' instruction... OK.
<6>Checking for popad bug... OK.
<4>POSIX conformance testing by UNIFIX
<4>mtrr: v1.40 (20010327) Richard Gooch (rgooch@atnf.csiro.au)
<4>mtrr: detected mtrr type: none
<4>bios32_service(0x49435024): returned 0x81 -- BIOS bug!
<6>PCI: Using configuration type 1
<6>PCI: Probing PCI hardware
<6>PCI: Fixup for MediaGX/Geode Slave Disconnect Boundary (0x41=0x10)
<6>isapnp: Scanning for PnP cards...
<6>isapnp: No Plug & Play device found
<6>Linux NET4.0 for Linux 2.4
<6>Based upon Swansea University Computer Society NET3.039
<4>Initializing RT netlink socket
<6>apm: BIOS version 1.2 Flags 0x07 (Driver version 1.16)
<4>Starting kswapd
<6>parport0: PC-style at 0x378 [PCSPP(,...)]
<6>vesafb: framebuffer at 0x40800000, mapped to 0xc480d000, size 2400k
<6>vesafb: mode is 640x480x8, linelength=640, pages=2
<6>vesafb: protected mode interface info at c000:6f1b
<6>vesafb: scrolling: redraw
<4>ptr = c10f3400, len = 148, con = 0
<4>Console: switching to colour frame buffer device 74x2
<6>fb0: VESA VGA frame buffer device
<6>BIOS detected a device on the PS/2 Mouse Port.
<4>pty: 256 Unix98 ptys configured
<6>Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI ISAPNP enabled
<6>ttyS00 at 0x03f8 (irq = 4) is a 16550A
<6>ttyS01 at 0x02f8 (irq = 3) is a 16550A
<6>lp0: using parport0 (polling).
<6>Real Time Clock Driver v1.10e
<6>fl: Flash disk driver for DiskOnChip
<6>fl: DOC device(s) found: 1
<6>fl: _init: registered device at major: 62
<6>Partition check:
<6> fla: fla1
<6>fl: partition: 0: start_sect: 0, nr_sects: 7ca0 Fl_blk_size[]: 3e50kb
<6>fl: partition: 1: start_sect: 2, nr_sects: 7c9e Fl_blk_size[]: 3e4fkb
<6>fl: partition: 2: start_sect: 0, nr_sects: 0 Fl_blk_size[]: 0kb
<6>fl: partition: 3: start_sect: 0, nr_sects: 0 Fl_blk_size[]: 0kb
<6>Floppy drive(s): fd0 is 1.44M
<6>FDC 0 is a National Semiconductor PC87306
<6>Uniform Multi-Platform E-IDE driver Revision: 7.00beta4-2.4
<6>ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
<6>CS5530: IDE controller at PCI slot 00:12.2
<6>CS5530: chipset revision 0
<6>CS5530: not 100% native mode: will probe irqs later
<7>PCI: Setting latency timer of device 00:12.2 to 64
<6>    ide0: BM-DMA at 0xfc00-0xfc07, BIOS settings: hda:pio, hdb:pio
<6>    ide1: BM-DMA at 0xfc08-0xfc0f, BIOS settings: hdc:pio, hdd:pio
<6>NET4: Linux TCP/IP 1.0 for NET4.0
<6>IP Protocols: ICMP, UDP, TCP, IGMP
<6>IP: routing cache hash table of 512 buckets, 4Kbytes
<6>TCP: Hash tables configured (established 4096 bind 4096)
<6>NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
<4> IGEL flash structure on top of 3e:01
<4> 15951 blocks of 1024 bytes, 16333824 bytes total
<4>IGEL Flash Disk: testing 249 sections = 15936 KB of flash memory ...
<4>Number of clusters in part 1 -> 960
<4>Number of clusters in part 2 -> 960
<4>Number of clusters in part 3 -> 320
<4>IGEL Flash Disk: minor 1 version 0x1004 size 30720 blocks
<4>IGEL Flash Disk: minor 2 version 0x1004 size 30720 blocks
<4>IGEL Flash Disk: minor 3 version 0x1004 size 10240 blocks
<4>IGEL Flash Disk: driver initialised
<4>VFS: Mounted root (ext2 filesystem) readonly.
<6>Freeing unused kernel memory: 92k freed
<4>EXT2-fs warning: checktime reached, running e2fsck is recommended
<4>EXT2-fs warning: checktime reached, running e2fsck is recommended
<4>wfs: wfs successfully mounted
<4>EXT2-fs warning: checktime reached, running e2fsck is recommended
<6>8139too Fast Ethernet driver 0.9.26
<6>eth0: RealTek RTL8139 Fast Ethernet at 0xc4a7ef00, 00:e0:c5:6d:29:bf, IRQ 15
<7>eth0:  Identified 8139 chip type 'RTL-8139C'
<4>eepro100.c:v1.09j-t 9/29/99 Donald Becker http://www.scyld.com/network/eepro100.html
<4>eepro100.c: $Revision: 1.36 $ 2000/11/17 Modified by Andrey V. Savochkin  and others
<5>ne.c: You must supply "io=0xNNN" value(s) for ISA cards.
<6>ne2k-pci.c:v1.02 10/19/2000 D. Becker/P. Gortmaker
<6>  http://www.scyld.com/network/ne2k-pci.html
<6>pcnet32.c:v1.27a 10.02.2002 tsbogend@alpha.franken.de
<6>atnic32.c:v1.27b 11.07.2002 tsbogend@alpha.franken.de
<6>sundance.c:v1.01+LK1.06b 6-Nov-2002  Written by Donald Becker
<6>  http://www.scyld.com/network/sundance.html
<6>mice: PS/2 mouse device common for all mice
<6>usb.c: registered new driver usbdevfs
<6>usb.c: registered new driver hub
<6>usb.c: registered new driver hid
<6>hid-core.c: v1.8.1 Andreas Gal, Vojtech Pavlik 
<6>hid-core.c: USB HID support drivers
<6>usb.c: registered new driver usblp
<6>printer.c: v0.11: USB Printer Device Class driver
<6>cardman_usb.c v2.4.0beta1 support.linux@omnikey.com
<6>usb.c: registered new driver cardman
<6>usb-ohci.c: USB OHCI at membase 0xc4aaf000, IRQ 11
<6>usb-ohci.c: usb-00:13.0, Compaq Computer Corporation ZFMicro Chipset USB
<6>usb.c: new USB bus registered, assigned bus number 1
<6>hub.c: USB hub found
<6>hub.c: 2 ports detected
<6>CSLIP: code copyright 1989 Regents of the University of California
<6>PPP generic driver version 2.4.2
<6>SLIP: version 0.8.4-NET3.019-NEWTTY-MODULAR (dynamic channels, max=256) (6 bit encapsulation enabled).
<6>SLIP linefill/keepalive option.
<6>PPP Deflate Compression module registered
<6>PPP BSD Compression module registered
<6>PPP MPPE Compression module registered
<6>Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996
<5>sb: No ISAPnP cards found, trying standard ones...
<6>SB 4.12 detected OK (220)
<4>fg = 0, splash_console = 0
<4>ptr = c10f3400, len = 148, con = 0
<6>eth0: Setting 100mbps half-duplex based on auto-negotiated partner ability 40a1.
...das mit dem Half-Duplex scheint an dem antiquarischen Hub zu liegen, dan dem das stachelige Rechenwerk gerade haengt.
Um den Hostnamen zu setzen ist auch kein tiefschuerfendes Hacken und reverse-engineeren notwendig, das allumfassende Setup-Tool erlaubt das Setzen dieser Einstellung ohne weitere Umschweife. Der Graphikchipsatz schafft bis 1024x768; zugegeben, das ist heute nicht mehr viel und duerfte dem Alter geschuldet sein. Mit mehr Graphikspeicher koennte man da sicher auch weiter kommen, aber es ist halt keine Graphikworkstation, sondern primaer der Ersatz fuer meine dahingegangene Konsole.
Natuerlich fiel mein Augemerk auch auf die installierte Software und mit einer gewissen Neugierde auch auf die Frage "wie macht man das?". Also begann ich den Spass zu erkunden, wobei sich folgendes fand: Wenn ich mal ganz viel Zeit habe, will ich sowas mit einem FreeBSD nachbauen.... Zeit muesste man haben. Irgendwann nach den Pruefungen zeichnet sich etwas Luft ab...

Serielle Verbindung gesucht...

Aber, Ziel des Kaufes war nicht, mich zum Basteln zu animieren, sondern einen brauchbaren Ersatz fuer meine serielle Konsole zu haben. Also bin ich bei meinem ersten Streifzug gleich in das Setup zum Reiter "Sitzungen", habe auf "Hinzufuegen" geklickt und musste enttaeuscht feststellen, dass es dort nur die Auswahl zwischen

gibt. Tja, das Einzige was mir nun zu meinem Glueck fehlt, ist das, wofuer ich die Kiste gekauft habe -- eine billige serielle Sitzung. Grumpf.
Aber, man ist ja Bastler und Frickler und so bleibt schliesslich nur eines: Selber machen.

Der serielle Anschluss des IGELs

Erst einmal also die Frage: Wie kommt man an den seriellen Anschluss heran und funktioniert er auch. Das laesst sich recht einfach klaeren: Man nehme sich zwei XTerms, klemme den seriellen Anschluss geeignet an einem Maschine, die daruauf ein Interface anbietet (es war mein Ueber-Gecko, eine HPPA/RISC Visualize 2000, auf der ein OpenBSD laeuft).
Zum Test wurde dann in einem Terminal ein cat /de/ttyS0 und im anderen ein cat >/dev/ttyS0 veranstaltet. Ergebnis: Es funktioniert. Der ueble Beigeschmack: Es ist weder komfortabel, noch intuitiv noch kann man einen einfachen Editor bedienen, ohne sich zu verrenken. Aber -- grundsaetzlich war gezeigt, dass der serielle Anschluss des IGEL fuer meine Zwecke geeignet ist.

Kompilieren eines Terminalemulators

Mit dem Unterproblem "Kompilieren eines Programms fuer den IGEL".

Nachdem also in der gesamten, ueberschaubaren Menge der von den Machern mitgelieferten Software kein Terminalemulator vorhanden war (wozu auch; wenn eine solche Sitzung nicht angeboten wird?) stellte sich die Frage, wie man das Problem am geschicktesten angeht. Dabei ergeben sich die folgenden Ansaetze: a) selber schreiben, b) vorhandene Software portieren, c) Hersteller fragen.
Nachdem ich das Geraet allerdings gebraucht bei eBay gekauft habe und es seit 5 Jahren aus dem Herstellersupport ist, faellt Variante c aus. Also bleiben noch a und b. Nachdem mir klar wurde, dass a nontrivial ist (weil ich am Ende bei jedem Fehler fluchen und wieder in den Quellcode gehen werde, weil ich den Sonderfall (n+1) vergessen habe) bleibt nur noch b. Also portieren. Ein Kompiler scheint auf dem Igel ja vorhanden, jedenfalls gibt es ein Binary namens cpp, welches sich auch wie erwartet outet. Leider laeuft der Igel bereits beim Uebersetzeen eines Hello-World-Programms aus dem Speicher -- kein Wunder, wenn alles inklusive des laufenden Systems im RAM liegt -- und schliesst mir dann eine Anwendung nach der anderen, bis das Terminal versenkt wird, in dem ich zu kompilieren versuche. Also muss ich irgendeine andere Kiste finden, auf der ich ggf. Cross-Compiling betreibe. So eine Freude aber auch.
Oder ist der Igel in seinen Binaries vielleicht mit einem anderen System, welches bei mir herumsteht, kompatibel? Hoffnung breitet sich aus. Und Experimentierfreude.
Nachdem ich meine BSDs recht schnell ausschliessen konnte (der Igel kann NFS mounten, was die ganze Sache enorm vereinfacht), fiel mir mein uraltes Debian ein. Wobei Debian noch eine freundliche Uebertreibung ist: Es ist eine Festplatteninstallation von Knoppix. Und ich habe sie zuletzt in meinem ersten Semester angefasst -- bevor lando (http://lando.cc) mich mit FreeBSD (http://freebsd.org) infizierte und ich dabei blieb. Aber trotzdem habe ich die alte Installation aufgehoben...
Also das Linux gebootet, den gemeinsamen NFS-Mountpoint angepeilt und mal ein Hello-World-Programm uebersetzt und dem Igel zur Ausfuehrung ueberlassen -- es lief :)
Damit ist die Sache mit dem Crosscompiling schon mal vom Tisch. Erleichterung macht sich breit. Nun war Zeit fuer die zweite Frage: Welcher Terminalemulator darfs denn sein? Wie ueberall in der Welt der freien- und unixartigen Software gibt es 37 Loesungen fuer ein Problem. Die Kunst besteht nun darin, diejenigen Loesungen zu waehlen, welche jemals ueber den Zustand der "public beta" hinausgekommen sind und dabei auch noch die zu meiden, deren Entwickler keine Lust mehr zum Fehler ausbessern hat. Von meinem FreeBSD kenne ich cu (Call Unix) als kleines wie funktionierendes Prograemmchen. Was ich leider uebersah, war, dass es zu einem ganzen Paket an Programmen zur seriellen Kommunikation gehoert (mit uucp und anderen historischen Teilnehmern) -- und 2 Bibliotheken mitbringt. Ich habe es zwar auf dem Linux erfolgreich uebersetzen koennen, nachdem mir sh (http://memespace.net) bei der Suche nach dem Quellcode geholfen hat (auf apt-cache search haette ich eigentlich auch kommen koennen... Linux ist bei mir halt doch ne Weile her...). Das Asfuehren endete allerdings recht schnell, weil auf dem Igel eine andere glibc installiert war als auf meinem Linux. Hier boten sich nun zwei Moeglichkeiten an: Die Sache sauber regeln, indem ich fuer Gleichheit der libc-Versionen sorge -- oder aber einfach statisch linken.
Natuerlich entschloss ich mich fuer Letzteres.
Nur, um dann festzustellen, dass mit cu auf dem Igel auf keinen gruenen Ast zu kommen war. Es zeigte mir zwar saemtliche Ausgaben des Geckos, hat meine Eingaben aber schamvoll fuer sich behalten. Also nix da mit Bidirektionalitaet. Abheften, naechsten Delinquenten vorfuehren.
Nach ein wenig Umschauen auf den Debian-Paket-Seiten http://packages.debian.org fand sich dann unter http://packages.debian.org/de/lenny/picocom der Hinweis auf ein weiteres kleines Prograemmchen, dass deutlich weniger an Abhaengigkeiten hat: Nur die glibc. Also den Quelltext geladen, uebersetzt und auszufuehren versucht -- Pustekuchen, die Sache mit der glibc-Version. Also beim Linken noch ein -static eingefuegt, ein paar Warnings kassiert aber dafuer nun ein auf dem Igel rennendes Picocom bekommen.
Der mit Spannung erwartete Test -- es klappte. Igel goes serial.

Dauerhaftes Einbinden von picocom auf dem Igel

Nun lag also irgendwo im Netzwerk ein Binary fuer den Igel rum, dass eine serielle Konsole darstellte. Nun bleibt nur noch eine Kleinigkeit: Es so in das System zu integrieren, dass man eine Terminal-Sitzung starten kann, ohne picocom aus einem xterm haendisch zu starten.
Dazu waere der erste Schritt gewesen, das Programm nicht mehr irgendwo im Netzwerk sondern auf dem Igel selbst zu haben. Und zwar auf dem (sehr begrenzten) Flash-Speicher. Dieser ist unter /wfs gemountet. Also habe ich dort ein Verzeichnis bin/ erstellt und dorthinein das Picocom-Binary kopiert. Anschliessend habe ich mit dem Befehl cffswrite versucht, die Daten auf den Flash zu bringen -- leider ohne Erfolg. Die Idee stammt uebrigens von http://www.stefanobosio.ch/tc_rootca.html.

root@stachelrechner:/wfs/bin >cp /nfsmount/picocom ./
root@stachelrechner:/wfs/bin >cffswrite
wfs error: file /wfs/bin/picocom too big
wfs section 1: overflow
Also wird das wohl so nichts und ich werde weiter auf den NFS-Mountpoint angewiesen sein. Oder mich irgendwann doch einmal ueberwinden und schauen, wie gross das Binary wird, wenn ich es nicht statisch linke...
Also musste ein anderer Weg gefunden werden. Dieser bestand aus den folgenden Teilproblemen, die sich zu meiner groessten Freude alle mit dem Setup-Programm loesen liessen: Alternativ kann das Binary auch irgendwo per Samba oder von einem USB-Stick gemountet werden -- je nach Umgebung.

Die einfachere Alternative

Wie eigendlich immer, wenn man lange an einem Problem gesessen hat, faellt einem ploetzlich eine Loesung ein, die einfacher/eleganter/betriebssicherer gewesen waere. So natuerlich auch hier -- Igel bieten unter dem Namen des "Abbildens" an, den seriellen Anschluss 1:1 auf einen TCP-Port zu mappen. Eigentlich haette ich nur diese Funktion aktivieren muessen und schon kann ich aus dem ganzen Netzwerk per Telnet auf den seriellen Port des Igels zugreifen. Entsprechend haette eine lokale Sitzung nur eines telnet 127.0.0.1 3001 als von xterm auszufuehrendes Kommando bedurft. Nun ja, immerhin habe ich mich gruendlich mit einem netten kleinen System auseinandergesetzt :)

Stichworte:


Impressum