Сборка и установка Linux Ubuntu на BeagleBone Black
Как я и обещал, в этой статье описано, как собрать и установить на плату BeagleBone Black дистрибутив Linux Ubuntu.

Для этого, кроме самой платы, понадобятся: установленный на компьютере Linux (у меня это Ubuntu 14.04), карта microSD или microSDHC (я использую последнюю, обьемом 8Гб) и кардридер. По идее, медленнои со скрежетом, можно делать это и из-под виртуальной машины, но, т.к. я терпеть не могу долго ждать, то сам я этого не пробовал.
Сразу успокою начинающих: сам процесс я проверил дважды по уже написанной мной инструкции — т.е. Вам вряд ли придется ломать себе голову над моими ошибками. Если даже при этом, в ходе выполнения описанных ниже действий, вы что-нибудь напартачите — то плата просто не загрузится с созданного Вами образа на карте памяти. Ничего страшного с установленной на вашем компьютере ОС не случится и BeagleBone Вы не сожжете.
Посему, для всех, кто готов к экспериментам — пошагово описанный процесс, лежит под катом.
Начнем… Запускаем терминал (bash) и идем в /home. Так, на всякий случай,
делается это командой:
Для сборки ядра нам понадобится GCC. Выкачиваем его и распаковываем:
Устанавливаем GCC под Ubuntu вот так:
Если Вы используете Debian, а не Ubuntu, то установка GCC будет выглядеть несколько по-другому:
Под Red Hat/Centos/Fedora процедура такая:
После установки неплохо было бы проверить, что мы установили:
У меня результат выполнения этой команды выглядел так:
Идем в директорию, в которую мы его скачали:
Скачиваем патчи для u-boot и устанавливаем их:
Оновляем пакет «device-tree-compiler»:
Теперь нам очень бы не помешало в хозяйстве ядро Linux.
Идем в /home и скачиваем его туда:
Переходим в папку /home/bb-kernel и запускаем сборку ядра:
После этого можно расслабиться (на Intel Core i7 это занимает около 20 мин)…
В ходе сборки ядра появится окно «Menuconfig», в котором можно добавлять/удалять установленные компоненты. Если ничего не менять, то и так все будет работать.
Дальше нам нужно собрать файловую систему rootfs.
Скачиваем ее:
Проверка контрольной суммы:
в ответ, если все нормально, получаем вот такое:
Теперь все, что мы тут наворотили, надо записать на microSD-карточку. Для этого сначала вставляем ее в кардридер и удаляем с нее все разделы:
Создаем новую таблицу разделов:
и форматируем созданные разделы:
Далее монтируем разделы:
после чего записываем на карту памяти bootloader u-boot:
Теперь создаем и открываем файл uEnv.txt:
В самом файле прописываем следующее:
Копируем uEnv.txt в /media/boot/
Копируем на карточку rootfs:
следом за этим копируем ядро вместе с модулями:
Дальше нам следует обьявить File Systems Table. Для этого правим файл fstab:
Он должен иметь такой вид:
и добавляем в него такие строчки:
Для того, чтобы сетевой контроллер виделся как eth0, правим файл 70-persistent-net.rules:
добавляем в него вот это:
в него дописываем:
Теперь извлекаем карту памяти и вставляем ее в BeagleBone. Подключаем плату к компьютеру по USB и подключаемся к ней через SSH:
Пароль: temppwd
Если все сделали правильно, то на экране мы увидим вот такое:
На этом пока все.

Для этого, кроме самой платы, понадобятся: установленный на компьютере Linux (у меня это Ubuntu 14.04), карта microSD или microSDHC (я использую последнюю, обьемом 8Гб) и кардридер. По идее, медленно
Сразу успокою начинающих: сам процесс я проверил дважды по уже написанной мной инструкции — т.е. Вам вряд ли придется ломать себе голову над моими ошибками. Если даже при этом, в ходе выполнения описанных ниже действий, вы что-нибудь напартачите — то плата просто не загрузится с созданного Вами образа на карте памяти. Ничего страшного с установленной на вашем компьютере ОС не случится и BeagleBone Вы не сожжете.
Посему, для всех, кто готов к экспериментам — пошагово описанный процесс, лежит под катом.
Начнем… Запускаем терминал (bash) и идем в /home. Так, на всякий случай,
делается это командой:
cd ~
Для сборки ядра нам понадобится GCC. Выкачиваем его и распаковываем:
wget -c https://releases.linaro.org/14.03/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux.tar.xz
tar xf gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux.tar.xz
export CC=`pwd`/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_linux/bin/arm-linux-gnueabihf-
Устанавливаем GCC под Ubuntu вот так:
sudo apt-get update
sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386
Если Вы используете Debian, а не Ubuntu, то установка GCC будет выглядеть несколько по-другому:
sudo apt-get update
sudo dpkg --add-architecture i386
sudo apt-get install libc6:i386 libstdc++6:i386 libncurses5:i386 zlib1g:i386
Под Red Hat/Centos/Fedora процедура такая:
yum install libstdc++.i686 ncurses-devel.i686 zlib.i686
После установки неплохо было бы проверить, что мы установили:
gcc --version
У меня результат выполнения этой команды выглядел так:
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2Следующим этапом выкачиваем u-boot:
Copyright © 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.
git clone git://git.denx.de/u-boot.git
Идем в директорию, в которую мы его скачали:
cd u-boot/
Скачиваем патчи для u-boot и устанавливаем их:
wget -c https://raw.github.com/eewiki/u-boot-patches/master/v2014.04/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_config
make ARCH=arm CROSS_COMPILE=${CC}
Оновляем пакет «device-tree-compiler»:
wget -c https://raw.github.com/RobertCNelson/tools/master/pkgs/dtc.sh
chmod +x dtc.sh
./dtc.sh
Теперь нам очень бы не помешало в хозяйстве ядро Linux.
Идем в /home и скачиваем его туда:
cd ~
git clone https://github.com/RobertCNelson/bb-kernel.git
Переходим в папку /home/bb-kernel и запускаем сборку ядра:
cd bb-kernel/
git checkout origin/am33x-v3.14 -b tmp
./build_kernel.sh
После этого можно расслабиться (на Intel Core i7 это занимает около 20 мин)…
В ходе сборки ядра появится окно «Menuconfig», в котором можно добавлять/удалять установленные компоненты. Если ничего не менять, то и так все будет работать.
Дальше нам нужно собрать файловую систему rootfs.
Скачиваем ее:
cd ~
wget -c https://rcn-ee.net/deb/minfs/trusty/ubuntu-14.04-minimal-armhf-2014-05-07.tar.xz
Проверка контрольной суммы:
md5sum ubuntu-14.04-minimal-armhf-2014-05-07.tar.xz
в ответ, если все нормально, получаем вот такое:
2ca8170aca04ca88ca4b946844a76844 ubuntu-14.04-minimal-armhf-2014-05-07.tar.xzпосле чего распаковываем rootfs:
tar xf ubuntu-14.04-minimal-armhf-2014-05-07.tar.xz
Теперь все, что мы тут наворотили, надо записать на microSD-карточку. Для этого сначала вставляем ее в кардридер и удаляем с нее все разделы:
export DISK=/dev/mmcblk0
sudo dd if=/dev/zero of=${DISK} bs=1M count=16
Создаем новую таблицу разделов:
sudo sfdisk --in-order --Linux --unit M ${DISK} <<-__EOF__
1,48,0xE,*
,,,-
__EOF__
и форматируем созданные разделы:
sudo mkfs.vfat -F 16 ${DISK}p1 -n boot
sudo mkfs.ext4 ${DISK}p2 -L rootfs
Далее монтируем разделы:
sudo mkdir -p /media/boot/
sudo mkdir -p /media/rootfs/
sudo mount ${DISK}p1 /media/boot/
sudo mount ${DISK}p2 /media/rootfs/
после чего записываем на карту памяти bootloader u-boot:
sudo cp -v ./u-boot/MLO /media/boot/
sudo cp -v ./u-boot/u-boot.img /media/boot/
Теперь создаем и открываем файл uEnv.txt:
nano uEnv.txt
В самом файле прописываем следующее:
#optargs=Для сохранения нажимаем +, для выхода из текстового редактора +.
#mmcroot=/dev/mmcblk0p2 ro
#mmcrootfstype=ext4 rootwait fixrtc
##Un-comment to enable systemd in Debian Wheezy
#optargs=quiet init=/lib/systemd/systemd
uenvcmd=run loadimage; run loadfdt; run mmcargs; bootz ${loadaddr} — ${fdtaddr}
Копируем uEnv.txt в /media/boot/
sudo cp -v ./uEnv.txt /media/boot/
Копируем на карточку rootfs:
sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
следом за этим копируем ядро вместе с модулями:
sudo cp -v ./bb-kernel/deploy/3.14.8-bone5.zImage /media/boot/zImage
sudo mkdir -p /media/boot/dtbs/
sudo tar xfov ./bb-kernel/deploy/*-dtbs.tar.gz -C /media/boot/dtbs
sudo tar xfv ./bb-kernel/deploy/*-firmware.tar.gz -C /media/rootfs/lib/firmware/
sudo tar xfv ./bb-kernel/deploy/*-modules.tar.gz -C /media/rootfs/
Дальше нам следует обьявить File Systems Table. Для этого правим файл fstab:
sudo nano /media/rootfs/etc/fstab
Он должен иметь такой вид:
/dev/mmcblk0p2 / auto errors=remount-ro 0 1Правим файл interfaces:
/dev/mmcblk0p1 /boot/uboot auto defaults 0 2
sudo nano /media/rootfs/etc/network/interfaces
и добавляем в него такие строчки:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
Для того, чтобы сетевой контроллер виделся как eth0, правим файл 70-persistent-net.rules:
sudo nano /media/rootfs/etc/udev/rules.d/70-persistent-net.rules
добавляем в него вот это:
# BeagleBone: net device ()Правим файл serial.conf:
SUBSYSTEM==«net», ACTION==«add», DRIVERS=="?*", ATTR{dev_id}==«0x0», ATTR{type}==«1», KERNEL==«eth*», NAME=«eth0»
sudo nano /media/rootfs/etc/init/serial.conf
в него дописываем:
start on stopped rc RUNLEVEL=[2345]Последний штрих:
stop on runlevel [!2345]
respawn
exec /sbin/getty 115200 ttyO0
sync
sudo umount /media/boot
sudo umount /media/rootfs
Теперь извлекаем карту памяти и вставляем ее в BeagleBone. Подключаем плату к компьютеру по USB и подключаемся к ней через SSH:
ssh 192.168.7.2 -l ubuntu
Пароль: temppwd
Если все сделали правильно, то на экране мы увидим вот такое:
Welcome to Ubuntu 14.04 (GNU/Linux 3.8.13-bone21 armv7l)
* Documentation: help.ubuntu.com/
Last login: Thu May 15 02:54:59 2014 from 192.168.7.1
ubuntu@arm:~$
На этом пока все.