Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Отладочные платы » Sunshine-A20(-Lite)
Установка Arch Linux ARM cо свежим ядром и U-Boot (без поддержки GPU)
aptem
Добавлено 14.09.2016 19:47 Редактировалось 15.03.2017 22:03
0
Сообщение: 1
aptem
0

Пункты: 515
Регистрация: 25.08.2016
Всем привет :)

Поскольку мне не требуется от платы работы с графикой (GPU mali400), для которой есть только фирменные бинарные драйверы, раз и навсегда собранные для старого ядра linux-3.4, мне ничто не мешало установить на неё Arch Linux ARM со штатным ядром (на данный момент linux-armv7-4.7.3-1).

Всё описанное ниже проверено на плате Sunshine-A20-Lite с подключённым гигабитным Ethernet, жестким диском SATA, и звуком. Видео мне не нужно, но подключив HDMI-монитор для проверки фреймбуфера, я убедился, что при его наличии ядро действительно активирует simple-framebuffer, как и обещали разработчики sunxi-linux.org .

Установка

Установка Arch Linux на Sunshine принципиально не отличается от установки на аналогичные платы на Allwinner A20, например Cubietruck

Вы можете следовать приведённой выше инструкции для Cubietruck, только использовать мою сборку загрузчика u-boot-sunxi-with-spl.bin , а в /boot/dtbs/ на карточке положить мою сборку Device Tree sun7i-a20-sunshine.dtb

Как я это сделал

Поскольку для Sunshine готовой сборки загрузчика и .dtb ещё не было, мне понадобилось:
1) составить файл Device Tree на основе аналогичного .dts для Cubietruck;
2) собрать U-Boot с настройками специально для Sunshine.

Для меня самым проблематичным отличием Sunshine как от Cubietruck, так и всех других плат на A20, поддержка которых включена в имеющиеся шаблоны сборки (configs/*_defconfig) U-Boot и Device Tree, оказалась подача напряжения 2.5V для Ethernet и SATA от выхода LDO3 микросхемы AXP209. Соответственно, чтобы поднять сеть, мне пришлось начать составление Device Tree с добавления секций для LDO3 (и заодно LDO4) по образцу OLinuxIno-Lime2, только с другим напряжением. Далее я выкинул из .dts описание всего отсутствующего на Sunshine оборудования, и добавил поддержку всего присутствующего, хотя бы разведённого на штырьки, которое удалось найти в sun7i-a20.dtsi, сверяясь со схемой Sunshine и .dts аналогичных плат, где такое оборудование есть.

DRAM

Настройка памяти свелась к установке в шаблоне сборки загрузчика частоты
Код
CONFIG_DRAM_CLK=432
В дальнейшем, при разборе кода U-Boot я обнаружил, что остальные параметры, в зависимости от выбранной частоты, устанавливаются довольно похожие на те, что заданы в board/sunxi/dram_cubietruck.c "родной" сборки загрузчика. Многократное тестирование памяти проблем не выявило, время выполнения теста на Arch Linux и "родной" тестовой сборке практически не отличается.

Поскольку вся разница в настройках памяти для полной и Lite версий платы заключалась в её объёме, который в коде свежего U-Boot вообще никак не указан и определяется автоматически, как загрузчиком, так и ядром, я могу предположить, что моя сборка U-Boot будет работать не только на моей Lite, но и на полной версии платы.

Ethernet

Настройку
Код
CONFIG_GMAC_TX_DELAY=5
как прописано в gmac_core.c "родной" сборки ядра
PHP - Код
priv_clk_reg |= (5<<10); //pi
я штатно вписал в шаблон сборки загрузчика.

Кроме того, U-Boot даёт и другой способ настройки, не требующий его пересборки, достаточно вписать
Код
mw 0x01c20164 0x1406
в начало скрипт-конфига загрузчика (boot.txt). Здесь 0x01c20164 адрес регистра, 0x1406 = 6 + (5<<10), 6 не меняется, а значение TX_DELAY нужно сдвинуть на 10 бит (умножить на 2^10).

По моим наблюдениям, сеть работает бесперебойно со скоростью RX~920мбит/с, TX~720мбит/с при TX_DELAY от 1 до 5, при 6 TX падает до ~520мбит/с, при 7 сеть не работает вообще, при 0 работает с перебоями. Поскольку работа с сетью интенсивно загружает процессор, параллельное чтение или запись отправляемых/получаемых данных сильно замедляет обмен. Мне удалось удалось добиться скорости записи по сети (через NFS) на SATA-HDD, подключённый к плате ~240мбит/с, и чтения ~440мбит/с.

Мои исходники и прочие файлы

Шаблон сборки U-Boot Sunshine-A20_defconfig , его я положил в каталог configs/ исходников свежего U-Boot

Исходный файл Device Tree для Sunshine-A20/Lite: sun7i-a20-sunshine.dts

Полный набор файлов для сборки Device Tree: dts.tar.xz , ими я заменил всё содержимое каталога arch/arm/dts в исходниках U-Boot, после сборки получив сразу и загрузчик, и бинарный файл Defive Tree.

Патч на настройки сборки U-Boot, включающий возможность чтения загрузчиком UUID раздела: 0001-arch-linux-arm-modifications.patch . Требуется для штатного boot.scr ArchLinuxARM. Накладывается командой
Код
git apply ../0001-arch-linux-arm-modifications.patch
или
Код
patch -p1 -i ../0001-arch-linux-arm-modifications.patch
в корне дерева исходников U-Boot.

Собирать U-Boot можно тулчейном на десктопе, но поскольку это всё же не ядро, я собирал его прямо на плате в tmpfs, это занимает около 5 минут.

Скрипт для сборки Device Tree отдельно от загрузчика и ядра: mkdtb . Требуется пакет dtc и gcc, от cpp используется только препроцессор, так что тулчейн для этого не понадобится в любом случае.
Скрипт для сборки конфига U-Boot: mkscr . Требуется пакет uboot-tools.

Пример собранного boot.scr с добавленным прямо туда TX_DELAY=4 и параметрами ядра для включения вывода процесса загрузки в консоль на мониторе HDMI. Для работы с монитором эти параметры не требуется, просто без них на экране не будет виден сам процесс загрузки Arch Linux.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 14.09.2016 19:59 Сообщение: 2
Pavel Ivanchenko
Admin
4.39

Пункты: 91406
Регистрация: 24.03.2009
Пол: Мужчина
Большое спасибо за подробный инструктаж (за мной должек ;))!
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 06.11.2016 21:38 Сообщение: 3
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
оказалась подача напряжения 2.5V для Ethernet и SATA от выхода LDO3 микросхемы AXP209. Соответственно, чтобы поднять сеть, мне пришлось

спасибо добрый человек! если бы не эта строчка, то я бы еще неделю скакал вокруг подъема сетевого интерфейса на свежем юбуте..

Цитата
который в коде свежего U-Boot вообще никак не указан и определяется автоматически, как загрузчиком, так и ядром

за ядро не скажу - пока не рассматривал, но в юбуте, что в
# U-Boot 2014.10-rc2 Configuration
что в
# U-Boot 2016.11-rc1 Configuration
есть в файле
include/configs/sunxi-common.h
параметр
Код
/*#define PHYS_SDRAM_0_SIZE 0x80000000 2 GiB */
#define PHYS_SDRAM_0_SIZE (512 << 20) /* 0x20000000, 512 MB Bank #0 */

по дефолту прописано 2ГБ и с этим значением плата (-lite) виснет, стартует только после исправления на 512МБ..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
aptem
Добавлено 30.11.2016 12:30 Редактировалось 15.03.2017 22:05 Сообщение: 4
aptem
0

Пункты: 515
Регистрация: 25.08.2016
Цитата
по дефолту прописано 2ГБ и с этим значением плата (-lite) виснет, стартует только после исправления на 512МБ..

u-boot-2016.07, строчка действительно есть, но плата A20-lite стартует без каких-либо изменений в этой строчке.
Единственный патч в моей сборке – общий от ArchLinuxARM:
0001-arch-linux-arm-modifications.patch
В Sunshine-A20_defconfig задана только частота.
Спуститься к концу Подняться к началу
Персональная информация
Konachan
Добавлено 22.06.2017 13:48 Редактировалось 22.06.2017 20:50 Сообщение: 5
Konachan
5

Пункты: 3815
Регистрация: 30.08.2014
Собрал ядро последнее из stable, сделал всё как написано - сети нет. В u-boot сеть есть, ядро не видит https://pastebin.com/wiVaLBgJ
Можете конфиг ядра подкинуть, может что-то забыл в нем проставить?

p.s. разобрался. Там драйвер называется STM, а в нем лежит уже искомый sunxi gmac. Я снял все флажки, не обратив внимание - вверху же еще sunxi emac висит =) очень легко на автомате поставить не то =)
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » Sunshine-A20(-Lite)