Benutzer-Werkzeuge

Webseiten-Werkzeuge


projects:gforth-as-pid-one:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projects:gforth-as-pid-one:start [2014-08-31 16:18] – [FAQ] casprojects:gforth-as-pid-one:start [2014-10-21 16:17] (aktuell) – [gforth mit diet-libc bauen] cas
Zeile 80: Zeile 80:
 cr .( editor loaded ) cr cr .( editor loaded ) cr
 </code> </code>
 +
 +==== Tastaturbelegung ====
 +
 +Der Standard-Linux-Kernel startet mit einer Tastaturbelegung für US-amerikanische Tastaturen. Um eine deutsche Tastaturbelegung zu bekommen, sind folgende Optionen:
 +
 +  * beim Kompilieren des Linux-Kernels die Datei "drivers/tty/vt/defkeymap.map" anpassen. Die Keymap-Dateien finden im Linux unter "/usr/share/keymaps"
 +  * Unter GForth mittels der Syscalls die Funktion des Linux-Programmes "loadkeys" nachbauen, um die Linux-Tastaturtabelle zu setzen
 +  * Unter Forth einen neuen Tastaturtreiber schreiben, welcher die Zeichen von US-amerikanisch auf deutsche Tastatur anpasst.
 +
 +Ein einfacher Tastaturtreiber:
 +
 +<code>
 +\ german keyboard mapping
 +
 +create keytab $100 allot
 +keytab $100 erase
 +
 +: keytrans: char keytab + c! ;
 +: keyb-de key dup keytab + c@ dup if swap then drop ;
 +' keyb-de IS xkey
 +
 +\ Incomplete german keyboard mapping
 +char z keytrans: y
 +char y keytrans: z
 +char " keytrans: @
 +char ö keytrans: ;
 +char Ö keytrans: :
 +char ä keytrans: '
 +char Ä keytrans: "
 +char ü keytrans: [
 +char Ü keytrans: {
 +char ; keytrans: <
 +char : keytrans: >
 +char # keytrans: \
 +char * keytrans: }
 +char } keytrans: +
 +char ' keytrans: |
 +char ? keytrans: _
 +char ( keytrans: *
 +char ) keytrans: (
 +char - keytrans: /
 +char = keytrans: )
 +char & keytrans: ^
 +char / keytrans: &
 +char _ keytrans: ?
 +</code>
 +===== Linux Syscalls aus GForth für amd64-64bit Linux =====
 +
 +<code>
 +abi-code sys-getpid
 +  -8 di d) r8 lea  \ adjust data stack pointer for new value
 +      39 # ax mov  \ getpid syscall is "39"
 +    $0F c, $05 c,  \ syscall
 +      ax r8 ) mov  \ move result to data-stack (pointer in R8)
 +        r8 ax mov  \ return new data-stack pointer in AX
 +              ret  \ return from call
 +end-code
 +
 +abi-code sys-sync
 +     162 # ax mov  \ sync syscall is "162"
 +    $0F c, $05 c,  \ syscall
 +        di ax mov  \ return data-stack pointer unchanged
 +              ret  \ return from call
 +end-code
 +
 +abi-code sys-poweroff
 +       169 # ax mov  \ reboot syscall is "169"
 + $fee1dead # di mov  \ magic 1
 +  85072278 # si mov  \ magic 2
 + $4321fedc # dx mov  \ command (poweroff)
 +      $0F c, $05 c,  \ syscall
 +                ret  \ we don't expect to come back
 +end-code
 +
 +abi-code sys-reboot
 +       169 # ax mov  \ reboot syscall is "169"
 + $fee1dead # di mov  \ magic 1
 +  85072278 # si mov  \ magic 2
 + $01234567 # dx mov  \ command (reboot)
 +      $0F c, $05 c,  \ syscall
 +                ret  \ we don't expect to come back
 +end-code
 +
 +\ re-define bye
 +: bye sys-sync sys-poweroff ;
 +</code>
 +
 ===== Linux Syscalls aus GForth für ia86-32bit Linux ===== ===== Linux Syscalls aus GForth für ia86-32bit Linux =====
  
Zeile 135: Zeile 222:
         search --no-floppy --fs-uuid --set=root 3413a572-49e9-47f0-9a27-fb3daa7c13b2         search --no-floppy --fs-uuid --set=root 3413a572-49e9-47f0-9a27-fb3daa7c13b2
         echo    'Loading GNU/Forth ...'         echo    'Loading GNU/Forth ...'
-        linux   /vmlinuz root=/dev/sda3 rw fbcon=font:SUN12x22 init=/bin/gforth +        linux   /vmforth root=/dev/sda3 rw fbcon=font:SUN12x22 init=/bin/gforth
-        echo    'Loading initial ramdisk ...' +
-        initrd  /initrd.img+
 } }
 +</code>
 +
 +  * Frage: welche Minimalanforderungen an den Rechner hat gforth-na?
 +  * Antwort: bei Benutzung eines (selbstkompilierten) 2.6.x Linux-Kernels: 386SX CPU mit 4 MB Hauptspeicher
 +
 +===== gforth mit diet-libc bauen =====
 +
 +diet-libc ist eine minimale kleine C-Runtime Library mit der statisch gelinkte, kleine Binaries erzeugt werden koennen. Anbei die Schritte, um das aktuelle gforth aus Bernds git Repository mit der diet-libc zu bauen. 
 +
 +Der "make" Durchgang schlaegt beim kompilieren des gforth-itc fehl. An dieser Stelle ist aber das normale gforth binary schon gebaut und kann installiert werden.
 + 
 +<code>
 +# cd /usr/src
 +# wget http://www.fefe.de/dietlibc/dietlibc-0.33.tar.bz2
 +--2014-10-21 15:42:56--  http://www.fefe.de/dietlibc/dietlibc-0.33.tar.bz2
 +Resolving www.fefe.de (www.fefe.de)... 2001:4d88:ffff:ffff:d0:b723:863f:2, 31.15.64.162
 +Connecting to www.fefe.de (www.fefe.de)|2001:4d88:ffff:ffff:d0:b723:863f:2|:80... connected.
 +HTTP request sent, awaiting response... 200 Coming Up
 +Length: 626885 (612K) [application/octet-stream]
 +Saving to: ‘dietlibc-0.33.tar.bz2’
 +
 +100%[==================================================================================>] 626,885      531KB/  in 1.2s   
 +
 +2014-10-21 15:42:57 (531 KB/s) - ‘dietlibc-0.33.tar.bz2’ saved [626885/626885]
 +
 +# tar xvfj dietlibc-0.33.tar.bz2
 +# make
 +# install bin-i386/diet /usr/local/bin
 +# export CC="diet gcc"
 +# git clone https://github.com/forthy42/gforth.git
 +# cd gforth
 +# autoreconf -i
 +# ./configure
 +# make
 +</code>
 +
 +Der "make" Befehl schlaegt beim bauen von gforth-itc fehl, das normale "gforth" Programm konnte aber schon gebaut werden.
 +
 +<code>
 +# make install
 +# strip $(which gforth)
 +# file $(which gforth-0.7.9_20140402)
 +/usr/local/bin/gforth-0.7.9_20140402: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), statically linked, BuildID[sha1]=19f1d32b09820cd21bc9f2ee552491f51f878fd8, stripped
 +# ls -l $(which gforth-0.7.9_20140402)
 +-rwxr-xr-x 1 root root 143496 Oct 21 16:06 /usr/local/bin/gforth-0.7.9_20140402
 </code> </code>
  
projects/gforth-as-pid-one/start.1409494684.txt.gz · Zuletzt geändert: 2014-08-31 16:18 von cas