Dies ist eine alte Version des Dokuments!
Hier wird gezeigt, wie auf dem Host Applikationen und Kernel-Module für das Zoom-Board übersetzt werden können.
Buildroot-Toolchain
Workspace-Verzeichnis erstellen:
mkdir -p ~/workspace/zoom
Buildroot-Toolchain installieren
sudo mkdir -p /opt/zoom cd /opt/zoom sudo wget -c ftp://inf004.ntb.ch/zoom/buildroot-toolchain.tar.bz2 sudo tar xjf buildroot-toolchain.tar.bz2 sudo rm -rf ./buildroot-toolchain.tar.bz2 ./buildroot-toolchain/bin/arm-buildroot-linux-gnueabi-gcc -v
Der letzte Befehl sollte folgende Version ausgeben:
gcc version 4.7.3 (Buildroot 2014.05)
Wichtige Pfade für die Bash-Kommandozeile global verfügbar machen
sudo nano ~/.bashrc
Am Ende der Datei folgenden Inhalt einfügen:
# sources $PATH export PATH=$PATH:/opt/zoom/buildroot-toolchain/ export PATH=$PATH:/opt/zoom/buildroot-toolchain/bin/ export PATH=$PATH:/opt/zoom/buildroot-toolchain/lib/
Speichern, Editor verlassen und Terminal schliessen.
Zum Testen der Buildroot-Toolchain (Lokaler Compiler & Cross-Compiler):
mkdir -p ~/workspace/zoom/test cd ~/workspace/zoom/test nano hello.c
Folgenden Inhalt einfügen:
#include <stdio.h> void main () { printf("Hello world\n"); }
Speichern und Editor verlassen.
Nun das File für den lokalen Rechner kompilieren:
gcc hello.c -o hello ./hello
Der letzte Befehl sollte nun auf der Kommandozeile des lokalen Rechners ein
Hello world
ausgeben. Falls ja, funktioniert der Compiler für den lokalen Rechner.
Jetzt noch einen symbolischen Link erstellen, um eine Fehlermeldung zu vermeiden:
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
Hinweis
ln: failed to create symbolic link '/usr/lib/x86_64-linux-gnu/libmpfr.so.4': File exists
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:
/opt/zoom/buildroot-toolchain/bin/arm-buildroot-linux-gnueabi-gcc-4.7.3 hello.c -o hello scp hello root@<meinZoomBoardHostName>:/media/ram ssh root@<meinZoomBoardHostName>
Passwort: toor
Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus:
cd /media/ram ./hello
Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein
Hello world
ausgeben. Falls ja, funktioniert der Cross-Compiler für das Zoom-Board.
Userspace Anwendungen mit CMake
mkdir -p ~/workspace/zoom/test/application cd ~/workspace/zoom/test/application nano hello.c
Folgenden Inhalt einfügen:
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> int main(void) { printf("Hello world\n"); return EXIT_FAILURE; }
Speichern und Editor verlassen.
nano CMakeLists.txt
Folgenden Inhalt einfügen:
project(random) cmake_minimum_required (VERSION 2.8) add_executable(hello hello.c)
Speichern und Editor verlassen.
mkdir -p ~/workspace/zoom/test/application/build cd ~/workspace/zoom/test/application/build cmake -DCMAKE_TOOLCHAIN_FILE=/opt/zoom/buildroot-toolchain/share/buildroot/toolchainfile.cmake .. make scp hello root@<meinZoomBoardHostName>:/media/ram ssh root@<meinZoomBoardHostName>
Passwort: toor
Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus:
cd /media/ram ./hello
Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein
Hello world
ausgeben. Falls ja, funktioniert die Applikationserstellung für das Zoom-Board.
Kernelmodule
Linux Kernel Quellcode herunterladen und vorbereiten
cd /opt/zoom sudo wget -c ftp://inf004.ntb.ch/zoom/linux.tar.gz sudo tar xzf linux.tar.gz sudo rm -rf linux.tar.gz cd linux export ARCH=arm export CROSS_COMPILE=arm-buildroot-linux-gnueabi- 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 make modules_prepare
Kernelmodul erstellen
mkdir -p ~/workspace/zoom/test/kernelModule cd ~/workspace/zoom/test/kernelModule nano helloMod.c
Folgenden Inhalt einfügen:
#include <linux/init.h> #include <linux/module.h> MODULE_DESCRIPTION("test module"); MODULE_SUPPORTED_DEVICE("none"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("urs.graf@ntb.ch"); static int hello_init(void) { printk(KERN_ALERT "Hello world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye\n"); } module_init(hello_init); module_exit(hello_exit);
Speichern und Editor verlassen.
nano Makefile
Folgenden Inhalt einfügen:
ifeq ($(KERNELRELEASE),) KERNELDIR ?= /opt/zoom/linux PWD := $(shell pwd) modules: $(MAKE) ARCH=arm CROSS_COMPILE=/opt/zoom/buildroot-toolchain/bin/arm-buildroot-linux-gnueabi- -C $(KERNELDIR) M=$(PWD) modules clean: rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions .PHONY: modules clean else obj-m := helloMod.o endif
Speichern und Editor verlassen.
make modules
Hinweis
Makefile:<Zeilen-Nr.>: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
make modules
nochmals ausführen.
ls
Es sollte nun -nebst diversen anderen Files- ein File mit der Bezeichnung
helloMod.ko
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:
scp helloMod.ko root@<meinZoomBoardHostName>:/media/ram ssh root@<meinZoomBoardHostName>
Passwort: toor
Wir befinden uns nun auf dem Zoom-Board und führen folgende Befehle aus (Kernelmodul laden, wieder entladen und Ausgaben anzeigen):
cd /media/ram sudo insmod helloMod.ko sudo rmmod helloMod.ko dmesg | tail
Der letzte Befehl sollte nun auf der Kommandozeile des Zoom-Boards ein
Hello world
Goodbye
ausgeben. Falls ja, funktioniert das erstellte Kernelmodul für das Zoom-Board.