Tv box linux wifi

Linux на X96 или какой же этот ваш ARM овно

Подогрел мне кум неудачно прошитую андроид-приставку X96-mini. Он вообще любитель «обновляться» без нужды, вот и этот девайс окирпичил.

Беззащитная машинка умещается на ладошке, и содержит в себе с понтом четырехядерный Amlogic S905w, два гига ОЗУ, и 16 Г флешку.

Что вам сказать, мужчины и женщины. Во время раскирпичивания девайса, я познал всю боль устройств на базе ARM и на меня снизошло просветление, почему ARM никогда не будет на десктопах, по крайней мере в том исполнении, котором он теперь.

Итак, начнем с того, что готового образа НЭД (уже молчу о том, что его сперва нужно создать). Нет, образы конечно есть. Только вот они под другие модификации. Образ под устройство с 1Гб отличается от образа под устройство с 2Гб. Они все отличаются от образа сделанного под устройство на базе памяти Samsung, а этот образ отличается от образа сделанного на базе памяти Hynix.

Визуально это видно как либо ОС не запускается вовсе, либо ядро падает в overflow и kernel panic, потому что не совпадают пару байтов откуда это ядро читать.

Ладно, готового образа нет, попробуем сделать свой. Но не тут-то было. Сначала нужно записать загрузчик. Но это загрузчик НЕ ПОД ARM, и даже не загрузчик под этот процессор. Это загрузчик под конкретное устройство.

Вот нагуглился аналогичный по процессору девайс Khadas VIM1. Вроде все красиво, u-boot стянулся, флешка стартонула. Но нет, это еще не все. Нужен DTB-файл. Это описание дерева устройств. У нас в X86 вроде такое тоже есть, но оно вшито производителем. Ладно, с горем пополам накопали в базе CoreElec такой вот DTB, переименовали в dtb.img, поскольку это имя файла захардкожено. И ничего. Потому что нужен еще файл с командами сраному u-boot’у. Мы не можем просто передать управление ядру под данную архитектуру (или хотя бы загрузчику который загрузит ядро), нет. Мы должны сначала определить откуда идет запуск, скопировать оттуда ядро в память по определенному адресу, а уже потом передать управление в начало этого адреса. Ладно. Так я и сделал.

Kernel panic, stack overflow. Сцука. И тут я присмотрелся: оказывается эта система считает себя Khadas VIM1 с одним гигом ОЗУ. Ну да, на месте ядра я бы тоже зафейлился, но на месте гребанной архитектуры, я бы разрешил ядру самому определить сколько в компьютере ОЗУ, а не основываться на каком-то левом файле.

Разумеется готовых u-boot в сети я не нашел, хотя нашел маны как конпельнуть. Жаль только в этом мане нету defconfig’а под это устройство, посему конпеляция увенчалась неуспехом. Более того, под Дебианом компилятор выдал какую-то ошибку шото типа duplicate или already defined, не помню. Поставил Арч. Скомпильнулось нормально, но не запустилось. Предсказуемо.

Читайте также:  Прога загрузочной флешки linux

Нашел прошивку Андроида мало-мальски предназначенную под похожее устройство. Конечно же она тоже не завелась, но благодаря полутора утилитам, удалось с нее вытащить u-boot.

Но этот u-boot грузит по умолчанию recovery.img — андроидный рекавери. Окай, в порядке эксперимента качаю TWRP, переименовываю его в recovery.img, перезагружаюсь — вуаля, работает. При чем даже радиоклава с радиомышкой и видит подключенную USB-флешку. Хотя и изображение на мониторе раздваивается. Ну да ладно, напуркуа мне эти рекавери. Записываю файл с командами u-boot’а, который собственно копирует ядро в память и его оттуда запускает, записываю ядро (у меня их два, с armbian и с manjaro) — болт тебе. booti: command not found. И таки да, через UART удалось вызвать консоль сраного u-boot’a (чем-то напоминает наш grub, лал), там такой команды нет. Пояндексив, нагуглил что команда booti загружает линуксовое ядро, команда bootm андроидное, и эта команда у меня есть. Окей, поменял. Но нет, не тот формат ядра. Конечно нет, ведь Андроид это ж не Линукс.

Подменив ядра на CoreElec (видимо с андроидной базой) — CoreElec таки запустился. Ура.

Я бы оторвал руки изобретателям подобной архитектуры. Или производителю железки. Или хоть кому-нибудь.

Если уж хочется дроч с загрузчиками — почему не выделить в процессоре область ? Это ж гребанный SoC. Этот загрузчик занимает полмегабайта. И может быть readonly. Ну как на один и тот же процессор могут использоваться разные загрузчики, в зависимости от которых у вас либо стартонет система либо нет ? Вы хоть представляете себе установочный образ Винды заточенный на работу под 8Гб ОЗУ и вылетающий если стоит 16Гб ? Вот и я нет. А представляете чтобы вы в grub прописали шота типа «RAM=2G» и ваш Линукс думал что у вас 2 Гб ? Более того, стал вылетать если вы его запустили на 4 Гб ?

Повторюсь, сей звиздец с прошивками и Линуксами творится в пределах нескольких девайсов с идентичным именем, на идентичной архитектуре, а зачастую даже на совершенно идентичных процессорах.

Короче ARM не светит на десктоп. И как мне кажется именно по причине прибитости гвоздями загрузчика к железу, железа к реализации в загрузчике. Если ваш девайс по каким-то причинам теряет свою ОС — он превращается в кирпич, по крайней мере пока вы не вкатите туда ОС с точно такого же девайса.

И да, если у кого-то есть дельные предложения по запуску Linux на этом девайсе — буду премного благодарен, пушо пока на нем работает только две ОС — CoreElec (андроид) и Khadas recovery (который хоть и Linux, но покоцанный дюже), впрочем видящий только гиг ОЗУ. X96 2G на Amlogic S905W.

Источник

Моя записная книжка

Мне попала в руки приставка X96 Max с нерабочим HDMI-выходом. Через AV-выход она работала, но с разрешимостью не более 576p, что делало возможным использовать ее только с кинескопными телевизорами, которых у меня нет :). Т. к. данная приставка по характеристикам превосходит разные Raspberry (Orange) Pi, а по цене дешевле, решено было установить на нее Linux и попытаться использовать в системе домашней автоматизации. Что из этого вышло – узнаете, дочитав данную статью.

Читайте также:  Linux group new file

Смотрим, что из себя представляет X96 Max:

OS: Android 8.1 | Android 9.0

CPU: Amlogic S905X2 четырехъядерный процессор Cortex A53 до 2 ГГц

GPU: Mali-G31 MP2 Dvalin

ROM/RAM: 32GB + 4GB LPDDR4

Сеть: Gigabit Ethernet, WIFI 802.11 b/g/n/ac, Bluetooth 4.0 | Ampack AP6356S

Видео выход: HDMI 2.1 до 4K при 75 Гц с HDR, AV-порт 3,5-мм (композитный).

Аудио: аналоговый стереозвук через AV-порт, цифровой звук через HDMI и оптический S/PDIF

USB: USB 3,0×1, USB 2,0×1

Разное: ИК-порт для внешнего приемника, светодиодный дисплей и слот для карт памяти microSD

Приступаем к установке:

Подготавливаем загрузочную microSD карточку

1) Если у Вас, как и у меня установлен Android 9, то его необходимо понизить до версии 8.1, т.к. на девятой android используется другой загрузчик, который имеет проблемы с загрузкой с карточки microSD и работой сетевой карты под linux. Как установить на приставку Android 8.1 я описал в этой статье. Если же у Вас установлена прошивка на Android 8.1, то переходим к пункту 2.

2) Далее переходим по ссылке https://github.com/ophub/amlogic-s9xxx-armbian/releases и скачиваем последний актуальный образ с Debian для нашего ТВ бокса. На момент написания статьи это Armbian_22.11.0_Aml_s905x2-km3_bullseye_5.15.72_server_2022.10.06.img.gz

3) Используя balenaEtcher или Rufus записываем образ карточку microsd объемом не менее 4Гб(Я использовал Rufus и карточку на 32Гб)):

4) На единственном доступном под Windows разделе microSD-карточки Boot переходим в папку \dtb\amlogic и копируем имя *.dtb-файла нашей приставки (meson-g12a-x96-max.dtb):

5) Вставляем скопированное *.dtb-файла в строки FDT=/dtb/amlogic/*** файлов \extlinux\extlinux.conf и uEnv, заменяя существующие имена dvb-файлов и сохраняем. Должно получиться так:

Загружаемся с карточки MicroSD:

6) Далее нужно вставить microSD-карточку в x96 max и выполнить загрузку с нее. Это можно сделать двумя способами:

a) Зажать при помощи спички или зубочистки на кнопку сброса, расположенную внутри AV-выхода, подключить питание и отпустить кнопку через 5-10 секунд:

b) Или установить на TV Box с плеймаркета или apk-файла программу Reboot to LibreELEC и перезагрузиться с android через нее:

7) Начнется загрузка Debian с microSD-карточки. В конце загрузки видим ip-адрес приставки и предложение создать пароль пользователя root:

8) Можно подключить клавиатуру и выполнить настройку используя экран телевизора. Для меня же удобней подключиться с компьютера при помощи PuTTY по этому адресу и выполнять все задачи с ПК:

9) Пользователь «root», стартовый пароль «1234». После входа необходимо сменить пароль для пользователя «root»:

Читайте также:  Linux sound programming pdf

10) Далее нужно выбрать кома́ндную оболо́чку (Command-line shell) Debian. Я выбрал zsh:

11) Следующим шагом создаем нового пользователя (root использовать в Linux не комильфо). У меня это логин пользователя chvv:

12) Задаем пароль для нового пользователя. Если попытаться ввести слишком простой паль пароль – система его не примет и скажет, что « it does not contain enough DIFFERENT characters ». Это значит, что должно использоваться правило «3 из 4», то есть в пароле должны быть одновременно как минимум три разных типа символов из четырех возможных: строчные буквы (напр. abcde), ЗАГЛАВНЫЕ (ABCD), цифры (12345), а также спецсимволы (!@#$): .

14) Подтверждаем часовой пояс:

15) Выбираем кодировку языка ввода:

16) Первоначальная настройка закончена. При желании можно выйти из системы и войти под вновь созданным пользователем.

Устанавливаем ARMBIAN на встроенную NAND-память

17) Обновляем списки пакетов

18) Проверяем и устанавливаем обновления Debian

На предложения системы соглашаемся:

19) Запускаем процесс установки на NAND

20) Выбираем ID своей приставки – по типу процессора, модели приставки и файла dtb. Для ТВ бокса x96 max это «301»:

21) Выбираем тип файловой системы:

22) Установка Armbian закончена. Теперь можно извлечь из x96 max microSD-карточку и передернуть разъем питания. Пойдет загрузка Armbian из встроенной памяти NAND.

Настройка ARMBIAN после установки

23) Снова подключаемся при помощи putty к ТВ боксу (обратите внимание, IP может измениться и быть не тот, что при загрузке с microSD-карточки).

Также смотрим версию Debian следующей командой (как видно из скриншота ниже у меня Debian 11.5)

24) Подключаем встроенный в ТВ Бокс x96 max цифровой дисплей. Для этого вводим команду:

и вводим пароль пользователя:

25) Выбираем тип (ID) дисплея (в нашем случае 11):

После этой команды на приставке включится дисплей:

26) Экран будет светиться до перезагрузки. Если перезагрузить x96 max то цифровой дисплей отключится и чтоб его снова включить, нужно будет повторить действия предыдущего пункта.

Чтоб дисплей после перезагрузки не отключался нужно ввести две команды:

sudo sed -i '/armbian-led/d' /etc/rc.local 

В следующей команде ‘/exit 0/i\armbian-led 11 ‘ число 11 обозначает тип дисплея из предыдущего 25-го пункта

sudo sed -i '/exit 0/i\armbian-led 11' /etc/rc.local 

Теперь дисплей будет работать и после перезагрузки.

27) Далее я расскажу как подключить WIFI вместо LAN. Проверяем состояние сетевых адаптеров:

28) Теперь подключаем с помощью команды

sudo nmcli dev wifi connect "dream2" password "network-password" 

Где вместо » dream2 » – нужно ввести название Вашей точки доступа Wifi, а вместо » network-password » – пароль доступа к этой точке.

29) Проверить активные подключения можно командой

Теперь LAN кабель можно отключать. Приставка будет работать по WIFI.

На этом пока все. В следующей статье я расскажу как установить систему умного дома Home Assistant на x96max

Источник

Оцените статью
Adblock
detector