Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:linux:buildroot:zoom:dev [2020-09-24 09:10] ditarantosoftware:linux:buildroot:zoom:dev [2022-09-07 14:07] (aktuell) fabian.ditaranto
Zeile 1: Zeile 1:
 ====== Cross-Compilieren für das Zoom-Board =================== ====== Cross-Compilieren für das Zoom-Board ===================
-Hier wird gezeigt, wie auf dem Host Applikationen und Kernel-Module für das Zoom-Board übersetzt werden können. +Hier wird gezeigt, wie auf dem Host Applikationen und Kernel-Module für das [[https://wiki.bu.ost.ch/inf/zoomboard/start|ZOOM-Board]] übersetzt werden können. 
 <box 97% | Buildroot-Toolchain> <box 97% | Buildroot-Toolchain>
  
Zeile 9: Zeile 9:
 <box 95% | Buildroot-Toolchain installieren> <box 95% | Buildroot-Toolchain installieren>
 <code="bash"> <code="bash">
-sudo mkdir -p /opt/zoom +sudo mkdir -p /opt/zoom 
-cd /opt/zoom +cd /opt/zoom 
-sudo wget -c ftp://inf004.ntb.ch/zoom/buildroot-toolchain.tar.bz2 +sudo wget -c ftp://inf004.ost.ch/zoom/buildroot-toolchain.tar.bz2 
-sudo tar xjf buildroot-toolchain.tar.bz2 +sudo tar xjf buildroot-toolchain.tar.bz2 
-sudo rm -rf ./buildroot-toolchain.tar.bz2 +sudo rm -rf ./buildroot-toolchain.tar.bz2 
-./buildroot-toolchain/bin/arm-buildroot-linux-gnueabi-gcc -v+./buildroot-toolchain/bin/arm-buildroot-linux-gnueabi-gcc -v
 </code> </code>
 Der letzte Befehl sollte folgende Version ausgeben: Der letzte Befehl sollte folgende Version ausgeben:
Zeile 22: Zeile 22:
 <box 95% | Wichtige Pfade für die Bash-Kommandozeile global verfügbar machen> <box 95% | Wichtige Pfade für die Bash-Kommandozeile global verfügbar machen>
 <code="bash"> <code="bash">
-sudo nano ~/.bashrc+sudo nano ~/.bashrc
 </code> </code>
 Am Ende der Datei folgenden Inhalt einfügen: Am Ende der Datei folgenden Inhalt einfügen:
Zeile 31: Zeile 31:
 export PATH=$PATH:/opt/zoom/buildroot-toolchain/lib/ export PATH=$PATH:/opt/zoom/buildroot-toolchain/lib/
 </code> </code>
-Speichern, Editor verlassen und Terminal schliessen.+Speichern, Editor verlassen und **Terminal schliessen(!)**.
  
 <box 95% | Zum Testen der Buildroot-Toolchain (Lokaler Compiler & Cross-Compiler):> <box 95% | Zum Testen der Buildroot-Toolchain (Lokaler Compiler & Cross-Compiler):>
 <code="bash"> <code="bash">
-mkdir -p ~/workspace/zoom/test +mkdir -p ~/workspace/zoom/test 
-cd ~/workspace/zoom/test +cd ~/workspace/zoom/test 
-nano hello.c+nano hello.c
 </code> </code>
 Folgenden Inhalt einfügen: Folgenden Inhalt einfügen:
Zeile 50: Zeile 50:
 Nun das File für den lokalen Rechner kompilieren: Nun das File für den lokalen Rechner kompilieren:
 <code="bash"> <code="bash">
-gcc hello.c -o hello +gcc hello.c -o hello 
-./hello+./hello
 </code> </code>
 Der letzte Befehl sollte nun auf der Kommandozeile des lokalen Rechners ein Der letzte Befehl sollte nun auf der Kommandozeile des lokalen Rechners ein
Zeile 59: Zeile 59:
 \\ Jetzt noch einen symbolischen Link erstellen, um eine Fehlermeldung zu vermeiden: \\ Jetzt noch einen symbolischen Link erstellen, um eine Fehlermeldung zu vermeiden:
 <code="bash"> <code="bash">
-sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4+sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
 </code> </code>
 <box 97% | Hinweis> <box 97% | Hinweis>
-**Falls der letzte Befehl folgende Fehlermeldung ausgibt...** +Falls der letzte Befehl folgende Fehlermeldung ausgibt... 
-\\ ''ln: failed to create symbolic link '/usr/lib/x86_64-linux-gnu/libmpfr.so.4': File exists'' +\\ \\ ''ln: failed to create symbolic link '/usr/lib/x86_64-linux-gnu/libmpfr.so.4': File exists'' 
-\\ **..., dann wurde der symbolische Link bereits erstellt. Die Fehlermeldung kann somit ignoriert und weitergemacht werden.**+\\ \\ ..., dann wurde der symbolische Link bereits erstellt. Die Fehlermeldung kann somit ignoriert und es kann weitergemacht werden.
 </box> </box>
 \\ Nun dasselbe File für das Zoom-Board crosskompilieren, danach auf das Zoom-Board übertragen und danach das kompilierte File direkt auf dem Zoom-Board ausführen: \\ Nun dasselbe File für das Zoom-Board crosskompilieren, danach auf das Zoom-Board übertragen und danach das kompilierte File direkt auf dem Zoom-Board ausführen:
 <code="bash"> <code="bash">
-/opt/zoom/buildroot-toolchain/bin/arm-buildroot-linux-gnueabi-gcc-4.7.3 hello.c -o hello +/opt/zoom/buildroot-toolchain/bin/arm-buildroot-linux-gnueabi-gcc-4.7.3 hello.c -o hello 
-scp hello root@<meinZoomBoardHostName>:/media/ram +scp hello root@<meinZoomBoardHostName>:/media/ram 
-ssh root@<meinZoomBoardHostName>+ssh root@<meinZoomBoardHostName>
 </code> </code>
 Passwort: **toor** Passwort: **toor**
Zeile 76: Zeile 76:
 \\ Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus: \\ Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus:
 <code="bash> <code="bash>
-cd /media/ram +cd /media/ram 
-./hello+./hello
 </code> </code>
 Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein
Zeile 87: Zeile 87:
 <box 97% | Userspace Anwendungen mit CMake> <box 97% | Userspace Anwendungen mit CMake>
 <code="bash"> <code="bash">
-mkdir -p ~/workspace/zoom/test/application +mkdir -p ~/workspace/zoom/test/application 
-cd ~/workspace/zoom/test/application +cd ~/workspace/zoom/test/application 
-nano hello.c+nano hello.c
 </code> </code>
 Folgenden Inhalt einfügen: Folgenden Inhalt einfügen:
Zeile 104: Zeile 104:
 </code> </code>
 Speichern und Editor verlassen. Speichern und Editor verlassen.
 +\\ 
 +\\ 
 +Folgendes File erstellen:
 <code="bash"> <code="bash">
-nano  CMakeLists.txt+nano  CMakeLists.txt
 </code> </code>
 Folgenden Inhalt einfügen: Folgenden Inhalt einfügen:
Zeile 118: Zeile 120:
  
 <code="bash"> <code="bash">
-mkdir -p ~/workspace/zoom/test/application/build +mkdir -p ~/workspace/zoom/test/application/build 
-cd ~/workspace/zoom/test/application/build +cd ~/workspace/zoom/test/application/build 
-cmake -DCMAKE_TOOLCHAIN_FILE=/opt/zoom/buildroot-toolchain/share/buildroot/toolchainfile.cmake .. +cmake -DCMAKE_TOOLCHAIN_FILE=/opt/zoom/buildroot-toolchain/share/buildroot/toolchainfile.cmake .. 
-make +make 
-scp hello root@<meinZoomBoardHostName>:/media/ram +scp hello root@<meinZoomBoardHostName>:/media/ram 
-ssh root@<meinZoomBoardHostName>+ssh root@<meinZoomBoardHostName>
 </code> </code>
 Passwort: **toor** Passwort: **toor**
Zeile 129: Zeile 131:
 \\ Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus: \\ Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus:
 <code="bash> <code="bash>
-cd /media/ram +cd /media/ram 
-./hello+./hello
 </code> </code>
 Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein
Zeile 140: Zeile 142:
 <box 95% | Linux Kernel Quellcode herunterladen und vorbereiten> <box 95% | Linux Kernel Quellcode herunterladen und vorbereiten>
 <code> <code>
-cd /opt/zoom +cd /opt/zoom 
-sudo wget -c ftp://inf004.ntb.ch/zoom/linux.tar.gz +sudo wget -c ftp://inf004.ost.ch/zoom/linux.tar.gz 
-sudo tar xzf linux.tar.gz +sudo tar xzf linux.tar.gz 
-sudo rm -rf linux.tar.gz +sudo rm -rf linux.tar.gz 
-cd linux +cd linux 
-export ARCH=arm +export ARCH=arm 
-export CROSS_COMPILE=arm-buildroot-linux-gnueabi- +export CROSS_COMPILE=arm-buildroot-linux-gnueabi- 
-make da850_omapl138_defconfig +make da850_omapl138_defconfig 
-sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4 +sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4 
-make modules_prepare+</code> 
 +<box 97% | Hinweis> 
 +Falls der letzte Befehl folgende Fehlermeldung ausgibt... 
 +\\ \\ ''ln: failed to create symbolic link '/usr/lib/x86_64-linux-gnu/libmpfr.so.4': File exists'' 
 +\\ \\ ..., dann wurde der symbolische Link bereits erstellt. Die Fehlermeldung kann somit ignoriert und es kann weitergemacht werden. 
 +</box> 
 +<code> 
 +make modules_prepare
 </code> </code>
 </box> </box>
Zeile 156: Zeile 165:
 <box 95% | Kernelmodul erstellen> <box 95% | Kernelmodul erstellen>
 <code="bash"> <code="bash">
-mkdir -p ~/workspace/zoom/test/kernelModule +mkdir -p ~/workspace/zoom/test/kernelModule 
-cd ~/workspace/zoom/test/kernelModule +cd ~/workspace/zoom/test/kernelModule 
-nano helloMod.c+nano helloMod.c
 </code> </code>
 Folgenden Inhalt einfügen: Folgenden Inhalt einfügen:
Zeile 168: Zeile 177:
 MODULE_SUPPORTED_DEVICE("none"); MODULE_SUPPORTED_DEVICE("none");
 MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
-MODULE_AUTHOR("urs.graf@ntb.ch");+MODULE_AUTHOR("urs.graf@ost.ch");
  
 static int hello_init(void) { static int hello_init(void) {
Zeile 184: Zeile 193:
 Speichern und Editor verlassen. Speichern und Editor verlassen.
 <code="bash"> <code="bash">
-nano Makefile+nano Makefile
 </code> </code>
 Folgenden Inhalt einfügen: Folgenden Inhalt einfügen:
Zeile 203: Zeile 212:
 Speichern und Editor verlassen. Speichern und Editor verlassen.
 <code="bash"> <code="bash">
-make modules+make modules
 </code> </code>
 <box 90% | Hinweis> <box 90% | Hinweis>
Zeile 209: Zeile 218:
 \\ ''Makefile:<Zeilen-Nr.>: <nowiki>***</nowiki> missing separator (did you mean TAB instead of 8 spaces?).  Stop.'' \\ ''Makefile:<Zeilen-Nr.>: <nowiki>***</nowiki> missing separator (did you mean TAB instead of 8 spaces?).  Stop.''
 \\ Falls dies der Fall ist, das **Makefile** nochmals editieren und in der entsprechenden Zeilen-Nr. die entsprechenden Abstände durch einen Tabulator (TAB) ersetzen, danach speichern und Editor verlassen und dann den Befehl  \\ Falls dies der Fall ist, das **Makefile** nochmals editieren und in der entsprechenden Zeilen-Nr. die entsprechenden Abstände durch einen Tabulator (TAB) ersetzen, danach speichern und Editor verlassen und dann den Befehl 
-<code="bash">make modules</code> nochmals ausführen.+<code="bash">make modules</code> nochmals ausführen.
 </box> </box>
 <code="bash"> <code="bash">
-ls+ls
 </code> </code>
 Es sollte nun -nebst diversen anderen Files- ein File mit der Bezeichnung Es sollte nun -nebst diversen anderen Files- ein File mit der Bezeichnung
Zeile 218: Zeile 227:
 \\ aufgelistet werden. Falls ja, hat das Erstellen des Kernelmoduls für das Zoom-Board geklappt. Nun wird dieses Modul auf das Zoom-Board kopiert und dort getestet: \\ aufgelistet werden. Falls ja, hat das Erstellen des Kernelmoduls für das Zoom-Board geklappt. Nun wird dieses Modul auf das Zoom-Board kopiert und dort getestet:
 <code="bash"> <code="bash">
-scp helloMod.ko root@<meinZoomBoardHostName>:/media/ram +scp helloMod.ko root@<meinZoomBoardHostName>:/media/ram 
-ssh root@<meinZoomBoardHostName>+ssh root@<meinZoomBoardHostName>
 </code> </code>
 Passwort: **toor** Passwort: **toor**
Zeile 225: Zeile 234:
 \\ Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus (Kernelmodul laden, wieder entladen und Ausgaben anzeigen): \\ Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus (Kernelmodul laden, wieder entladen und Ausgaben anzeigen):
 <code="bash> <code="bash>
-cd /media/ram +cd /media/ram 
-sudo insmod helloMod.ko +sudo insmod helloMod.ko 
-sudo rmmod helloMod.ko +sudo rmmod helloMod.ko 
-dmesg | tail+dmesg | tail
 </code> </code>
 Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein