====== Installation von Emdebian Grip oder Buildroot-FS auf den Phytec phyCORE-MPC5200B ====== Die folgende Anleitung erklärt die Installation von [[:Software:Linux:Emdebian:start]] Grip (Wheezy) auf den [[:Embedded Systems:MPC5200:phyCORE-MPC5200B-tiny:start]] oder [[:Embedded Systems:MPC5200:phyCORE-MPC5200B-IO:start]] von Phytec. * https://github.com/ntb-ch/linux-phycore-mpc5200b.git In diesem Verzeichnis befindet sich auch ein bereits compilierter Kernel, ein fertiges Root-Filesystem, ein DeviceTree Blob und ein uBoot-Image. ===== Voraussetzung ===== * PC oder VM mit installiertem Debian, (K)Ubuntu oder Linux Mint ((Diese Anleitung wurde mit Kubuntu 14.04 getestet)) * [[:Embedded Systems:MPC5200:phyCORE-MPC5200B-tiny:start]] oder [[:Embedded Systems:MPC5200:phyCORE-MPC5200B-IO:start]] mit mindestens 32 MB Flash! * Passendes Carrier-Board (z.B. Phytec PCM-973 oder NTB C32) * PC mit serieller Schnittstelle (oder USB-to-RS232 Converter) und installierter Terminal-Anwendung (z.B. [[:Software:Linux:minicom]] oder Cutecom) * Wir verwenden einen Standardkernel. Dieser muss gepatcht werden. Der Patch, die angepasste Kernelkonfiguration, die angepassten Device Tree Files und das u-Boot Image können alle aus einem eigenen Repository unter https://github.com/ntb-ch/linux-phycore-mpc5200b.git geholt werden. ===== Root-Filesystem erstellen (Emdebian) ===== Wir benutzen Multistrap für das Root-Filesystem gemäss Anleitung: [[software:linux:emdebian:rootfs_erstellen|Root-Filesystem erstellen]]. * Multistrap-Konfiguration: [General] arch=powerpc directory=/opt/multistrap/ cleanup=true retainsources= noauth=true unpack=true bootstrap=Grip aptsources=Grip Debian [Grip] packages=ifupdown procps iputils-ping module-init-tools openssh-server nano source=http://www.emdebian.org/grip/ keyring=emdebian-archive-keyring suite=wheezy-grip [Debian] packages= source=http://ftp.ch.debian.org/debian/ keyring=debian-archive-keyring suite=wheezy * schroot Konfiguration: [emdebian-grip-ppc] description=Emdebian Grip Wheezy (PowerPC) aliases=emdebian-ppc type=directory directory=/opt/multistrap root-groups=root users=$USER groups=sbuild * Als Qemu-Binary muss //qemu-ppc-static// kopiert werden. * Mount-Punkte (fstab): #/etc/fstab for phyCORE-MPC5200B /dev/root / jffs2 defaults 0 0 proc /proc proc defaults 0 0 devtmpfs /dev devtmpfs defaults,mode=0755,nosuid 0 0 devpts /dev/pts devpts defaults 0 0 none /tmp tmpfs defaults,mode=1777,uid=0,gid=0 0 0 none /sys sysfs defaults 0 0 none /var/log tmpfs defaults,mode=0755,uid=0,gid=0 0 0 none /var/run tmpfs defaults,mode=0755,uid=0,gid=0 0 0 none /var/lock tmpfs defaults,mode=0755,uid=0,gid=0 0 0 * Konfiguration für serielles Terminal: - getty auf serielle Schnittstelle legen in ''/opt/multistrap/etc/inittab'' - Standard TTYs deaktivieren indem die folgenden Zeilen auskommentiert werden: #1:2345:respawn:/sbin/getty 38400 tty1 #2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6 - Serielles Terminal aktivieren durch Hinzufügen der folgenden Zeile am Ende der Datei: PSC0:2345:respawn:/sbin/getty -L ttyPSC0 115200 vt100 - Sicherstellen, dass der Benutzer root sich am seriellen Terminal anmelden kann. Dazu muss in der Datei ''/opt/multistrap/etc/securetty'' folgende Zeile zu finden sein: ttyPSC0 * Device Node Tabelle# name type mode uid gid major minor start inc count /dev/console c 600 0 0 5 1 0 0 - /dev/kmsg c 660 0 0 1 11 0 0 - #/dev/log s 666 0 0 - - - - - /dev/loop b 640 0 0 7 0 0 1 8 /dev/mem c 640 0 15 1 1 0 0 - /dev/null c 666 0 0 1 3 0 0 - /dev/pts d 755 0 0 - - - - - /dev/random c 666 0 0 1 8 0 0 - /dev/tty c 666 0 0 5 0 0 0 - /dev/tty c 666 0 0 4 0 0 1 6 /dev/urandom c 666 0 0 1 9 0 0 - /dev/zero c 666 0 0 1 5 0 0 - /dev/mtdblock2 b 666 0 6 31 2 0 0 - /dev/ttyPSC0 c 644 0 0 204 148 0 0 - * Dateisystemabbild erzeugen (zuvor unnötige Verzeichnisse löschen, siehe [[software:linux:emdebian:rootfs_erstellen|Root-Filesystem]], damit das Root-Filesystem in der Partition Platz hat): # mkfs.jffs2 -n -e 0x40000 -p 0x40000 -b -d /opt/multistrap -D device_table -o emdebian-wheezy-grip-phycore-mpc5200b.jffs2 ===== Root-Filesystem erstellen (Buildroot) ===== Siehe [[software:linux:buildroot:start | allgemeine Anleitung Buildroot]]. ===== Neuen Kernel compilieren (v3.19, ohne Real-time) ===== Siehe [[software:linux:phycore-mpc5200b:kernel_v3_19 | Anleitung für v3.19]]. ===== Neuen Real-time-Kernel compilieren (v4.1.15-rt17+) ===== Siehe [[software:linux:phycore-mpc5200b:kernel_v4_4_15rt | Anleitung für v4.1.15 Real-Time]]. ===== Device Tree Blob ===== Erstelle Device Tree Blob aus den Device Tree Files, siehe [[software:linux:devicetree|Device Tree erstellen]]. Quellen: Für alle Boards ''mpc5200b.dtsi'', für tiny-Board ''pcm030.dts'', für io-Board ''pcm032_ntb.dts'' und ntb-c32-Board ''ntb_c32.dts''. dtc -I dts -O dtb -S 0x40000 -o oftree-ntbc32.dtb ntb_c32.dts ===== Installation vorbereiten ===== Für die Installation auf dem phyCORE-MPC5200B müssen die benötigten Dateien auf einem TFTP-Server bereit gestellt werden. Am NTB kann hierfür der FTP-Server des INF-Instituts verwendet werden: [[\\inf004.ntb.ch\ftp\pub\ | inf004.ntb.ch]]((Bitte Unterordner mit dem eigenen Benutzernamen erstellen. Dateien und Ordner, die ausserhalb dieses Ordners erstellt werden, werden ohne Vorwarnung wieder gelöscht!)). Falls auf dem Board kein Bootloader mehr installiert ist (z.B. weil es mit [[http://deepjava.org/|deep]] vewendet wurde), muss erst [[:software:linux:U-Boot]] wieder installiert werden. Dazu wird das {{.:phytec:u-boot-pcm032.bin | U-Boot Image}} mittels [[:Embedded Systems:Abatron BDI:start | BDI2000 oder BDI3000]] ins Flash kopiert. Achtung: Neuere Kernel benötigen mindestens UBoot 1.3.2. Dazu folgende Befehle im BDI eingeben: unlock 0xfff00000 0x10000 4 erase 0xfff00000 0x10000 4 prog 0xfff00000 phycore_mpc5200b/uboot/u-boot-high-pcm032.bin bin Danach das BDI trennen und den Reset Knopf drücken. Über ein Terminal mit Baudrate 115200 sollte U-Boot nun verfügbar sein. ===== Linux Kernel und Root File System installieren ===== Sämtliche Adressen sind relativ zur Basisadresse des Flash-Speichers! **32 MB Version:**\\ Basis-Adresse: ''0xFE00 0000'' ^ Von ^ Bis ^ Grösse ^ Verwendung ^ | ''0x0000 0000'' | ''0x0003 FFFF'' | 256k | U-Boot LOW | | ''0x0004 0000'' | ''0x002F FFFF'' | 2816k | Linux Kernel | | ''0x0030 0000'' | ''0x01EF FFFF'' | 28672k | Root FS | | ''0x01F0 0000'' | ''0x01F3 FFFF'' | 256k | U-Boot HIGH | | ''0x01F4 0000'' | ''0x01F7 FFFF'' | 256k | Env. U-Boot| | ''0x01F8 0000'' | ''0x01FB FFFF'' | 256k | Device Tree | | ''0x01FC 0000'' | ''0x01FF FFFF'' | 256k | Free Space | **64 MB Version:**\\ Basis-Adresse: ''0xFC00 0000'' ^ Von ^ Bis ^ Grösse ^ Verwendung ^ | ''0x0000 0000'' | ''0x0003 FFFF'' | 256k | U-Boot LOW | | ''0x0004 0000'' | ''0x002F FFFF'' | 2816k | Linux Kernel | | ''0x0030 0000'' | ''0x03EF FFFF'' | 60416k | Root FS | | ''0x03F0 0000'' | ''0x03F3 FFFF'' | 256k | U-Boot HIGH | | ''0x03F4 0000'' | ''0x03F7 FFFF'' | 256k | Env. U-Boot| | ''0x03F8 0000'' | ''0x03FB FFFF'' | 256k | Device Tree | | ''0x03FC 0000'' | ''0x03FF FFFF'' | 256k | Free Space | - Board anschliessen und starten: - Carrierboard über RS-232 mit PC verbinden (beim Phytec PCM-973 sind die Leitungen auf dem Board bereits gekreuzt, so dass ein 1:1-Kabel verwendet werden muss, beim NTB C32 Carrierboard ist hingegen ein Nullmodem-Kabel zu verwenden). - Netzwerkkabel anschliessen - Auf dem Entwicklungs-PC ein serielles Terminal öffnen (115200 Baud/s, 8 Data Bit, 1 Start Bit, 1 Stop Bit, kein Parity) - Board starten (Versorgung anschliessen) -> jetzt müsste im Terminal die Boot-Ausgaben von uboot zu sehen sein - Beliebige Taste drücken, um Autostart abzubrechen -> nun steht eine U-Boot-Kommanduzeile bereit: ''uboot>'' - Netzwerkkonfiguration von U-Boot überprüfen und wenn notwendig anpassen. Wenn das Environment von U-Boot im Flash gelöscht ist, holt sich U-Boot gewisse Parameter aus seinem 'Environment' vom EEPROM. Man kann diesen Inhalt überschreiben (siehe [[http://www.phytec.eu/europe/support/faq/faq-phycore-mpc5200b-io.html]] unter U-Boot Update). - Aktuelle Konfiguration anzeigen: uboot> printenv - Neue IP-Adresse setzen: uboot> setenv ipaddr 146.136.39.53 - Netzwerkmaske festlegen: uboot> setenv netmask 255.255.252.0 - Server IP-Adresse festlegen: uboot> setenv serverip 146.136.36.50 - Gateway festlegen: uboot> setenv gateway 146.136.36.1 - MAC-Adresse setzen (unter [[embedded_systems:mpc5200:phycore-mpc5200b-io:start|Phytec phyCORE-MPC5200B-I/O]] Adresse für bestimmtes Board herauslesen): uboot> setenv ethaddr 50:2D:F4:03:E3:89 - Kernel Image einrichten: - Flash löschen: uboot> protect off 0xfe040000 +0x2c0000 uboot> erase 0xfe040000 +0x2c0000 - Image von TFTP Server herunterladen: uboot> tftp 0x400000 uImage - Image vom RAM ins Flash kopieren: uboot> cp.b 0x400000 0xfe040000 $(filesize) - Root FS einrichten: - Flash löschen: uboot> protect off 0xfe300000 +0x1c00000 uboot> erase 0xfe300000 +0x1c00000 - Image von TFTP Server herunterladen: uboot> tftp 0x400000 rfs.jffs2 - Image vom RAM ins Flash kopieren: uboot> cp.b 0x400000 0xfe300000 $(filesize) - Device Tree einrichten: - Flash löschen: uboot> protect off 0xfff80000 +0x40000 uboot> erase 0xfff80000 +0x40000 - Device Tree von TFTP Server herunterladen (boardspezifisch): uboot> tftp 0x400000 oftree-ntbc32.dtb - Device Tree vom RAM ins Flash kopieren: uboot> cp.b 0x400000 0xfff80000 $(filesize) - Boot-Konfiguration anpassen: - setenv bootargs console=ttyPSC0,115200 rw root=/dev/mtdblock2 rw rootfstype=jffs2 - setenv bcmd_flash bootm 0xfe040000 - 0xfff80000 - saveenv ===== Installation testen ===== Jetzt kann in U-Boot mit dem Befehl run bcmd_flash Linux gebootet werden. Auf der Konsole erscheint eine Login-Shell. \\ Natürlich kann die Konfiguration von U-Boot auch gespeichert werden, (siehe [[software:linux:u-boot|U-Boot]]). ===== EEROS Installation ===== -Cross Toolchain installieren [[.:cross-toolchain | Anleitung für Debian]]. -Tools installieren sudo apt-get install git make cmake -EEROS clonen: git clone https://github.com/eeros-project/eeros-framework.git -Zum develop branch wechseln: cd eeros git checkout develop -EEROS build Ordner erstellen: mkdir build-mpc5200 -Toolchain Datei erstellen: # cd mkdir build-mpc5200 nano mpc5200.cmake set(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_CXX_COMPILER powerpc-linux-gnu-g++-4.7) SET(CMAKE_C_COMPILER powerpc-linux-gnu-gcc-4.7) # where is the target environment SET(CMAKE_FIND_ROOT_PATH /usr/powerpc-linux-gnu ) # search for programs in the build host directories set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_CXX_FLAGS "-std=c++0x" CACHE STRING "" FORCE) set(LINUX TRUE CACHE BOOL "" FORCE) -EEROS builden: cmake .. -DCMAKE_TOOLCHAIN_FILE=mpc5200.cmake make -Falls flink verwendet wird muss folgender Befehl verwendet werden:cmake .. -DCMAKE_TOOLCHAIN_FILE=../../mpc5200.cmake -DLIBFLINK:BOOL=true -DADDITIONAL_INCLUDE_DIRS:PATH=/home/mpc5200/flinklib/include/ -DADDITIONAL_LINK_DIRS:PATH=/home/mpc5200/flinklib/build-mpc5200/lib/ make -EEROS auf das Target kopieren: Auf dem Entwicklungsrechner: nc -l -p 3333 < /src/libeeros.so Auf dem Target: nc serverip 3333 > /usr/lib/libeeros.so ldconfig ===== flink hinzufügen ===== Siehe [[http://flink-project.ch/flink_example_1|flink on Phytec PCM032 Board (mpc5200)]] ===== FPGA vom Prozessor aus laden ===== Mithilfe eines Kernel Modules (//fpga_loader//) kann der sich auf dem Phytec Board befindliche Cyclone II programmiert werden. Dazu sind folgende Schritte notwendig: - NTB MPC5200 Daten holen mit: git clone https://github.com/ntb-ch/linux-phycore-mpc5200b - Ins Verzeichnis //kernel/FPGA/loader// wechseln und Modul übersetzen: ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- KERNELDIR=~/mpc5200/kernel/linux-3.19 make -Als nächstes muss für das FPGA eine .rbf (Raw Binary Format) Datei erzeugt werden. Dazu in Quartus unter //Device->Device and Pin options -> Programming Files// bei //Raw Binary File// den Haken setzen. -Danach das Design kompilieren. -Die erzeugten .rbf Datei auf das Target kopieren, z.B. mit netcat (siehe [[http://www.microhowto.info/howto/copy_a_file_from_one_machine_to_another_using_netcat.html | How to use netcat]]) oder [[software:linux:openssh:start|OpenSSH]]. - Auf dem Target zuerst das Loader Modul laden mit insmod fpga_loader.ko Ab diesem Moment steht die serielle Schnittstelle auf der PSC6 nicht mehr zur Verfügung! - Jetzt kann ein Design mit dd if=myDesign.rbf of=/dev/fpga_loader bs=5M auf das FPGA geladen werden. - Dann muss das Modul mit rmmod fpga_loader.ko wieder entladen werden, damit die serielle Schnittstelle wieder gebraucht werden kann.