Skip to content

kaneAvocado/trudian-docs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Trudian TD-D801

Архитектура процессора: arm-linux-gnueabihf

Devkit состоит из трёх частей:

Документация по начальной настройке окружения находится в Instructions.en.docx

trudian_gcc_linaro_toolchain

cross-компилятор предоставленный производителем. Устаревший - gcc-linaro-5.5.0-2017.10

У Linaro ранее был отдельный форк тулчейна, который более не поддерживается. Находится на их официальном сайте releases.linaro.org. Последняя выпущенная версия - gcc-linaro-7.5.0-2019.12

Самый последний актуальный (универсальный) тулчейн можно скачать на сайте arm.com.

Совместимость с более новыми тулчейнами, ровно как и необходимость их использования находится под вопросом.

toolchain и скрипты сделаны под GNU/Linux x86_64, что делает необходимым развёртку виртуальной машины с любым GNU/Linux x86_64 дистрибутивом для ведения разработки.

trudian_x9_pack

rootfs устройства, который собирается из нескольких "слоев" и упаковывается в .pkg формат для использования в FileClient(X9).exe. Приложение полностью на китайском. Перевод интерфейса приложения на английский находится в папке screens.

Для запаковки образа нужно выполнить команду ./PackImage.sh D801H WGRus. Образ .pkg сгенерируется в папке image.

Для получения образа в формате .efw (для прошивки панели через слот SD-карты) необходимо воспользоваться CardKit.exe. Итоговый файл положить в корень SD-карты с названием package.efw.

Готовая прошивка находится в корне (image-D801H-WGRus-2.7.5-2025.09.25.045857.pkg и trudian_x9_pack-2.7.5-2025.09.25.045857.zip исходник)

rootfs

rootfs построен на основе Busybox.

За старт оболочки отвечает /etc/init.d/S60face-recg, который запускает /system/usrlib/Daemon. Исходный код Daemon отсутствует, но, судя по декомпиляции, основное, что он делает - это запускает cd /system/lua_test/ && lua main.lua &

Вся оболочка написана на Lua. Исходный код находится в /trudian_x9_pack/system_device/system_D801H/lua_test.

Lua обращается к нативному C-коду из trudian_x9_libdoor. Биндинги находятся в файле luadoor.c.

В процессе запуска Lua производится и инициализация железа (и watchdog) в том числе. Если удалить из образа запуск Lua - то устройство даже не пытается инициализировать сетевой порт. Полностью выпилить Lua будет очень сложно - придётся разбираться, какие именно методы вызывает Lua, в каком порядке и зачем. Проект на Lua состоит из тысяч строк скопированного туда-сюда спагетти кода, что делает эту задачу очень нетривиальной. Как вариант - можно оставить инициализацию (логику) Lua, но выпилить интерфейс, добавив в конце инициализации команду по запуску собственного бинарника с каким-то GUI.

Используемая библиотека для интерфейса в Lua-коде - проприетарная local LGUI = require "liblgui2". Исходный код и документация к ней отсутствуют, что делает невозможным создание чего-то своего (только копировать уже написанный китайский код в попытках разобраться какие функции за что отвечают).

rtty

На панели есть программа для удалённого доступа rtty по пути /system/shell/rtty.

Её можно вызывать:

  • напрямую в init скрипте: /system/shell/rtty --id=trudian --host=192.168.50.88 -a -D, где заменить IP адрес на собственный
  • runrtty("rtty.trudian.com", 5912, "e0fa2706e339a00f1070c951b7dafcfd"); - хитрый производитель зашил таким образом универсальный backdoor во все продаваемые панели

rtty работает в обратную сторону по сравнению с ssh - само устройство устанавливает соединение с "сервером".

Для установки и запуска сервера rttys на Debian/Ubuntu-совместимый хост выполнить (версию заменить на последнюю актуальную на момент прочтения):

wget https://github.com/zhaojh329/rttys/releases/download/v5.5.2/rttys_5.5.2_amd64.deb
sudo dpkg -i rttys_5.5.2_amd64.deb
rttys

Графика

В устройстве отсутствует видеокарта. Отрисовка изображения на экран производится с помощью Framebuffer: /dev/fb0. Тачскрин является обычным input устройством по адресу /dev/input/event1. Значения взяты из config/env.lua 31 строка

Поскольку устройство не поддерживает OpenGL и видеоускорение, выбор библиотеки для GUI-разработки заметно сужается. Самым простым и безболезненным решением выглядит DirectFB2, про которую можно прочитать подробнее на сайте directfb2.github.io. Поверх неё можно запустить любой другой графический тулкит с "софтверной" отрисовкой.

У библиотеки есть репозиторий с примерами

Скомпилированные под устройство библиотеку можно найти в папке libraries

Настройки cross-компиляции Meson:

[binaries]
c = '/home/developsoftware/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc'
cpp = '/home/developsoftware/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++'
ar = '/home/developsoftware/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ar'
strip = '/home/developsoftware/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip'

[host_machine]
system = 'linux'
cpu_family = 'arm'
cpu = 'armv7'
endian = 'little'

Glibc

# strings /lib/libc.so.6 | grep GLIBC_
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_PRIVATE

trudian_x9_libdoor

Исходный код libdoor.so, в которую зашита логика взаимодействия с железом.

Собирается с помощью Autoconf

В конфигурации Autoconf был заложен таргет бинарника Marshal, который находится в папке app. Его можно использовать как отправную точку для разработки будущего функционала

System Info

/dev/mmcblk0p1 on /data type ext4 не вайпается между переустановками ОС (как при OTA обновлении, так и через SD-карточку)

# mount
rootfs on / type rootfs (rw)
/dev/root on / type ext4 (ro,noatime)
proc on /proc type proc (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)
tmpfs on /tmp type tmpfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
sysfs on /sys type sysfs (rw,relatime)
/dev/mmcblk0p1 on /data type ext4 (rw,noatime,errors=remount-ro,data=ordered)
/dev/mmcblk0p3 on /system type ext4 (rw,noatime,errors=remount-ro)
/dev/mmcblk0p5 on /cache type vfat (rw,noatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
# df 
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               222135    151366     70769  68% /
tmpfs                   140932         0    140932   0% /dev
tmpfs                   140932         0    140932   0% /dev/shm
tmpfs                   140932        12    140920   0% /tmp
tmpfs                   140932        16    140916   0% /run
/dev/mmcblk0p1         6489832   3327292   2813152  54% /data
/dev/mmcblk0p3           63461     52445     11016  83% /system
/dev/mmcblk0p5          523248         4    523244   0% /cache

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors