Многим из читателей знаком дистрибутив Armbian - “серебряная пуля” для владельцев устройств серии Orange Pi. Без “этих ребят” наши одноплатники давно пылились бы на антресолях.
Возможно, кто-то уже убедился, что “ядра” под определенный процессор от Allwinner (H2/H3/A20/A10) одинаковые, а “дистрибутив” различается только настройками script.bin (для legacy-ядер) или uboot и Device Tree.
Механизм Device Tree был введен в ядрах 4.x для облегчения портирования Linux на новые устройства. Это файл, описывающий “дерево устройств” в некотором универсальном виде. При старте системы он передается в качестве параметра загрузчику, который уже в свою очередь правильно инициализирует систему. Вроде так :).
Таким образом открываются возможности для установки Armbian даже на те устройства, где он официально “не существует”.
Во избежании недоразумений - всё нижеописанное относится к устройствам на Allwinner A10/A20, других у меня в данный момент нет :) или они поддержаны.
Для этого есть два пути:
- Путь правильный - собирать свою систему, благо разработчики Armbian предоставляют такую возможность. Нужно выбрать загрузчик под своё устройство, который будет использовать нужный DT-файл. Вполне годный вариант, если вы точно знаете, что у вас за девайс, и он поддержан в исходниках ядра linux-sunxi.
- Путь неправильный - выбрать “похожий” вариант устройства и подкрутить его DT-файл. Потребуется куча усилий, но в результате вы можете вернуть к жизни какой-нибудь убогий девайс на Android 4.0.4.
Ясное дело, я выбрал путь второй (устройства черти-какие). Помня успешный опыт установки legacy-ядер от уважаемого romanrm от Cubieboard/Cubieboard2 на чудо-устройства из Поднебесной я решил попробовать установить mainline-версию Armbian на выводок устройств с КДПВ (картинки-для-привлечения-внимания).
Итак, слева направо:
- Подделка под MK808C. Работает на Allwinner A20, но, в отличие от оригинала имеет всего 512 мегабайт памяти. Про оригинал можно почитать вот тут. Прошивка Android 4 для него есть, как пишут на 4pda - получена от продавца. Так что никаких кастомов и обновлений, то есть тупиковая ветвь эволюции. “Похож” на Cubieboard 2.
- Measy U1A. Типа бренд. Allwinner A10, 1 гб памяти. Из положительных вещей - на нём работает Cyanogen. “Похож” на Cubieboard 1.
- Странный образец по имени Intcrown. Очень похож на предыдущий, но вот только Cyanogen поставить нельзя (другой WiFi чип), есть какая-то прошивка на 4pda, искать в теме про MK802II (даже вспоминать об этом не хочу). Опять-таки похож на Cubieboard 1.
Ну а дальше всё просто - качаем дистрибутивы Armbian для Cubieboard 2 и 1, пишем на microSD и грузим. Небольшая загвоздка с Cubieboard 1 - в Armbian он помечен, как deprecated, т.е. ветка не развивается, но, к счастью, образ доступен для скачивания.
С удивлением обнаруживаем, что система вполне себе стартует, но в dmesg видим массу “красноты”, ибо у нас нет ни Ethernet, ни Sata, ну может ещё пары устройств. На этом этапе лучше обновить систему командами apt-get update и apt-get upgrade.
И тут начинается некоторая магия. Примеры будут для Cubieboard 1, для второй версии принцип тот же.
Шаг первый
Делаем копию DTB-файла, который будем мучить.
cd /boot/dtb sudo cp sun4i-a10-cubieboard.dtb sun4i-a10-cubieboard_patched.dtb
В файле /boot/armbianEnv.txt добавляем строчку:
fdtfile=sun4i-a10-cubieboard_patched.dtb
Перегружаем устройство и проверяем, что всё работает, как до редактирования.
Шаг второй
Для начала нужно декомпилировать dtb-файл в формат, пригодный для редактирования.
dtc -I dtb /boot/dtb/sun4i-a10-cubieboard_patched.dtb -O dts -o /boot/dtb/sun4i-a10-cubieboard_patched.dts
Шаг третий
Теперь открываем полученный .dts и редактируем. Хороший вопрос - что и как убирать :) Смотрим в dmesg, находим несуществующие устройства типа ethernet, sata, ir и меняем их статус из “okay” на статус “disabled”.
Вот пример для sata:
1 | sata@01c18000 { |
Лучше отключать устройства по одному и проверять, достигнут ли желаемый эффект. Перед перезагрузкой нужно скомпилировать dts обратно в dtb.
dtc -I dts /boot/dtb/a10-cubieboard_patched.dts -O dtb -o /boot/dtb/a10-cubieboard_patched.dtb
Намылить-смыть-повторить.
Финально я лично получил вполне работающую систему. Главное тут - “не перехимичить” с устройствами, иначе останетесь без USB или там hdmi-вывода.
Шаг четвертый, последний и необязательный
В armbianconfig отключите обновления uboot и ядра. Это полезно, если не хотите повторять все приседания или гадать, почему система не грузится после обновления этих компонентов.
На выходе - правильно работающее устройство с ядром 4.x, которое вполне справится с задачами домашнего сервера.
Что ещё можно сделать? Например, для первого и третьего девайса на фотографии установить в nand систему на legacy ядре. В этом случае, правда, придётся выполнять отключение в script.bin - как его редактировать, можно почитать в документации на linux-sunxi. Но устанавливать не просто систему, а с GUI - ведь там будет работать аппаратное ускорение. И карманная рабочая станция вполне готова к работе :), а про винтажный Android забыть, как про страшный сон - всё равно прошивки скоро невозможно будет найти.
Да, кстати, если кто-то будет собирать какие-то 3rd-party драйвера с гитахаба в Armbian, тут нужно выполнить ещё один шажок, а именно:
1 | cd /usr/src/linux-headers-YOUR_KERNEL-sunxi/scripts |
После этого драйвера вполне себе собираются.
На этом вроде всё. Пожалуй, про Android-свистки уже хватит, много уже про них написано.