Installation von Emdebian Grip oder Buildroot-FS auf den Phytec phyCORE-MPC5200B

Die folgende Anleitung erklärt die Installation von Emdebian Grip (Wheezy) auf den phyCORE-MPC5200B-tiny oder phyCORE-MPC5200B-IO von Phytec.

Downloads

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 1)
  • phyCORE-MPC5200B-tiny oder phyCORE-MPC5200B-IO 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. 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: Root-Filesystem erstellen.

  • Multistrap-Konfiguration:
    phycorempc5200b.multistrap
    [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.conf
    [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):
    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:
    1. getty auf serielle Schnittstelle legen in /opt/multistrap/etc/inittab
      1. 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
      2. Serielles Terminal aktivieren durch Hinzufügen der folgenden Zeile am Ende der Datei:
        PSC0:2345:respawn:/sbin/getty -L ttyPSC0 115200 vt100
    2. 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
    device_table
    # 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 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)

Neuen Kernel compilieren (v3.19, ohne Real-time)

Neuen Real-time-Kernel compilieren (v4.1.15-rt17+)

Device Tree Blob

Erstelle Device Tree Blob aus den Device Tree Files, siehe 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.ch2).

Falls auf dem Board kein Bootloader mehr installiert ist (z.B. weil es mit deep vewendet wurde), muss erst U-Boot wieder installiert werden. Dazu wird das U-Boot Image mittels 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

Flash Partitionstabelle

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
  1. Board anschliessen und starten:
    1. 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).
    2. Netzwerkkabel anschliessen
    3. Auf dem Entwicklungs-PC ein serielles Terminal öffnen (115200 Baud/s, 8 Data Bit, 1 Start Bit, 1 Stop Bit, kein Parity)
    4. Board starten (Versorgung anschliessen) → jetzt müsste im Terminal die Boot-Ausgaben von uboot zu sehen sein
    5. Beliebige Taste drücken, um Autostart abzubrechen → nun steht eine U-Boot-Kommanduzeile bereit: uboot>
  2. 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).
    1. Aktuelle Konfiguration anzeigen:
      uboot> printenv
    2. Neue IP-Adresse setzen:
      uboot> setenv ipaddr 146.136.39.53
    3. Netzwerkmaske festlegen:
      uboot> setenv netmask 255.255.252.0
    4. Server IP-Adresse festlegen:
      uboot> setenv serverip 146.136.36.50
    5. Gateway festlegen:
      uboot> setenv gateway 146.136.36.1
    6. MAC-Adresse setzen (unter Phytec phyCORE-MPC5200B-I/O Adresse für bestimmtes Board herauslesen):
      uboot> setenv ethaddr 50:2D:F4:03:E3:89
  3. Kernel Image einrichten:
    1. Flash löschen:
      uboot> protect off 0xfe040000 +0x2c0000
      uboot> erase 0xfe040000 +0x2c0000
    2. Image von TFTP Server herunterladen:
      uboot> tftp 0x400000 uImage
    3. Image vom RAM ins Flash kopieren:
      uboot> cp.b 0x400000 0xfe040000 $(filesize)
  4. Root FS einrichten:
    1. Flash löschen:
      uboot> protect off 0xfe300000 +0x1c00000
      uboot> erase 0xfe300000 +0x1c00000
    2. Image von TFTP Server herunterladen:
      uboot> tftp 0x400000 rfs.jffs2
    3. Image vom RAM ins Flash kopieren:
      uboot> cp.b 0x400000 0xfe300000 $(filesize)
  5. Device Tree einrichten:
    1. Flash löschen:
      uboot> protect off 0xfff80000 +0x40000
      uboot> erase 0xfff80000 +0x40000
    2. Device Tree von TFTP Server herunterladen (boardspezifisch):
      uboot> tftp 0x400000 oftree-ntbc32.dtb
    3. Device Tree vom RAM ins Flash kopieren:
      uboot> cp.b 0x400000 0xfff80000 $(filesize)
  6. Boot-Konfiguration anpassen:
    1. setenv bootargs console=ttyPSC0,115200 rw root=/dev/mtdblock2 rw rootfstype=jffs2
    2. setenv bcmd_flash bootm 0xfe040000 - 0xfff80000
    3. 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 U-Boot).

EEROS Installation

  1. Cross Toolchain installieren Anleitung für Debian.
  2. Tools installieren
     sudo apt-get install git make cmake 
  3. EEROS clonen:
     git clone https://github.com/eeros-project/eeros-framework.git 
  4. Zum develop branch wechseln:
    cd eeros 
    git checkout develop
  5. EEROS build Ordner erstellen:
     mkdir build-mpc5200 
  6. Toolchain Datei erstellen:
    # cd mkdir build-mpc5200 
    nano mpc5200.cmake
    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)
  7. EEROS builden:
    cmake .. -DCMAKE_TOOLCHAIN_FILE=mpc5200.cmake
    make 
  8. 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
  9. 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 

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:

  1. NTB MPC5200 Daten holen mit:
     git clone https://github.com/ntb-ch/linux-phycore-mpc5200b
  2. Ins Verzeichnis kernel/FPGA/loader wechseln und Modul übersetzen:
    ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- KERNELDIR=~/mpc5200/kernel/linux-3.19 make
  1. 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.
  2. Danach das Design kompilieren.
  3. Die erzeugten .rbf Datei auf das Target kopieren, z.B. mit netcat (siehe How to use netcat) oder OpenSSH.
  4. 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!

  5. Jetzt kann ein Design mit
    dd if=myDesign.rbf of=/dev/fpga_loader bs=5M

    auf das FPGA geladen werden.

  6. Dann muss das Modul mit
    rmmod fpga_loader.ko

    wieder entladen werden, damit die serielle Schnittstelle wieder gebraucht werden kann.

1)
Diese Anleitung wurde mit Kubuntu 14.04 getestet
2)
Bitte Unterordner mit dem eigenen Benutzernamen erstellen. Dateien und Ordner, die ausserhalb dieses Ordners erstellt werden, werden ohne Vorwarnung wieder gelöscht!