[LINUX] Beginn des selbst erstellten Betriebssystems 1. Aufbau der Umgebung

Ja, machen wir ein Betriebssystem!

Also möchte ich ein Betriebssystem machen. Dieses Mal kommen wir zu einem GCC-Cross-Compiler.

Was vorzubereiten?

1. Abhängigkeitsinstallation

Installieren Sie zunächst die Abhängigkeiten.

Was Sie brauchen ist:

Sie können Curl verwenden, wie Sie möchten, z. B. wget.

$ sudo apt update
$ sudo apt -y install curl build-essential m4 libgmp3-dev libmpc-dev libmpfr-dev qemu qemu-kvm

2. Erstellen Sie gmp, mpfr, mpc, binutils

Machen Sie zuerst gmp. Es ist auf "--prefix = / usr / local / cc" gesetzt, aber Sie können es verwenden, wie Sie möchten. Ich denke jedoch, dass es besser ist, den durch dieses --prefix angegebenen Wert gmp, mpfr, mpc und binutils gemeinsam zu machen.

Zuerst von gmp.

gmp


$ curl --output gmp-6.2.0.tar.bz2 https://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.bz2
$ tar -xvf gmp-6.2.0.tar.bz2
$ cd gmp-6.2.0
$ ./configure --prefix=/usr/local/cc
$ make check && sudo make install
$ cd ..

Als nächstes machen Sie in der Reihenfolge von mpfr, mpc, binutils.

mpfr


$ curl --output mpfr-4.1.0.tar.bz2 https://ftp.gnu.org/gnu/mpfr/mpfr-4.1.0.tar.bz2
$ tar -xvf mpfr-4.1.0.tar.bz2
$ cd mpfr-4.1.0
$ ./configure --prefix=/usr/local/cc
$ make check && sudo make install
$ cd ..

mpc


$ curl --output mpc-1.2.0.tar.gz https://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz
$ tar -xvf mpc-1.2.0.tar.gz
$ cd mpc-1.2.0
$ ./configure --prefix=/usr/local/cc
$ make check && sudo make install
$ cd ..

binutils


$ curl --output binutils-2.35.tar.xz https://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.xz
$ tar -xvf binutils-2.35.tar.xz
$ cd binutils-2.35
$ ./configure --target=x86_64-elf --prefix=/usr/local/cc --disable-nls
$ make
$ make install
$ cd ..

3. Erstellen Sie gcc

Nun, endlich GCC machen. Hier sind einige Einschränkungen. Das erste ist, dass Sie in das gcc-Quellcode-Verzeichnis gehen und nicht ** . / Configure **. Wenn Sie das tun, können Sie make all-target-libgcc verwenden. Das zweite ist das Konfigurationsargument "--with-xxx". Geben Sie dazu das im vorherigen Schritt durch --prefix von gmp, mpfr, mpc angegebene Verzeichnis an. Das dritte ist das Argument "--with-as". Dies erfordert im Gegensatz zu anderen, dass Sie den ** Ausführungsbinärpfad ** direkt angeben.

gcc machen


$ curl --output gcc-10.2.0.tar.xz https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.xz
$ tar -xvf gcc-10.2.0.tar.xz
$ mkdir gcc-make-tmp
$ cd gcc-make-tmp
$ ../gcc-10.2.0/configure\
    --target=x86_64-elf\
    --prefix=/usr/local/cc\
    --disable-nls\
    --enable-languages=c\
    --without-headers\
    --with-gmp=/usr/local/cc\
    --with-mpfr=/usr/local/cc\
    --with-mpc=/usr/local/cc\
    --with-as=/usr/local/cc/bin/x86_64-elf-as #Geben Sie den Binärpfad des Befehls as an
    #Sie können ohne dies krank werden(stdio.h: no such file or directory.)
    #Fügen Sie hinzu, wenn Sie können
    # --with-headers=/usr/include\
    # --with-headers=/usr/include/x86_64-linux-gnu
$ #Es dauert sehr lange, also machen wir eine Teepause, während wir diesen Befehl ausführen.
$ make all-gcc && make install-gcc
$ make all-target-libgcc && make install-target-libgcc

4. Testen

$ export PATH=/usr/local/cc/bin:$PATH
$ x86_64-elf-gcc -v
Using built-in specs.
COLLECT_GCC=x86_64-elf-gcc
COLLECT_LTO_WRAPPER=/mnt/d/usr/local/cc/libexec/gcc/x86_64-elf/10.2.0/lto-wrapper
Target: x86_64-elf
Configured with: (Kürzung)
Thread model: single
Supported LTO compression algorithms: zlib
gcc version 10.2.0 (GCC)

Wenn eine solche Ausgabe erfolgt, ist sie erfolgreich. Danke für deine harte Arbeit.

5. Eindrücke

Ich hatte es schwer, weil es wenig Informationen gab. Besonders die letzte gcc-Marke war hart.

** Binutils aus der Quelle erstellen. ** ** **

Recommended Posts

Beginn des selbst erstellten Betriebssystems 1. Aufbau der Umgebung
[Memo] Bau einer Cygwin-Umgebung
Umgebungskonstruktion von Python2 & 3 (OSX)
[Django] Memorandum of Environment Construction Procedure
Erstellen einer Umgebung für Python3.8 auf einem Mac
Erstellen einer Umgebung für "Tello_Video" unter Ubuntu
Mac OS X Mavericks 10.9.5 Aufbau einer Entwicklungsumgebung
GeoDjango + SQLite-Umgebungskonstruktion unter OS X.
Mac OS X Yosemite 10.10 Aufbau einer Entwicklungsumgebung
Konstruktionsnotiz für die Mac OS X-Entwicklungsumgebung
Bau einer Entwicklungsumgebung für die Choreonoid-Werkstatt
DeepIE3D-Umgebungskonstruktion
Emacs-basierte Umgebungskonstruktion
Aufbau einer Linux-Umgebung
Umgebungskonstruktion (Python)
Django Umweltbau
CodeIgniter-Umgebungskonstruktion
Python-Umgebungskonstruktion
Python - Umgebungskonstruktion
Aufbau einer Python-Umgebung
Golang Umweltbau
Umgebungskonstruktion von word2vec
Installation von Python 3 und Flask [Zusammenfassung der Umgebungskonstruktion]
Poetry-Virtualenv-Umgebungskonstruktion mit Centos-Sclo-Rh-Python ~ Hinweise
Mac OS X Mountain Lion 10.8.5 Aufbau einer Entwicklungsumgebung
Umgebungskonstruktion: GCP + Docker
Bau der Django-Projektumgebung
Vereinheitlichung der Python-Umgebung
ConoHa Umweltbau Memo
Homebrew Python Umgebung Konstruktion
PyData-bezogene Umgebungskonstruktion
Aufbau einer Anaconda-4.2.0-Python3-Umgebung (Mac)
Aufbau einer Python-Entwicklungsumgebung
YOLO v4 Umgebungskonstruktion ①
Bau von Pyenv + Fischumwelt
python2.7 Konstruktion der Entwicklungsumgebung
BigGorilla Umwelt Bau Memo
Memorandum über die Umgebungskonstruktion der AutoML-Bibliothek PyCaret
Griffumgebungskonstruktion onCentOS6.5
Anaconda Umwelt Bau Memo
Golang Umweltbau [goenv]
Pyxel-Umgebungskonstruktion (Mac)
Python-Umgebungskonstruktion @ Win7
Erstellen einer lokalen Python-Entwicklungsumgebung Teil 2 (pyenv-virtualenv, Pip-Nutzung)
Kratzen Sie die reCAPTCHA-Site jeden Tag automatisch ab (1/7: Aufbau der Python-Umgebung)
Hinweise zum Erstellen einer Linux-Umgebung mit VirtualBox + Vagrant unter Windows 10
Aufbau einer Cortex-M-Entwicklungsumgebung für TOPPERS mit Raspeye
[Ubuntu 18.04] Aufbau einer Tensorflow 2.0.0-GPU-Umgebung
Python + Anaconda + Pycharm-Umgebungskonstruktion
Informationen zum Aufbau einer Linux-Umgebung (CentOS)
Python - Schneller Start der Protokollierung
Aufbau einer PyTorch C ++ (LibTorch) -Umgebung
Anaconda-Umgebungskonstruktion auf CentOS7
Django Entwicklungsumgebung Bau Memo