Провайдер мобильного интернета обычно выдаёт каждому клиенту модем 4G и приставку для просмотра ТВ или потоковых сервисов. В компанию Zeus тоже прислали это устройство, но пользы с него никакой — телевизор здесь не смотрят. Зато очень нужны компьютеры с низким энергопотреблением, которые могут работать под Linux. Так появилась идея взломать эту телевизионную приставку, чтобы вместо Android TV запустить на ней Linux.
Пускай обычно провайдеры списывают эти приставки сразу же, как только выдают их клиентам, теоретически они всё же могут попросить вернуть оборудование. Поэтому мы решили, что после наших манипуляций приставка должна легко возвращаться к работе с исходным программным обеспечением. Это означает, что мы не можем вносить деструктивные изменения в конструкцию или перезаписывать важные части памяти устройства. Кроме того, должно работать самое важное оборудование приставки: Ethernet и HDMI.
RK3318 ЗАПУСКАЕМ LINUX C MicroSd Card
Наша телевизионная приставка имеет порт Ethernet, порт USB, разъемы питания и HDMI. Также в ней есть ИК-датчик для пульта ДУ и несколько светодиодов, показывающих состояние устройства. На этикетке приставки мы нашли Части открытого устройства
С помощью мультиметра в режиме прозвонки мы определили, какой пин отладочного порта заземлён.
Визуальный осмотр показал, что у порта есть контакт заземления, контакт питания (VCC) и два контакта ввода-вывода, подключённые к чему-то, похожему на главный процессор, подтянутые резистором высокого сопротивления, подключёнными к VCC.
Затем мы припаяли провода (это смотрится не очень красиво, но работает) к порту и использовали дешёвый логический анализатор, чтобы увидеть, что происходит на контактах ввода-вывода. Вот что происходит после загрузки устройства:
На скриншоте видно, что есть один контакт, на котором постоянно высокий уровень сигнала (из-за резистора между ним и VCC), и один контакт, на котором есть сигналы. Эти сигналы выглядят последовательными, поэтому мы использовали декодер последовательного протокола для декодирования сигнала. Оказалось, что это действительно последовательные сигналы со скоростью передачи 115200 бод. Из этого следует, что другой контакт, вероятно, является контактом RX (принимающим): он постоянно находится на высоком уровне, потому что мы ещё ничего не отправили.
Установка Linux на карту памяти для Андроид ТВ приставки
Hypnotix
Hypnotix – программа для потоковой передачи IPTV с поддержкой прямого эфира, фильмов и сериалов.
Hypnotix не предоставляет контент или телевизионные каналы, это плеер. Hypnotix поставляется с предварительно настроенным поставщиком IPTV под названием Free-TV. Free IPTV – проект с более 2000 телеканалов, которые можно смотреть бесплатно и законно.
- Есть возможность просматривать Интернет-тв и прослушивать радио;
- Имеется большое количество телеканалов и радиостанций, в том числе и русскоязычных;
- Есть возможность добавить вручную интернет-каналы и радиостанции: программа Hypnotix поддерживает поставщиков IPTV, использующих URL-адрес M3U, API Xtream или локальный список воспроизведения M3U;
- Поддержка просмотра в полноэкранном и оконном режиме;
- Функции воспроизведения: воспроизведение/пауза, перемотка, изменение громкости.
Источник: linuxmasterclub.ru
kuznik
Заказал на Aliexpress данный TV Box с целью прошить Armbian и получить контроллер автоматизации.
Брал с яндекс-диска: https://yadi.sk/d/srrtn6kpnsKz2/Linux/ARMBIAN/5.78_20190412/S912
Релиз-кандидат: Armbian_5.78_Aml-s912_Debian_stretch_default_5.1.0-rc1_20190412.img.xz
Скачал, распаковал (xz -d ./Armbian_5.78_Aml-s912_Debian_stretch_default_5.1.0-rc1_20190412.img.xz), залил с помощью Win32DiskImager на 16 Gb SD карточку, поставил.
Всё штатно, login root, password: 1234.
Далее, чтобы не сносить NetworkManager, настроил wlan0 в его конфигурационном файле (сам он из /etc/network/interfaces не подхватывает):
/etc/NetworkManager/system-connections/
[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=passwordforwifi
method=manual
dns=8.8.8.8;8.8.4.4;
address1=192.168.1.237/24
Потом стал решать вопрос с неработающим светодиодным индикатором.
Индикатор 7-сегментный на чипе FD628.
Конкретно в этой приставке он используется по схеме с общим анодом (это важно! Например, в Tanix 3 Mini/Max — схема включения с общим катодом. Если я сильно вру, просьба тапками не кидать, я основываюсь не на электронике, а на собранном модуле поддержки этого чипа).
Итак, когда-то я качал архив с модулем тут: http://www.rvq.fr/linux/tanix-tx3.php
Попробую и в этот раз взять модуль здесь.
Распаковал в папку /home/username/vfd
Далее нужны исходники ядра. Брал тут: https://github.com/150balbes/Amlogic_s905-kernel
Я собрал всё в один архив: модуль, dts файл и исходники демона vfdd, так что можно скачать уже допиленные и настроенные тут: https://github.com/brownynik/x92-vfd-support
Далее я собрал модуль ядра:
1. Скопировал всё из каталога vfdmod в каталог /usr/src/linux-5.1.0-rc1-aml-s912/drivers/vfd
2. В файле /usr/src/linux-5.1.0-rc1-aml-s912/Makefile задал EXTRAVERSION=-rc1-aml-s912 (актуальный суффикс версии ядра)
3. В заголовочном файле vfd-priv.h задал флаг #define CONFIG_VFD_PT6964_X92 — чтобы модуль собрался с учётом архитектуры данного TV Box’а.
4. В файле /usr/src/linux-5.1.0-rc1-aml-s912/driver s/vfd/Kbuild я также везде, где можно, указал данный флаг и выбрал vfd-ca.o в качестве библиотеки, которая поддерживает функционал с общий анодом.
5. cd /usr/src/linux-5.1.0-rc1-aml-s912; make clean; make ./drivers/vfd/vfdmod
6. Копируем vfdmod.ko в каталог /lib/modules/5.1.0-rc1-aml-s912/kernel/d rivers/vfd
7. insmod /lib/modules/5.1.0-rc1-aml-s912/kernel/d rivers/vfd/vfdmod.ko
8. modprobe vfdmod
С модулем всё, далее нужно решить вопрос с dts (dtb) файлом.
На форуме Armbian рекомендуют использовать gxm_q201_2g.dtb — не знаю, у меня с ним не загрузилась система. Я пока оставил dtb файл, который был задан по умолчанию в /boot/uEnv.ini (meson-gxm-khadas-vim2.dtb).
Если модуль загружен и dtb файл корректно сконфигурирован, то должен появиться файл /sys/devices/platform/meson-vfd/overlay.
Как из файла .dts получить готовый .dtb:
Есть два варианта — напрямую собрать .dtb или запустить частичный make ядра. Я воспользовался вторым вариантом.
Тут (/usr/src/linux-5.1.0-rc1-aml-s912/arch/a rm64/boot/dts/amlogic) лежит комплект *.dts файлов — это исходные device-tree настройки.
Я делал:
cd /usr/src/linux-5.1.0-rc1-aml-s912
make clean
make ./arch/arm64/boot/dts/amlogic/
После этого в каталоге появлялись собранные *.dtb файлы.
Вот фрагмент, отвечающий за vfd:
Как я ни упирался, перебирая GPIO (фрагменты с просторов инета), результата не было.
Оказалось, т.к. khadas — это довольно продвинутый SoC, у него есть FAN, управляемый по GPIO, пересекающимися с указанными здесь.
Закомментировал. Готовый файл с изменениями лежит тут.
После этого индикатор ожил, но начал показывать какой-то мусор.
Оказывается, в Tanix 3 используется схема с общим катодом, а в X92 с общим анодом. С точки зрения драйвера разница вот в чём:
Tanix: файл overlay — ссылка на участок памяти, 5 двубайтных «слов» (FFFF FFFF FFFF FFFF FFFF).
Каждое слово — это один цифровой символ или комплект битовых индикаторов режимов (USB,HDMI и т.п.). Биты в этом слове — отдельные сегменты символа.
Файл /etc/vfdd.conf содержит массив «segment_no» для маппинга сегментов побитно. «grid_num» = 5 — количество «слов» (или условных знакомест, вместо одного из которых битовые индикаторы состояний).
X92: файл overlay — ссылка на участок памяти, 7 двубайтных «слов». Каждое «знакоместо» «размазано» своими сегментами по определённому биту всех семи «слов».
Например, echo 0010 0010 0010 0010 0010 0010 0010 >/sys/devices/platform/meson-vfd/overl ay — отобразит символ «8» в самом левом числовом индикаторе.
Родилась идея немного доработать демона. В коде используется макроопределение #define X92_COMPATIBLE.
Также в составе доработанного демона лежит vfdd.conf с полностью настроенным индикатором.
Конфигурационный файл перестал быть совместимым со старой версией (у набора объектов — битовых индикаторов появился параметр «target» — это маппинг на слово, тогда как «bit» указывает на бит в «слове» для этого индикатора).
Запускаю весь комплект так:
/etc/systemd/system/vfdd.service:
[Service]
#Type=forking
#Type=simple
Type=one-shot
#PIDFile=/tmp/vfdd.pid
#WorkingDirectory=/etc/vfdd.scripts
WorkingDirectory=/etc
User=root
Group=root
#OOMScoreAdjust=-100
ExecStart=/bin/bash ‘/etc/vfdd.scripts/vfdd-start.sh’
ExecStop=/bin/bash ‘/etc/vfdd.scripts/vfdd-stop.sh’
ExecReload=/bin/bash ‘/etc/vfdd.scripts/vfdd-restart.sh’
TimeoutSec=20
Соответствующие скрипты в каталоге /etc/vfdd.scripts:
vfdd-start.sh:
#!/bin/sh
modprobe vfdmod
sleep 5s
echo ‘0000 0000 0000 0000 0000 0000 0000’>/sys/devices/platform/meson-vfd/ov erlay
echo »>/sys/devices/platform/meson-vfd/displ ay
/usr/bin/vfdd -L /var/log/vdffdebug.log 2>/sys/devices/platform/meson-vfd/ov erlay
echo »>/sys/devices/platform/meson-vfd/displ ay
vfdd-restart.sh:
#!/bin/sh
pkill -x vfdd
echo ‘0000 0000 0000 0000 0000 0000 0000’>/sys/devices/platform/meson-vfd/ov erlay
echo »>/sys/devices/platform/meson-vfd/displ ay
/usr/bin/vfdd -L /var/log/vdffdebug.log 2>https://kuznik.livejournal.com/3237.html» target=»_blank»]kuznik.livejournal.com[/mask_link]