Benutzer-Werkzeuge

Webseiten-Werkzeuge


projects:gforth-as-pid-one:start

Dies ist eine alte Version des Dokuments!


Gforth als Prozess 1 unter Linux

USB-Stick oder SD-Karte mit GForth almost native

Die Installation von GForth 'almost native' für x86-32Bit wurde für i686 Rechner (Pentium-Pro und neuer) kompiliert. Getestet wurde auf einem Thinkpad X60 und einen NoName Laptop mit VIA C7 CPU.

Bei Fragen und Verbesserungsvorschlägen bitte eine E-Mail an gforth-an@strotmann.de.

Anleitung Dateien

Anleitung zum erstellen einen USB-Stick oder SD-Karte unter Linux

  1. USB Stick oder SD-Karte einstecken, Gerätename per „dmesg“ herausfinden (im folgenden /dev/sdb1 bitte gegen den eigenen Gerätenamen austauschen. ACHTUNG, bei falschem Gerätenamen droht Datenverlust!)
  2. die Software „syslinux“ als Paket installieren (per yum, apt-get, emerge etc)
  3. eine primäre Partition auf dem Stick anlegen (wenn nicht schon vorhanden)
  4. Partition mit dem EXT2 Dateisystem formatieren % mkfs.ext2 /dev/sdb1
  5. Partition anhängen '% mount /dev/sdb1 /mnt
  6. Dateien auf die Partition spielen cd /mnt; tar cvfz gforth-almost-native-20140815.tgz; sync; cd;
  7. extlinux installieren % extlinux -i /mnt
  8. Bootsektor installieren % cat /usr/share/syslinux/mbr.bin > /dev/sdb
  9. Partition aushängen % umount /mnt
  10. USB-Stick ausprobieren

GForth 'almost native' Dateien vom 20140815 (12.5 MB)

Anleitung Dateisystem-Abbild

  1. USB-Stick oder SD-Karte einstecken (mind. 512 MB), Gerätename per „dmesg“ herausfinden (im folgenden /dev/sdb1 bitte gegen den eigenen Gerätenamen austauschen. ACHTUNG, bei falschem Gerätenamen droht Datenverlust!)
  2. Image auf das Gerät spielen gzcat gforth-almost-native-20140815.img.gz | dd bs=1M > /dev/sdb
  3. USB-Stick oder SD-Karte ausprobieren

GForth 'almost native' USB-Stick Image (512MB) vom 20140815 (37 MB)

Blocks und Datei-IO unter gforth-an

Wenn GNU/Forth (gforth) unter Linux als PID-1 gestartet wird, so ist ein Dateizugriff auf das Dateisystem des USB-Sticks oder der Festplatte möglich.

GNU/Forth Blocks sind im gforth-Handbuch Dokumentiert: https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Blocks.html.

Wird keine explizite Datei für die Blocks angegeben, wir werden die Blocks in die Datei „blocks.fb“ auf dem Datenträger geschrieben, von dem gforth-an gestartet wurde (z.B. dem USB-Stick).

Die Datei-IO Worte des gforth orientieren sich am ANSI-Forth Standard und sind im Handbuch unter https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Files.html dokumentiert.

Es können so viele Blocks erstellt werden, wie Speicherplatz auf dem Datenträger frei ist.

Linux Syscalls aus GForth für ia86-32bit Linux

abi-code sys-getpid ( -- pid ) \ get process ID for gforth
   20  #   ax mov  \ get-pid syscall
   $80 #      int  \ execute syscall
   ax      cx mov  \ save result
   4 sp d) ax mov  \ get stackpointer
   4 #     ax sub  \ make space for result on stack
   cx    ax ) mov  \ move result to stack
              ret  \ return from code
end-code

abi-code sys-reboot ( -- ) \ shutdown and reboot machine
       88 # ax mov  \ reboot syscall
$fee1dead # bx mov  \ magic 1
 85072278 # cx mov  \ magic 2
$01234567 # dx mov  \ command (restart)
      $80 #    int  \ execute syscall
               ret  \ we don't expect to come back
end-code

abi-code sys-poweroff ( -- ) \ shutdown and poweroff machine
       88 # ax mov  \ reboot syscall
$fee1dead # bx mov  \ magic 1
 85072278 # cx mov  \ magic 2
$4321fedc # dx mov  \ command (poweroff)
      $80 #    int  \ execute syscall
               ret  \ we don't expect to come back
end-code

abi-code sys-sync ( -- ) \ commit buffer cache to disk
  36 #      ax mov  \ sync syscall
 $80 #         int  \ execute syscall
  4 sp d)   ax mov  \ return stackpointer
               ret  \ return
end-code

\ redefine "bye"
: bye sys-sync sys-poweroff ;
projects/gforth-as-pid-one/start.1409494000.txt.gz · Zuletzt geändert: 2014-08-31 16:06 von cas