Показаны сообщения с ярлыком u-boot. Показать все сообщения
Показаны сообщения с ярлыком u-boot. Показать все сообщения

openSUSE 13.1 на BeagleBone Black

BeagleBone Black — одноплатный компьютер на основе процессора TI AM3358 (Cortex-A8), выпущенный весной прошлого года:

На нем вполне успешно может загрузиться и даже работать openSUSE 13.1. Готовые образы для нанесения на microSD карточку находятся здесь. Эти же самые образы должны в теории работать и на BeagleBone. Конечно, пока все на этапе интеграции и поиска ошибок, поэтому имеется подробная инструкция по запуску:
  1. Скачать, распаковать и сделать dd на карточку образ системы *.raw.xz
  2. Подключить отладочный TTL-RS232 порт (можно использовать, например, такой, но важно помнить, что разработчики BeagleBone Black не поставили на свою плату преобразователь уровней и сигнал с отладочного RS232 идет в виде 3.3V. Подключение через обычный COM-порт на большом компьютере обречено на провал.), руководствуясь распиновкой. Используя screen /dev/ttyUSB0 115200, во-первых, можно будет легко видеть все этапы начиная от работы u-boot. Во-вторых, запустится Yast2 firstboot и попросит вас задать root пароль, завести пользователя, установить временную зону и системное время (аналогично тому, как это происходит на соответствующем этапе установки с DVD), а для этого потребуется интерактивное взаимодействие.
  3. Помните, что для загрузки с внешней карты памяти при подаче питания на устройство нужно удерживать кнопку S2 (она же boot select switch). Подсказка — загрузившись с SD карты можно подмонтировать раздел встроенной MMC памяти и переименовать или удалить файл загрузчика MLO, после этого загрузка будет всегда начинаться с SD, но загрузиться с MMC больше не получится.

Технические подробности (тем, кто хочет продолжить ковыряния) изложены в списке рассылки: http://lists.opensuse.org/opensuse-arm/2014-01/msg00001.html.

AVR32: Atmel NGW100

Рассказ о маленьком одомашненном роутере. В качестве роутера я использую Atmel NGW100 Network Gateway Kit, плату на процессоре AT32AP7000. Розничная цена, для справки, чуть менее $100. Один из серьезных недостатков — не имеет USB-host контроллера, однако может подсоединяться как USB-устройство, таким образом сразу до трех сетевых интерфейсов доступно для использования(два Ethernet и один USB). Две флеш-микросхемы по 8Mb, оперативная память — 32Mb, устройство для чтения SD-карт, вывод программатора JTAG и много выводов GPIO, которые могут быть использованы произвольным образом.

AVR32 — это RISC-архитектура процессоров, выпускаемых компанией Atmel, основанная на ARM. На двух флеш-модлях NGW100 расположен загрузчик U-Boot и файловые системы ОС Busybox/Linux. Все свежие исходники и готовые бинарные образы можно взять на сайте Atmel. Исходники представляют собой модифицированный BuildRoot, куда положены все необходимые для сборки и работы с архитектурой AVR32 патчи для GCC, U-Boot, Linux.

После года вполне успешной работы, я решил обновить систему на роутере, добавив туда блек-джек и шлюх новых приложений. Процессор AT32AP7000 экспортирует терминал через COM-порт, поэтому кабель RS232 облегчает работу с платой: соедините ваш компьютер и NGW100 и используйте minicom или какой-нибудь другой терминал для связи, вам будет доступна командная строка загрузчика U-Boot(необходимо быстро нажать пробел, когда об этом просят, иначе начинается загрузка), а так-же командная строка ОС, когда она загрузится. Так-же приветствуется наличие TFTP-сервера на вашем компьютере, поскольку загрузка образов через KERMIT происходит достаточно долго. Исходники и инструкции для сборки полностью доступны на сайте Atmel.

К процессу конфигурации и сборки никаких комментариев добавить невозможно, поскольку тут все достаточно очевидно и инструкции доступны. После распаковки исходников:

# make atngw100_defconfig
# make menuconfig
# make source
# make

После компиляции получится три файла: образ u-boot, образ корневой файловой системы и /usr в формате jffs2. Все образы также доступны в готовом виде на сайте Atmel.

На странице AVRFreaks Firmware_upgrade доступны исчерпывающие инструкции по обновлению микрокодов. Общая схема обновления примерно следующая: находясь в командной строке загрузчика uBoot необходимый образ загружается в оперативную память, используя тот или иной канал связи(TFTP, KERMIT, SD-карта, etc.); снимается защита с нужного участка флеш-памяти и образ копируется на флеш-память. Загрузчик uBoot, корневая файловая система и настройки uBoot располагаются на первом флеш-модуле, файловая система /usr полностью занимает второй. Чтобы обновить загрузчик, можно воспользоваться либо программкой flash-upgrade, доступной на сайте Atmel, либо непосредственно загрузить образ uBoot, как описывается на сайте AVRFreaks. Если при обновлении загрузчик окажется поврежден, то для его восстановления понадобится программатор JTAG.

Проверьте, чтобы у вас загружается правильное ядро, у меня почему-то получилось так, что загрузчик искал ядро в /uImage, а лежало оно в /boot/uImage. для этого нужно соответствующим образом изменить переменную окружения загрузчика (bootcmd=fsload /boot/uImage;bootm). На странице U-Boot command reference есть полный список команд U-Boot с описаниями.

Обновление корневой файловой системы выглядит следующим образом: загружается её образ, очищается место для корневой системы, образ копируется на флеш. Команда копирования принимает три аргумента, последний из которых — размер копируемой области в шестнадцатеричном формате:

> set ipaddr 192.168.0.50
> set serverip 192.168.0.1
> tftp 0x90000000 rootfs.avr32.jffs2-root
> protect off 0x20000 0x7EFFFF
> erase 0x20000 0x7EFFFF
> cp.b 0x90000000 0x20000 0xSIZE
> protect on all


Обновление файловой системы /usr производится из успешно(но с ошибками из-за рассогласования версий файловых систем) загруженной операционной системы, вначале образ загружается в директорию /tmp (обратите внимание, что /tmp смонтирован в ramdisk, попытка временно разместить образ в другом месте не увенчается успехом по двум причинам: не хватит места, скорость записи на флеш очень медленная), устройство /dev/mtd3 отмонтируется, очищается и туда копируется содержимое образа:

> tftp -g -r rootfs.avr32.jffs2-usr 192.168.0.1
> flash_eraseall /dev/mtd3
> dd if=/tmp/rootfs.avr32.jffs2-usr of=/dev/mtd3 bs=1056
> reboot


Обновленная операционная система полностью готова к дальнейшей настройке и использованию.



Небольшое добавление: почему-то busybox 1.13.1 обладает очень интересным поведением: ifup гасит DHCP-клиент сразу после того, как тот получит IP-адрес, это означает, что когда аренда адреса истечет, никто её не обновит. Поэтому перед сборкой busybox надо найти busybox.config в target/device и выключить там опцию CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP, включив CONFIG_APP_UDHCPC.
Будет использовать DHCP-клиент из набора busybox, однако в такой конфигурации он будет запущен постоянно.

Еще одно небольшое добавление: возможно придется использовать патч busybox-1.13.1-bindtodevice.patch, исправляющий проблемы с падением udhcpc во время попытки обновить аренду.