Dies ist eine alte Version des Dokuments!
Die folgende Anleitung erklärt die Installation von Ubuntu 14.04 minimal auf den BeagleBone Black. Diese Anleitung wurde auf der Basis von https://eewiki.net/display/linuxonarm/BeagleBone+Black erstellt (2014-08-19).
Abhängigketien installieren
# apt-get update # apt-get upgrade # apt-get install build-essential device-tree-compiler lzma lzop u-boot-tools libncurses5-dev:amd64 # apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386 # apt-get install git
Git konfigurieren
$ git config --global user.name "Name des Benutzers" $ git config --global user.email "E-Mail Adresse des Benutzers"
Toolchain herunterladen (50 MB) und entpacken
$ cd $ wget -c wget -c https://releases.linaro.org/14.04/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz $ tar xf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz
(Dieser Punkt kann auch übersprungen werden, da die Toolchain automatisch von einem Script heruntergeladen wird. Da aber die Toolchain später für die Softwareentwicklung benötigt wird, kann man das jetzt schon machen und später den Pfad im Kernel-Script angeben.)
Symlink zu Toolchain erstellen (für User ntb)
$ cd /opt # ln -s /home/ntb/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux beaglebone-tc $ cd -
Toolchain Version anzeigen
$ /opt/beaglebone-tc/bin/arm-linux-gnueabihf-g++ --version arm-linux-gnueabihf-g++ (crosstool-NG linaro-1.13.1-4.8-2014.04 - Linaro GCC 4.8-2014.04) 4.8.3 20140401 (prerelease) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Kernel-Scripts herunterladen (Branch 3.15)
$ cd $ git clone https://github.com/RobertCNelson/bb-kernel.git $ cd bb-kernel
temporären Branch erstellen
$ git checkout origin/am33x-v3.15 -b tmp
system.sh.sample kopieren zu system.sh und einstellungen ändern: CC=/opt/beaglebone-tc/bin/arm-linux-gnueabihf-
Kernel kompilieren
$ ./build_kernel.sh
Dieses Script holt automatisch alles was es braucht (Toolchain, Kernel Source, Patches, …). Es klont aber das komplette Linux Repository, welches 1.4 GB gross ist. Die Daten werden komprimiert übermittelt, was aber trotzdem ca. 20 min. dauert (je nach Internetverbindung). Wenn man in der Datei system.sh den Pfad zur Toolchain angibt, wird diese Toolchain verwendet und nicht die Standardtoolchain heruntergeladen. Das Kompilieren des Kernels dauert ca. 20 min (Ubuntu VM mit 4 Cores). Anschliessend findet man das Image im Ordner deploy.
Root File System herunterladen (90 MB) und entpacken
$ cd $ wget -c https://rcn-ee.net/deb/minfs/trusty/ubuntu-14.04-minimal-armhf-2014-07-07.tar.xz $ md5sum ubuntu-14.04-minimal-armhf-2014-07-07.tar.xz c30fb91012701cdbfa00bb6c86868d0a ubuntu-14.04-minimal-armhf-2014-07-07.tar.xz $ tar xf ubuntu-14.04-minimal-armhf-2014-07-07.tar.xz
Standardmässig ist ein User mit dem Namen ubuntu und dem Passwort temppwd eingerichtet.
U-Boot Source herunterladen (63 MB)
$ cd $ git clone git://git.denx.de/u-boot.git $ cd u-boot/ $ git checkout v2014.07 -b tmp
Patches herunterladen und anwenden
wget -c https://raw.githubusercontent.com/eewiki/u-boot-patches/master/v2014.07/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
Kompilieren:
$ make ARCH=arm CROSS_COMPILE=/opt/beaglebone-tc/bin/arm-linux-gnueabihf- distclean $ make ARCH=arm CROSS_COMPILE=/opt/beaglebone-tc/bin/arm-linux-gnueabihf- am335x_evm_config $ make ARCH=arm CROSS_COMPILE=/opt/beaglebone-tc/bin/arm-linux-gnueabihf-
Bevor die microSD Karte eingelegt wird oder der Cardreader angeschlossen wird, sollte folgender Befehl ausgeführt werden.
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 243M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 19.8G 0 part ├─ntb--vm--vg-root (dm-0) 252:0 0 18.8G 0 lvm / └─ntb--vm--vg-swap_1 (dm-1) 252:1 0 1020M 0 lvm [SWAP] sr0 11:0 1 56.8M 0 rom
Jetzt kann die microSD Karte oder der Cardreader angeschlossen werden.
$ lsblk AME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 243M 0 part /boot ├─sda2 8:2 0 1K 0 part └─sda5 8:5 0 19.8G 0 part ├─ntb--vm--vg-root (dm-0) 252:0 0 18.8G 0 lvm / └─ntb--vm--vg-swap_1 (dm-1) 252:1 0 1020M 0 lvm [SWAP] sde 8:64 1 29.5G 0 disk └─sde1 8:65 1 29.5G 0 part sr0 11:0 1 56.8M 0 rom
Die microSD Karte ist somit das Device /dev/sde
$ export DISK=/dev/sde
Karte löschen
# dd if=/dev/zero of=${DISK} bs=1M count=20
Partitionen erstelln
sudo sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__ 1,12,0xE,* ,,,- __EOF__
Falls DISK == /dev/sdx
# mkfs.vfat -F 16 ${DISK}1 -n BOOT # mkfs.ext4 ${DISK}2 -L rootfs
Falls DISK == /dev/mmcblk0
# sudo mkfs.vfat -F 16 ${DISK}p1 -n BOOT # mkfs.ext4 ${DISK}p2 -L rootfs
Ordner erstellen um Partitionen zu mounten
# mkdir -p /media/boot/ # mkdir -p /media/rootfs/
Falls DISK == /dev/sdx
# mount ${DISK}1 /media/boot/ # mount ${DISK}2 /media/rootfs/
Falls DISK == /dev/mmcblk0
# mount ${DISK}p1 /media/boot/ # mount ${DISK}p2 /media/rootfs/
Bootloader installieren
$ cd # cp -v ./u-boot/MLO /media/boot/ # cp -v ./u-boot/u-boot.img /media/boot/
U-Boot Script
# nano /media/boot/uEnv.txt
Folgenden Inhalt einfügen
##This will work with: Angstrom's 2013.06.20 u-boot. loadaddr=0x82000000 fdtaddr=0x88000000 rdaddr=0x88080000 initrd_high=0xffffffff fdt_high=0xffffffff loadximage=load mmc 0:2 ${loadaddr} /boot/vmlinuz-${uname_r} loadxfdt=load mmc 0:2 ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile} loadxrd=load mmc 0:2 ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize} loaduEnvtxt=load mmc 0:2 ${loadaddr} /boot/uEnv.txt ; env import -t ${loadaddr} ${filesize}; loadall=run loaduEnvtxt; run loadximage; run loadxfdt; mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=${mmcroot} rootfstype=${mmcrootfstype} ${cmdline} uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} - ${fdtaddr};
Um zu speichern Ctrl+O drücken und mit Ctrl+X schliessen.
Root File system installieren
# tar xfvp ubuntu-14.04-minimal-armhf-2014-07-07/armhf-rootfs-ubuntu-trusty.tar -C /media/rootfs
Kernel installieren
$ export kernel_version=3.15.10-bone6 # cp -v ./bb-kernel/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version} # mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/ # tar xfv ./bb-kernel/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/ # tar xfv ./bb-kernel/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/
Create Boot-Script uEnv.txt
$ sudo sh -c 'echo "uname_r=${kernel_version}" > /media/rootfs/boot/uEnv.txt'
Auto-mount Root File System
$ sudo sh -c "echo '/dev/mmcblk0p2 / auto errors=remount-ro 0 1' >> /media/rootfs/etc/fstab"
Netzwerk einrichten
# nano /media/rootfs/etc/network/interfaces.d/default
Folgenden Inhalt einfügen:
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp auto usb0 iface usb0 inet static address 192.168.7.2 netmask 255.255.255.0 network 192.168.7.0 gateway 192.168.7.1
Um zu speichern Ctrl+O drücken und mit Ctrl+X schliessen.
Serial Console over UART5
# nano /media/rootfs/etc/init/serial.conf
Folgenden Inhalt einfügen:
start on stopped rc RUNLEVEL=[2345] stop on runlevel [!2345] respawn exec /sbin/getty 115200 ttyO0
Um zu speichern Ctrl+O drücken und mit Ctrl+X schliessen.
Script um microSD Karte auf eMMC Flash zu kopieren
$ wget https://raw.githubusercontent.com/RobertCNelson/boot-scripts/master/tools/eMMC/bbb-eMMC-flasher-eewiki-12mb.sh $ chmod +x bbb-eMMC-flasher-eewiki-12mb.sh # cp bbb-eMMC-flasher-eewiki-12mb.sh /media/rootfs/root/
USB-Gadgets Kernelmodul beim Start laden
# nano /media/rootfs/etc/modules
Ganz unten folgende Zeile anhängen:
g_multi
Um zu speichern Ctrl+O drücken und mit Ctrl+X schliessen.
Ganz am Schluss microSD Karte unmounten.
$ sync # umount /media/boot # umount /media/rootfs