Einführung
KolibriOS ist ein Miniaturbetriebssystem, dessen Kernel und die meisten Programme in Assemblersprache geschrieben sind. Dies bedeutet natürlich nicht, dass es unmöglich ist, für KolibriOS in anderen Programmiersprachen zu schreiben.
Dieser Artikel ist eine Anleitung zum Einrichten einer Toolchain für Linux.
Lasst uns beginnen
Dazu müssen Sie Folgendes herunterladen:
- Toolchain (Compiler)
- FTP SDK (Bibliotheken)
- SDK mit SVN
Erstellen Sie einen Ordner / home / USER / autobuild (wobei USER der Benutzername ist). Als nächstes erstellen wir einen Link:
sudo ln -s /home/USER/autobuild /home/autobuild
Gehen wir zu / home / autobuild. Erstellen Sie einen Verzeichnisbaum / home / autobuild / tools / win32. Laden Sie die obige Toolchain herunter und entpacken Sie sie in / home / autobuild / tools / win32. Laden Sie als Nächstes das SDK von FTP herunter und entpacken Sie es über / home / autobuild / tools / win32 / lib und / home / autobuild / tools / win32 / mingw32 / lib (an zwei Stellen - da beide Pfade in Makefiles verwendet werden). Jetzt kommt der lustige Teil.
SVN herunterladen
Markieren Sie einen Ordner. Ich werde es hier als / home / USER / KOS_SVN bezeichnen. Im Terminal ausführen:
cd /home/USER/KOS_SVN
svn co svn://kolibrios.org
Sie müssen warten, bis der gesamte SVN heruntergeladen wurde.
Vorbereitung für die Kompilierung
Um die Tools verwenden zu können, müssen Sie den Pfad zum Ordner mit den Tools in der Umgebungsvariablen "PATH" in der Datei "/ etc / environment" registrieren.
sudo nano /etc/environment
Und am Ende der Datei hinzufügen:
:/home/autobuild/tools/win32/bin
Sie müssen auch die libisl- Bibliothek herunterladen :
wget http://board.kolibrios.org/download/file.php?id=8301libisl.so.10.2.2.7z && 7z x file.php?id=8301libisl.so.10.2.2.7z
sudo mv libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu && sudo ln -s /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2 /usr/lib/x86_64-linux-gnu/libisl.so.10
sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10 && sudo chmod go-w /usr/lib/x86_64-linux-gnu/libisl.so.10.2.2
Ein weiteres bekanntes Problem:
/home/autobuild/tools/win32/bin/../libexec/gcc/mingw32/5.4.0/cc1: Fehler beim Laden gemeinsam genutzter Bibliotheken: libmpfr.so.4: freigegebene Objektdatei kann nicht geöffnet werden: Nein solche Datei oder Verzeichnis
Korrigiert durch Link:
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
Zusammenstellung
Beispielprogramme befinden sich in / home / USER / KOS_SVN / contrib / sdk / samples. Nehmen wir zum Beispiel Kairo. Gehen wir zum Ordner und sagen make . Wenn alles erfolgreich ist, wird die Cairo- Binärdatei in dem Ordner angezeigt, der in KolibriOS ausgeführt wird.
Noch ein Beispiel
hallo.c :
#include <kos32sys.h>
char* title = "Window";
void _draw_window(){
BeginDraw();
DrawWindow(100,100,400,200,title,0x80ffffff,0x13);
EndDraw();
}
int main()
{
_draw_window();
for (;;)
{
switch(get_os_event())
{
case 1:
_draw_window();
continue;
case 2:
// key pressed, read it and ignore
get_key();
continue;
case 3:
// button pressed; we have only one button, close
if(get_os_button() == 1) return 0;
continue;
}
}
}
Das folgende Makefile funktioniert dafür (ersetzen Sie Leerzeichen durch Tabulatoren):
CC = kos32-gcc
LD = kos32-ld
SDK_DIR:= /home/USER/KOS_SVN/contrib/sdk
LDFLAGS = -static -S -nostdlib -T $(SDK_DIR)/sources/newlib/app.lds --image-base 0
CFLAGS = -c -fno-ident -O2 -fomit-frame-pointer -fno-ident -U__WIN32__ -U_Win32 -U_WIN32 -U__MINGW32__ -UWIN32
INCLUDES= -I $(SDK_DIR)/sources/newlib/libc/include
LIBPATH:= -L $(SDK_DIR)/lib -L /home/autobuild/tools/win32/mingw32/lib
SOURCES = hello.c \
$(NULL)
OBJECTS = $(patsubst %.c, %.o, $(SOURCES))
default: hello.kex
hello.kex: $(OBJECTS) Makefile
$(LD) $(LDFLAGS) $(LIBPATH) --subsystem native -o hello.kex $(OBJECTS) -lgcc -lc.dll
objcopy hello.kex -O binary
%.o : %.c Makefile $(SOURCES)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $<
Wenn Sie Probleme haben, schreiben Sie in die Kommentare.