Андрей Смирнов
Время чтения: ~18 мин.
Просмотров: 15

Banana Pi: через U-Boot к Arch Linux

image_thumb.pngОбзор и пошаговая инструкция по запуску миникомпьютераBanana Pi.

Недавно пришла посылка из Китая с моим новым миникомпьютеромBanana Pi.

Сразу скажу, что Banana Pi по своим характеристикам гораздо мощнее и функциональнее Raspberry Pi.

Заказывал я ее для разгрузки Raspberry Pi, так как последняя уже не справляется с кучей задач, которые я на ее скинул. Если говорить конкретно, то после создания облачного хранилища на Raspberry Pi я закинул туда всю информацию, которую не хотелось бы потерять — в результате это заняло около 400 ГБ дискового пространства. Малинка конечно все синхронизировала, но на переиндексацию у нее уходило несколько дней. Я человек терпеливый, но не до такой же степени.

Кроме облачного хранилища на моей малинке еще висел веб-сервер, торрент качалка и куча всяких полезняшек и приблуд, о которых я бы не хотел распространяться широкой общественности — у каждого есть свои секретные проекты по захвату вселенной 🙂

В общем, Raspberry Pi два года служила мне верой и правдой, но пришло время присмотреть ей замену. Мой выбор пал на китайский миникомпьютерBanana Pi.

Технические характеристики Banana Pi

image73.png

  • CPU — Allwinner A20* (ARM Cortex-A7 dual-core 2 x 1.0GHz)
  • GPU — ARM Mali400MP2 — complies with OpenGL ES 2.0/1.1)
  • System Memory — (SDRAM) 1GB DDR3 (shared with GPU)
  • Onboard Storage — SD/MMC card slot max. 64GB; up to 2TB on a SATA disk
  • Onboard Network — 10/100/1000 Ethernet RJ45 (optional USB WiFi Dongle)
  • Video Output — HDMI, Composite (AV video), extendable with the on-board LVDS connector
  • Audio — I/O — HDMI, 3.5 mm stereo jack output, on-board microphone input
  • USB — 2 x USB 2.0 ports, 1 x OTG micro-USB port, 1 x micro-USB for power supply
  • Expansion — Extendable 26-pin GPIO (General Purpose Input/Output) headers, camera connector, display connector for LVDS and a touch screen
  • Misc — 3 x on-board buttons(Power Switch, Reset, U-boot key); IR receiver
  • Dimensions — 92 mm x 60 mm
  • Weight — 48g

Два ядра по 1 ГГц, 1 ГБ оперативки, возможность подключения SATA жесткого диска, ИК передатчик и еще куча прибамбасов — приятная конфигурация для такой малышки. Правда?

Кстати, вот моя Banana Pi в отличном качественном корпусе:

IMG_20141016_225618.jpg

Обратите внимание, что второй разъем слева — это и есть разъем подключения питания, а на последней фотке Micro-USB разъем  для подключения устройств через OTG. Не перепутайте их.

Операционные системы для Banana Pi

На данный момент на Banana Pi можно установить следующие дистрибутивы Linux:

  • Lubuntu — легковесный и энергоэффективный производный от Ubuntu дистрибутив Linux с малым потреблением ресурсов. В качестве среды рабочего стола используется LXDE. Рабочий стол LXDE использует оконный менеджер Openbox и нетребователен к системным ресурсам.
  • Raspbian — собран на основе Debian 7 и оптимизирован для Raspberry Pi.
  • Android — операционная система для смартфонов, планшетных компьютеров, электронных книг, цифровых проигрывателей, наручных часов, игровых приставок, нетбуков, смартбуков, очков Google и других устройств. Основана на ядре Linux и собственной реализации Java от Google.
  • Bananian — собран на основе Debian 7 и оптимизирован для Banana Pi. Использует официальные Debian репозитории.
  • Berryboot  — загрузчик операционных систем разработанный для миникомпьютера Raspberry Pi.
  • OpenSuse — был основан на дистрибутиве Slackware, однако был значительно переделан и представляет собой обособленный дистрибутив, отличается от последнего форматом пакетов, а также системой настройки и администрирования YaST. Со временем SUSE включила в себя много аспектов Red Hat Linux (использование системы RPM и /etc/sysconfig).
  • Scratch — это бесплатные визуальные инструменты разработки, которые могут быть использованы студентами, учеными, учителями и родителями для образовательных и развлекательных целей.
  • Fedora — дистрибутив операционной системы GNU/Linux. Этот дистрибутив спонсируется фирмой Red Hat и поддерживается сообществом. Проект служит для тестирования новых технологий, которые в дальнейшем включаются в продукты Red Hat и других производителей. Компания Red Hat не предоставляет поддержку пользователям Fedora, поддержка осуществляется открытым сообществом.
  • Gentoo — популярный дистрибутив GNU/Linux с мощной и гибкой технологией Portage, совмещающей в себе возможности конфигурирования и настройки, а также автоматизированную систему управления пакетами. Последняя создавалась под влиянием системы управления пакетами во FreeBSD. Отличительной особенностью Gentoo является наличие оптимизации под конкретное аппаратное обеспечение.
  • ArchLinux — простой и гибкий дистрибутив Linux, использующий последние стабильные версии программ и дополняемый поддерживаемым сообществом репозиторием AUR. Arch «будет тем, что вы из него сделаете», и рассчитан не на новичков, а на более опытных пользователей.
  • OpenMediaVault — это решение на основе Debian Linux. Он включает в себя программный RAID (0,1,5,6),SMART / сообщения по электронной почте, SSH, (S) FTP, CIFS (Samba), NFS, DAAP медиа-сервер, RSYNC, ISCSI, BitTorrent-клиент и другое. Благодаря модульной конструкции, возможности могут быть увеличены с помощью плагинов. OpenMediaVault в первую очередь предназначен для использования в домашних условиях или небольших офисах, но не ограничивается этими сценариями. Это простое и легкое в использовании готовое решение, которое позволит каждому установить и администрировать сетевое хранилище без глубоких знаний.
  • OpenWrt — операционная система, основанная на ядре Linux, и предназначенная, в первую очередь, для домашних маршрутизаторов. Основные компоненты включают в себя ядро Linux, util-linux, uClibc и BusyBox. Размер всех компонентов оптимизирован в связи с тем, что в большинстве домашних маршрутизаторах сильно ограничен объём памяти. Конфигурация OpenWrt производится с помощью командной строки (с оболочкой ash) или веб-интерфейса LuCI . В репозитории доступно более 3500 опциональных пакетов программ, доступные для установки с помощью системы управления пакетами opkg.

Скачать их можно на сайте разработчика Banana Pi.

Для себя я выбрал Bananian.

Основным аргументом в пользу этого дистрибутива была поддержка официального репозитория Debian. Также, в этом образе нет ничего лишнего. То есть — нет вообще ничего, кроме SSH сервера. можно собрать систему полностью под свои нужды без всякого хлама, которого так много в том же Raspbian. Нет даже левых пользователей. Только root — только хардкор.

Дистрибутив Linux выбран — пора приступать к установке.

Установка Bananian на Banana Pi

Для записи образа системы Bananian на карту памяти вам понадобится программа Win32DiskImager и сам образ Bananian. Скачиваем архив с образом Bananian Linux.

Распаковываем содержимое архива.

Вставьте SD карту памяти размером от 4 Гб 10-го класса в кардридер.

Запустите программу Win32DiskImager. Укажите в поле Image File путь в скаченному образу Bananian. Выберите в меню Device букву диска с вашей флешкой.

Нажмите кнопку Write и дождитесь окончания записи образа Bananian на вашу флеш карту.

Вставляем флешку в Banana Pi, подключаем сетевой кабель, HDMI монитор и кабель питания.

Внимание, композитный видеовыход RCA не работает ни в одном дистрибутиве — это программная недоработка. Инструкция по включению RCA выхода есть на форуме разработчика.

Авторизируемся с логином root и паролем pi.

Вводим команду bananian-update для проверки обновлений.

Теперь посмотрим настройки Banana Pi, введя команду bananian-config

Нам предлагается изменить язык ввода. Жмем на клавишу «n».,так как нам нужен пока только английский.

Сразу договоримся, что надо нажимать именно «y» или «n», а не просто жать на Enter. Нажатие на Enter — это переход к следующему пункту настроек.

Вводим новый пароль пользователя root (пароль не отображается)

Повторяем ввод нового пароля

Теперь предлагается установить часовой пояс. Снова жмем на клавишу «y»

Для сохранения выбора жмем клавишу Enter

Следующий шаг — установка языка локализации. Снова жмем снова на «y»

Ищем русский вариант локализации и выбираем его нажатием на пробел

Жмем на клавишу Enter

Предлагается выбрать язык по умолчанию. Выбираем русский.

Жмем на клавишу Enter

Выбор имени хоста. Жму опять на «y»

Ввожу имя BananaPi

Кстати, подключаться теперь к Banana Pi можно по имени хоста или можно просто пингануть его, чтобы узнать IP адрес (это пишу на случай, если кто-то призабыл).

Следующий шаг — включение видео процессора. Снова жмем «y»

Далее предлагается выключить USB OTG. Пусть будет включена — может Android потом решу установить. Жму на клавишу «n»

Теперь предлагает разбить нашу флешку на разделы

Жму клавишу «y»

Теперь необходимо перезагрузить Banana Pi командой shutdown -r now

После перезагрузки обновляю список пакетов с репозитория командой: apt-get update

Затем обновляю сами пакеты командой: apt-get upgrade -y

Поздравляю. Теперь у нас чистый как слеза Linux и предварительно настроенная Banana Pi.

Как я использую Banana Pi

Установил веб-сервер и закинул на него самописный скрипт мониторинга состоянии моих миникомпьютеров.

Пробовал ставить WordPress — летает. Хоть ты хостинг свой организуй.

Установил торрент Transmission.

Создал облачное хранилище с помощью BitTorrent Sync.

На данный момент загрузка Banana Pi выглядит так.

Жабка душит

Через неделю после получения Banana Pi я прочитал на сайте разработчика, что они выпустили новую версию этого миникомпьютера под названием Banana Pro. В ней уже есть WI-FI.

Хоть я и заказал себе в Китае парочку USB WI-FI свистков, но сама мысль о выходе версии круче чем моя меня немного угнетает. Одно меня утешает — Banana Pro еще не поступила в продажу 🙂

Где купить Banana Pi?

Свою Banana Pi с корпусом я покупал на Aliexpress тут.

Блок питания с Micro-USB на 5В/3А уже несколько раз покупал тут.  Хороший блок питания — работает второй год на Raspberry Pi с подключенным USB жестким диском на 1 терабайт.

Если захотите подключить к Banana Pi SATA жестки диск, то вам понадобится такой кабель (я пока не покупал).

P.S.

Все то, что я ранее писал для Raspberry Pi будет работать и на Banana Pi.

Уже четвёртый год подряд, с момента выпуска Raspberry Pi, на рынки всего мира поставляются различные микрокомпьютеры на отличных от x86 архитектурах, которые выполняют роль медиацентров, контроллеров умных домов, веб-серверов и чего только душа гика не пожелает! К 2014-2015 году не все были довольны вычислительными возможностями «малинки» и начался выпуск десятков его клонов с более мощным железом. У большинства из них есть недостатки: фиксированная устаревшая версия ядра и загрузчика, небольшой выбор дистрибутивов. Под катом расскажу о том, как сбросить оковы вендора на примере Banana Pi.

Предыстория

Во второй половине 2014 года захотелось иметь домашний сервер, выбор встал между классическим на архитектуре x86 с процессором серии Intel Atom и чем-то новым для меня — микрокомпьютером на базе ARM. После оценки соотношений цены/производительности/возможностей выбор пал на Banana Pi — кроху с двухъядерным Allwinner A20, 1 гигабайтом DDR3, гигабитным LAN’ом, SATA разъёмом и прочими прелестями подобных устройств. Наигравшись пару дней, я смастерил из пластмассовых деталей корпус, в который Banana и была заточена и долго служила для всяких мелких задач. Дистрибутив стоял Bananian — это Debian 7 Wheezy урезанный во многом для экономии ресурсов. Более нового Debian 8.x нет и по сей день, можете сами представить насколько там старый софт, который получает лишь заплатки безопасности. Всё это безобразие продолжалось до середины лета… Наконец в июле возникла необходимость поднять веб-сервер и сопутствующие ему сервисы для своего pet project. Пора было сменить старый Debian на что-то менее консервативное и более удобное для меня.

Постановка задачи

К дистрибутиву было поставлено несколько требований: должен «из коробки» иметь репозитории покрывающие все нужды, программы в них должны быть наиболее приближённые к последним доступным версиям. Я слежу за развитием дистрибутивов и входящих в них программ, но при этом ленюсь компилировать всё из сорцов, поэтому очевидным выбором стал Arch Linux. На сайте производителя в разделе загрузок меня ждал просроченный на год образ с зашитым необновляемым ядром (3.4.100), загрузчиком такой же давности причём от другого устройства (Cubieboard 2). На сайте Arch Linux’а поддержки Banana Pi не было заявлено. Исходя из всего этого оставалось только одно: скомпоновать и запустить дистрибутив самому.

Матчасть

Das U-Boot (происхождение названия как-то связано с субмаринами и игрой слов на немецком и английском языках, см. U-boat) Это загрузчик операционной системы, ориентированный на устройства c архитектурами MIPS, PowerPC, ARM и другими. Умеет он многое: загружает систему с NAND, NOR, SPI, MMC, SATA, USB, TFTP, NFS, может сам храниться в ПЗУ устройства или внешней памяти, имеет встроенный dhcp клиент и shell, принимает сигналы с клавиатуры, выводит на UART, HDMI, VGA, аналоговое видео. Естественно для поддержки всего этого нужно иметь драйверы. Тут и начинается отличие от x86 платформ — ARM не имеет ACPI (усовершенствованного интерфейса управления конфигурацией и питанием) и UEFI (интерфейса взаимодействия между операционной системой и «прошивкой» устройства) и именно поэтому не существует как таковых унифицированных дистрибутивов для ARM компьютеров, но движение в сторону UEFI и ACPI идёт уже несколько лет. А пока это движение идёт мы находимся в реальном суровом мире и загрузчик нужно компилировать самостоятельно для разного железа. Железо это описывается в структуре данных под названием Device Tree (dt). Подробнее о DT можно узнать на посвящённом ему сайте: devicetree.org. В комплекте с исходными кодами загрузчика поставляется набор конфигурационных файлов для компиляции, а также Device Tree для 1089 устройств. Гугл, к сожалению, не находит этот список, поэтому он доступен по ссылке: U-boot supported devices.Linux Kernel О нём много писано, много сказано, а сейчас пригодится лишь несколько фактов:

  1. Встреченные мною дистрибутивы хранят ядро в нескольких формах:
    • Image — не сжатый образ.
    • zImage — сжатый самораспаковываяющийся образ.
    • uImage — образ, который имеет обёртку, включающую некоторую информацию для U-Boot’а.

    Ранее uImage использовались обширно для устройств с U-Boot, но за последние года разработчики научили загрузчик работать с zImage, который стал общепринятой практикой хранения образа ядра в дистрибутиве Arch Linux ARM.

  2. Радостная новость! Ядро в пределах одной архитектуры(ARMv5, ARMv6, ARMv7, ARMv8) с большой вероятностью не придётся компилировать для каждого устройства. Оно использует свою версию Device Tree, называемую Device Tree Binary (dtb). Это небольшие по объёму файлы, указывающие ядру какие модули нужно подгружать. Больше информации о dtb можно узнать тут.

От теории к практике

Понадобится:

  • Banana Pi или другой микрокомпьютер из списка поддерживаемых U-Boot’ом устройств
  • Карта памяти и кардридер
  • Компьютер с Linux
  • Установленный тулчейн для нужной архитектурыГде взять? Наиболее простым способом я считаю следующий:
    1. Скачать готовый тулчейн для своей платформы с сайта Linaro. Для Banana Pi нужен linaro-toolchain-binaries (little-endian).
    2. Добавить папку bin тулчейна в PATH:
      export PATH=~/your_toolchain_path/bin/:$PATH

Скачаем и распакуем исходные коды последней версии U-Boot:

wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2 tar -jxf u-boot-latest.tar.bz2 

Находим в появившемся каталоге u-boot-2015.07/configs свою «железку» и запоминаем название файла. Для Banana Pi конфигурационный файл называется Bananapi_defconfig. Ещё помните, что ядро Arch Linux ARM дистрибутиве хранится в zImage? Об этом нужно позаботиться заранее и перед компиляцией добавить возможность загружать самораспаковывающиеся ядра. Точной информации о том уже включено ли это по умолчанию у меня нет, поэтому в каталоге u-boot-2015.07/include/configs/ нужно найти заголовочный файл для платформы Вашего микрокомпьютера (для Banana Pi это sun7i.h) и написать внутри:

#ifndef __CONFIG_H #define __CONFIG_H ... #endif /* __CONFIG_H */ 

строку

#define CONFIG_CMD_BOOTZ

Это добавит возможность использовать в загрузчике команду bootz для запуска самораспаковывающихся сжатых программ.Источник Теперь этап компиляции. Все операции происходят в каталоге u-boot-2015.07.А что если без кросс-компиляции?

make CROSS_COMPILE=arm-linux-gnueabihf- Bananapi_defconfig

Непосредственно компиляция загрузчика:

make CROSS_COMPILE=arm-linux-gnueabihf-

В итоге в нашей рабочей папке должно появиться много файлов с префиксом u-boot. u-boot.bin содержит исполняемый файл загрузчика, но нужен нам файл с постфиксом «with-spl». SPL — небольшая программа, которая располагается непосредственно перед загрузчиком и загружает сам U-Boot в оперативную память. Для Banana Pi это файл u-boot-sunxi-with-spl.bin. Сохраним его, он пригодится чуть позже. Следующий шаг — подготовка флеш-карты с которой будет загружаться система. Как должна выглядеть её разметка: Подключим флеш-карту через кард-ридер и запустим утилиту fdisk:

fdisk /dev/sdb

Как узнать какое имя у Вашей карты? Добавим MBR разметку:

Command (m for help): o Created a new DOS disklabel with disk identifier 0xa53166ce.

И обязательно как минимум два раздела:

  1. 50-100 Мбfdisk, разметка первого
    Command (m for help): n           Partition type           p   primary (0 primary, 0 extended, 4 free)           e   extended (container for logical partitions)        Select (default p): p        Partition number (1-4, default 1): 1        First sector (2048-7831551, default 2048): 2048        Last sector, +sectors or +size{K,M,G,T,P} (2048-7831551, default 7831551): +75M         Created a new partition 1 of type 'Linux' and of size 75 MiB.        
  2. 2 Гб и болееfdisk, разметка второго
    Command (m for help): n        Partition type           p   primary (1 primary, 0 extended, 3 free)           e   extended (container for logical partitions)        Select (default p): p        Partition number (2-4, default 2): 2        First sector (155648-7831551, default 155648): 155648        Last sector, +sectors or +size{K,M,G,T,P} (155648-7831551, default 7831551): +3G         Created a new partition 2 of type 'Linux' and of size 3 GiB. 

После всего этого ввести «w», тем самым записать изменения на диск.Почему именно такие разделы? U-Boot’ом можно управлять с помощью скриптов, он читает их только из первого раздела накопителя, причём раздел этот должен быть с файловой системой FAT. В этот же раздел будет смонтирован каталог /boot будущего Arch Linux’а для удобного доступа к ядрам как из U-Boot скриптов, так и для быстрой подмены ядер с любого попавшегося компьютера. Второй раздел предназначен для корня системы. Остальные по желанию. После разметки нужно очистить место для загрузчика. Крайне важно не затереть первые 512 байт(MBR) и не затронуть 1024 секторы и далее (исходя из таблицы выше):

dd if=/dev/zero of=/dev/sdb bs=1K count=1023 seek=1

Запишем U-Boot:

dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

Теперь уже можно вставить флешку в устройство назначения, включить его и посмотреть как оно весело мигает LED’ами, подхватывает ip-адрес через dhcp, пытается достучаться до tftp сервера чтобы загрузиться и дружелюбно приглашает Вас в свой Shell показывая его через выдеовыход или UART. Но одного загрузчика мало, остаётся ещё несколько компонентов: скрипт для управления U-Boot’ом и сам дистрибутив Arch Linux. Отправляемся на os.archlinuxarm.org и скачиваем архив с подходящим нашей архитектуре дистрибутивом. Для Banana это ArchLinuxARM-armv7-latest.tar.gz. Распаковываем в отдельную директорию и продолжаем манипуляции с флеш-картой. Создадим файловые системы и примонтируем их в заданном порядке:

mkfs.vfat /dev/sdb1 mkfs.ext4 /dev/sdb2 mount /dev/sdb2 /mnt mkdir /mnt/boot mount /dev/sdb1 /mnt/boot 

Скопируем всё содержимое распакованного архива в /mnt:

cp -r ~/ArchLinux-generic-armv7/* /mnt

Заглянем в первый раздел флешки (/mnt/boot). Внутри нас ждёт папка dtbs и сжатый образ ядра — zImage. dtbs — это именно те Device Tree Binary, о которых шла речь выше. Для ARMv7 есть целых 301 dtb. Список можно увидеть здесь или непосредственно открыв директорию boot/dtbs дистрибутива на своём компьютере. Если dtb есть, то ядро заведётся с почти 100% вероятностью. Для Banana Pi нужный файл — sun7i-a20-bananapi.dtb. Он нужен нам для последнего и завершающего этапа — написания скрипта для U-Boot’а и, естественно, запуска всей полученной системы. Приступим. Создадим прямо на месте (в /mnt/boot) файл boot.cmd и начнём писать. Первым делом прикажем U-Boot’у загружать в RAM образ ядра:

fatload mmc 0 0x46000000 zImage

Затем dtb для нужного девайса:

fatload mmc 0 0x49000000 dtbs/sun7i-a20-bananapi.dtb

Установим параметры для запуска ядра:

setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootwait panic=10

И скажем ему загружаться из этой области памяти, тем самым передавая управление уже ядру Linux.

bootz 0x46000000 - 0x49000000

Области памяти доступные для загрузки у каждой модели свои и к сожалению я не знаю как определять их самостоятельно. Буду очень рад, если кто-то расскажет об этом простыми словами в комментариях. Написанный нами скрипт остаётся только скомпилировать. Для этого в пакете uboot-tools есть утилита mkimage, воспользуемся ей:

mkimage -C none -A arm -T script -d boot.cmd boot.scr

boot.cmd при желании можно удалить, загрузчику нужен лишь boot.scr.А бывает ещё что-то вроде boot.scr?Да, бывает. U-Boot для некоторых устройств можно сконфигурировать через простой текстовый файл uEnv.txt, это зависит от вендора, но с Banana Pi такой трюк не прокатит. И последний штрих — добавляем в etc/fstab новой системы разделы, которые будут подключаться при запуске:

/dev/mmcblk0p2    /    ext4    rw,relatime,data=ordered 0 1 /dev/mmcblk0p1 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2 

Флешку можно вставлять в девайс и радоваться свежей системе. Демон dhcpd сам подхватит адрес если в Вашей сети есть DHCP сервер. SSH сервер по умолчанию добавлен в автозагрузку. Аккаунт на дефолтных образах Arch Linux ARM изначально всегда один: root/root. Обязательно смените пароль и добавьте юзера с ограниченными полномочиями.

Итог

Что получили? Звёзды так сошлись, что поддержка моего микрокомпьютера есть в списке из 1089 устройств поддерживаемых U-Boot и среди 301-го среди поддерживаемых mainline ядром для ARMv7. Поэтому получили именно то, что и хотели: систему с самым свежим программым обеспечением, которое стабильно обновляется из репозиториев, включая ядро системы (на данный момент уже 4.1.4). Стабильная ветка загрузчика обновляется раз в 3 месяца и требуется лишь скомпилировать его и повторить процедуру установки, как сделано выше.Что не работает «out of the box»?В составе ядра и дистрибутиве нет ни ядерной, ни userspace частей драйвера Mali. Это обусловлено тем, что полнофункциональный билд возможен только с помощью проприетарного SDK, который предоставляется только партнёрам компании ARM.

Для ленивых

Подготовил образ для Banana Pi:Ссылка, Зеркало #1, Зеркало #2. md5 образа в архиве: f36d707c4c1fd857b50d37501b4a3d7a Записать образ на флеш-карту можно с помощью утилиты dd, либо win32diskimager (для Windows пользователей).

Источники

linux-sunxi.org/Mainline_U-bootelinux.org/RPi_Hubru.wikipedia.org/wiki/Das_U-Boot Желаю удачи тем, кто захочет повторить это у себя дома и буду рад справедливой критике.Используемые источники:

  • https://geekelectronics.org/raspberry-pi/banana-pi-pervoe-znakomstvo.html
  • https://habr.com/post/264259/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации