Buildroot auf dem Zoom-Board: Bootloader, Kernel, Root-FS

Abhängigkeiten

$ sudo apt-get install binutils build-essential g++ make cmake git libncurses5-dev unzip screen python

Arbeitsverzeichnis einrichten

$ screen -S zoom
$ mkdir zoom/working/directory
$ cd zoom/working/directory
$ export ZOOMDIR=$(pwd)
$ echo $ZOOMDIR

DaVinci PSP herunterladen und entpacken

$ cd $ZOOMDIR
$ wget -c http://software-dl.ti.com/dsps/dsps_public_sw/psp/LinuxPSP/DaVinci_03_22/03_22_00_02//exports/DaVinci-PSP-SDK-03.22.00.02.tgz
$ tar xf DaVinci-PSP-SDK-03.22.00.02.tgz
$ tar xf DaVinci-PSP-SDK-03.22.00.02/src/u-boot/u-boot-03.22.00.02.tar.gz
$ tar xf DaVinci-PSP-SDK-03.22.00.02/src/kernel/linux-03.22.00.02.tar.gz
$ wget -c http://processors.wiki.ti.com/images/a/ab/Create-sdcard-omapl13x.zip
$ unzip Create-sdcard-omapl13x.zip

Root-Filesystem

$ cd $ZOOMDIR
$ git clone git://git.buildroot.net/buildroot
$ cd buildroot
$ git checkout -b zoom 2014.05

Folgendes Konfigurationsfile in den Ordner configs kopieren: zoom_defconfig.

$ make zoom_defconfig
$ time make source
$ time make
$ export PATH=$ZOOMDIR/buildroot/output/host/usr/bin:$PATH
$ arm-buildroot-linux-gnueabi-gcc -v
gcc version 4.8.2 (Buildroot 2014.05)

Das Herunterladen der Source-Files mit make source dauert ca. 7 min (je nach Internetverbindung) und der Build selbst mit make dauert ungefär eine Stunde für diese Konfiguration.

U-Boot

$ cd $ZOOMDIR/uboot-03.22.00.02
$ export CROSS_COMPILE=arm-buildroot-linux-gnueabi-
$ make distclean
$ make da850evm_config
$ make all
$ export PATH=$ZOOMDIR/uboot-03.22.00.02/tools:$PATH
$ mkimage -V
mkimage version 2012.04.01
$ mkimage -s -n /dev/null -T aisimage -e 0x80000000 -d spl/u-boot-spl.bin spl/u-boot-spl.ais
$ nano boot.cmd

Folgenden Inhalt einfügen:

setenv bootargs 'mem=32M console=ttyS2,115200n8 root=/dev/mmcblk0p2 ro rootwait ip=off'
setenv bootcmd 'mmc rescan 0;fatload mmc 0 0xc0700000 uImage; bootm c0700000;'
run bootcmd

Speichern mit Ctrl+X, Y.

$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Execute Boot Script' -d boot.cmd boot.scr

Kernel

$ cd $ZOOMDIR/linux-03.22.00.02
$ export ARCH=arm
$ make distclean
$ make da850_omapl138_defconfig
$ make menuconfig

Folgende Einstellungen müssen gemacht werden:

  • Device Drivers
    • GPIO Support
      • [*] /sys/class/gpio/… (sysfs interface)
  • Device Drivers
    • Generic Driver Options
      • [*] Maintain a devtmpfs filesystem to mount at /dev
      • [*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
$ make uImage
$ make modules

SD Karte

Neues Terminal starten und folgenden Befehl ausführen:

$ tail -f /var/log/syslog

SD Karte anschliessen und im Log den Name des Device-Files herauslesen (z.B. sdb).

ACHTUNG: Falls das falsche Device angegeben wird, können Daten verloren gehen.

$ cd $ZOOMDIR
$ sudo ./create-sdcard-omapl13x.sh /dev/sdb
$ sudo uboot-03.22.00.02/tools/uflash/uflash -d /dev/sdb -b uboot-03.22.00.02/u-boot.bin -p OMAPL138 -vv
$ sync
$ mkdir -p sd/{boot,rootfs}
$ sudo mount /dev/sdb1 sd/boot
$ sudo mount /dev/sdb2 sd/rootfs
$ sudo cp linux-03.22.00.02/arch/arm/boot/uImage sd/boot/
$ sudo cp uboot-03.22.00.02/boot.scr sd/boot/
$ cd sd/rootfs
$ sudo tar xjf $ZOOMDIR/buildroot/output/images/rootfs.tar.bz2
$ sudo nano etc/network/interfaces

eth0 Konfiguration einfügen:

auto eth0
iface eth0 inet dhcp

Speichern mit Ctrl+X, Y.

$ sudo nano etc/profile

Folgende Zeile irgendwo am Anfang einfügen:

export TSLIB_TSDEVICE=/dev/input/event1

Speichern mit Ctrl+X, Y.

$ sudo nano etc/fstab

Die Datei solte, wie folgt, aussehen:

# /etc/fstab: static file system information.
#
# <file system> <mount pt>     <type>   <options>         <dump> <pass>
/dev/root       /              ext2     ro,noauto         0      1
proc            /proc          proc     defaults          0      0
devpts          /dev/pts       devpts   defaults,gid=5,mode=620   0      0
tmpfs           /dev/shm       tmpfs    mode=0777         0      0
tmpfs           /tmp           tmpfs    mode=1777         0      0
sysfs           /sys           sysfs    defaults          0      0

tmpfs           /media/ram     tmpfs    mode=1777         0      0
tmpfs           /root          tmpfs    mode=1777         0      0
tmpfs           /var           tmpfs    mode=1777         0      0

Speichern mit Ctrl+X, Y.

$ sudo nano etc/inittab

Die Datei solte, wie folgt, aussehen:

# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
#
# Note: BusyBox init doesn't support runlevels.  The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id        == tty to run on, or empty for /dev/console
# runlevels == ignored
# action    == one of sysinit, respawn, askfirst, wait, and once
# process   == program to run

# Startup the system
null::sysinit:/bin/mount -t proc proc /proc
#null::sysinit:/bin/mount -o remount,rw / # REMOUNT_ROOTFS_RW
null::sysinit:/bin/mkdir -p /dev/pts
null::sysinit:/bin/mkdir -p /dev/shm
null::sysinit:/bin/mkdir -p /media/ram
null::sysinit:/bin/mount -a
null::sysinit:/bin/mkdir -p /tmp/etc 
null::sysinit:/bin/mkdir -p /var/run
null::sysinit:/bin/mkdir -p /var/lock
null::sysinit:/bin/mkdir -p /var/empty
null::sysinit:/bin/mkdir -p /var/log
null::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS

# Put a getty on the serial port
ttyS2::respawn:/sbin/getty -L  ttyS2 115200 vt100 # GENERIC_SERIAL

# Stuff to do for the 3-finger salute
::ctrlaltdel:/sbin/reboot

# Stuff to do before rebooting
null::shutdown:/etc/init.d/rcK
null::shutdown:/bin/umount -a -r
null::shutdown:/sbin/swapoff -a

Speichern mit Ctrl+X, Y.

$ cd $ZOOMDIR/linux-03.22.00.02
$ sudo -E make modules_install INSTALL_MOD_PATH=$ZOOMDIR/sd/rootfs/
$ sudo rm $ZOOMDIR/sd/rootfs/lib/modules/3.3.0/{build,source}
$ sync
$ sudo umount $ZOOMDIR/sd/{boot,rootfs}