Gisclub

4K | HDTV Ресиверы Enigma2 => Developers Public Team Gisclub.tv => Работа с кодом => Тема начата: Stuart от 17 марта | 2014г. | 21:50:40

Название: Разработка под Enigma2 на C/C++
Отправлено: Stuart от 17 марта | 2014г. | 21:50:40
На фоне одной из моих раннее созданных тем по поводу компиляции драйверов WiFi "свистка" под спутниковые ресиверы, меня частенько "долбят" в аську/личку с вопросами "а как"?  ;) Основной из которых - чем и как собирать, с остальным вроде как Google ещё в силах помочь.

Так вот большая часть как плагинов, так и схем оформлений (иначе "скинов") под Enigma2 написана на языке программирования Python. Однако для тех, у кого нет времени или просто не видит смысла на освоение достаточно простого скриптового языка, но на "ты" с C или/и C++ и тем более Linux, тоже может внести свою лепту в развитие Enigma2. Это и полное управление операционной системой, и компиляция драйверов, например, для новых чипсетов WiFi-адаптеров, и, наконец-то, та же доработка/разработка эмуляторов.  :bye:

Однако, как известно, нативной аппаратной платформой, под которую Enigma2 изначально разрабатывалась - процессоры Broadcom, а точнее mipsel-архитектура. Что явно отличается от наших десктопов, а значит нужны компиляторы под конечную платформу, которые, как оказалось, не так уж и просто достать. Поэтому обсуждение этой темы хотелось бы как раз и начать с кросскомпиляторов. Дальнейшие вопросы - по мере поступления (постараюсь по возможности и знаниям поддерживать топик в актуальном состоянии).

Итак, наиболее простой вариант - скачать готовый тулчейн. Вполне неплохой вариант выложен на сайте oscam (https://www.streamboard.de.vu/wbb2/tut-pics/toolchains/Toolchain_mipsel-tuxbox-linux.Dreambox.tar.bz2).

Однако он имеет древний компилятор gcc 4.3.2 аж 6-ти летней давности. Остальное подавляющее большинство тулчейнов либо рассчитано под архитектуру mips (которая, в отличие от mipsel имеет обратный порядок байт (big endian), применяемый чаще в сетях, а значит и в роутерах, под которые этим сами тулчейны и выложены), либо рассчитаны под С библиотеку uclibc, что нам тоже вроде как не совсем подходит (по крайней мере, в OpenPLi по умолчанию установлена libc, кстати последней на сегодня версии 2.19).

Поэтому выход только один - собирать тулчейн самому.

Самый простой вариант, для тех, у кого установлен "friendly-user linux", вроде ubuntu, - использовать утилиту crosstool-ng (https://crosstool-ng.org/). Кратко, как собрать нужный нам тулчейн в Ubuntu.

Качаем нужные библиотеки:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Получаем (https://crosstool-ng.org/download/crosstool-ng/) последнюю стабильную версию с сайта (svn у меня даже не собирался), распаковываем, переходим в папку с исходниками и собираем:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Далее копируем готовый образец конфига под нашу архитектуру (так же имеется вариант под sh4-процессоры):

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Можно просмотреть более подробные настройки через утилиту конфигурирования (как в ядре Linux) командой:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Особое внимание обратите на платформу - mipsel и порядок байт little endian, ну и libc. Можно поставить флажок экспериментальных версий, однако ничего из них почти не собирается. :)

Ну, и запускаем на компиляцию:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Где - 4 число процессов сборки (для систем с многоядерными процессорами).

В процессе подготовки могут быть ошибки при скачивании архивов. Не отчаиваемся - гуглим по имени и кидаем в ./build/tarballs. Так же в процессе сборки могут появляться ошибки компила. :) Опять-таки не расстраиваемся, а смотрим логи и исправляем (ещё более простой вариант - пробуем другую версию нужных либ, причём вписывать их можно непосредственно в .config-файл и разыскивая их в том же интернете).

Кому-таки собирать лень, может скачать мою сборку: ссылка (https://yadi.sk/d/a0_W9ctMKhXwL) на скачивание. В архиве присутствует лог сборки с полным конфиг-файлом, на котором удалось собрать gcc 4.4.7 с libc 2.11 и последними binutils 2.24. Как при помощи этого тулчейна собрать, например, тот же oscam, пример "how to" указан на их wiki (https://www.streamboard.tv/oscam/wiki/crosscompiling#dm800_mipsel) (скиньте кстати им ссылку на более свежий тулчейн).

Собрать с более свежей версией gcc никак не получалось, так как на отказ не хотели собираться, то Cloog, то PPL.

Для тех же красноглазиков, которые не любят лёгких путей, и предпочитает полностью открытый софт, а так же всё самое свежее - неплохой вариант собирать ваши модули в Gentoo.  :acute: Делать это даже проще, чем кажется. Устанавливаем Gentoo по этой (https://www.gentoo.org/doc/ru/handbook/handbook-x86.xml?part=1) инструкции.

Уже в Gentoo устанавливаем crossdev:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Затем ставим нужный нам тулчен, например:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Опять-таки имеются варианты (https://www.gentoo.org/proj/en/base/embedded/cross-development.xml#doc_chap2) под sh4-процессоры.

Устанавливаются актуальные хедеры ядра linux, компиляторов и библиотек. Например, вчера собрался тулчейн с gcc 4.8.2, libc 2.18, binutils 2.24 и kernel 3.12.13. С флагом -v можно указывать конкретные версии библиотек, например

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
По пути /etc/portage/make.conf

Добавляем строки следующего содержания:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Уже можем собирать нужные нам библиотеки. Например, для сборки openssl:

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Переходим в каталог с распакованными "сорцами" и

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Аналогично собираем, например, oscam (последнюю версию забираем с svn):

Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Перед сборкой можем указать флаги оптимизации под конкретную платформу/процессор, что может дать неплохую прибавку к производительности. Для Vu+ Solo кроме стандартных флагов оптимизации из makefile'а в виде -O2 и -pipe добавил -mips32r2 -mtune=mips32r2 -fno-caller-saves. По этому поводу более подробно уже гуглим самостоятельно по запросу "mipsel safe cflags".
Название: Разработка под Enigma2 на C/C++
Отправлено: Stuart от 05 мая | 2014г. | 18:40:03
Небольшое сообщение FAQ по вопросам, которые иногда задают в "аську".

Главный вопрос - где же сам API C/C++ для разработки под Enigma2. Если вкратце, то Enigma2 - это GUI-приложение, работающее на операционной системе Linux и ориентированное на STB (set-top-boxes). Фактически её можно запустить на персональном компьютере. Написана на Python с ядром, разработанным на C/C++ и использующая LinuxTV DVB API (https://www.linuxtv.org/). Последняя является стандартной частью любого ядра Linux, полностью открыта, то есть дорабатывается сообществом по всему миру, и задокументирована (https://www.linuxtv.org/docs/dvbapi/dvbapi.html). Текущая версия - 3.3 (помните, что для наших приставок в Wicardd приходится указывать DVBAPI3?). Фактически это и есть те самые API  C/C++ для разработки на приставки на базе MIPSEL BROADCOM процессоров, на котором функционирует Enigma2. Вы можете непосредственно управлять DVB-частью приставки (аудио и видеопотоки и пр.), для взаимодействия с Enigma2 - вам в другой раздел разработки плагинов на Python.

Ещё звучали вопросы про STAPI. Фактически это "DVBAPI" для SH4-приставок, например, "фортисов" и "октагонов". В отличие от DVD API, они закрыты, и поставляются STMicroelectronics только оплаченные лицензией библиотеки и include-файлы. Именно поэтому их практически невозможно найти в паблике, а разработчики приставок предоставляют так называемый Middleware-уровень, на основе которого можно разрабатывать плагины. Кстати, если кому нужен, то самый свежий Fortis API v1.20 вложил в сообщение.

Подробнее про STAPI можно почитать здесь (https://lvee.org/ru/reports/LVEE_2010_20). Разумеется, STAPI отличается от DVD API, именно поэтому по-разному работают эмуляторы и отличается "картинка". По поводу того, какая платформа лучше, согласен с данным (https://www.telesputnik.ru/forum/viewtopic.php?f=5&t=42886&start=620#p1150935) сообщение:

Цитировать
так как STI проц с его вагоном ограничений и костылей в STAPI(SDK) + STLinux и потянет(потянул уже) весь этот проект ко дну, и рекламой и пиаром не решить к сожалению фундаментальных проблем STI как платформы.
За такие деньги должны быть фичи работающие как звонок, те идеально чтобы пытаться себя абстрагировать от E2 например.
А с STI это невозможно. STAPI(SDK родом с ртос ресов mpeg2) STlinux порождение STI, проц ST40 уникальный - всё это тупик в развитии признанный самим STI.
Развивать платформу STI сам не в состоянии - пытается уже который год перейти на ARM но безуспешно пока. Писано переписано о STI и его нерешабельных проблемах много(сеть и тп), нечего повторяться. В своё время AMINO добился от STI открыть им доку на процессоры и STAPI полностью(ну почти), убил пару тройку лет на переписывание всего говнокода STAPI ну и что кончилось тем что STI поменял API к фирмваре в след чипах и всё куку. В общем STI - ужос это, для простых запперов да, но не для "ГРАНДОВ" в смысле топов.

Для написания под SH4 так же нужен кросскомпилятор. Можно использовать Gentoo crossdev, описанный выше, или достаточно поставить STLinux (качаем (https://ftp://ftp.stlinux.com/pub/stlinux/2.4/install) скрипт и запускаем в консоли ./install all-sh4-glibc, в openSUSE мне ещё пришлось указать флаг -x, фактически ставиться тулчейн для кросс-компиляции).
Название: Разработка под Enigma2 на C/C++
Отправлено: Stuart от 27 июня | 2015г. | 22:21:58
Если у кого возникают проблемы с самостоятельно сборкой тулчейнов, выкладываю свои.

sh4 - gcc 4.9.2, glibc 2.19
mipsel - gcc 4.9.2, glibc 2.19
arm - gcc 4.8.4, glibc 2.13

Скачать (https://yadi.sk/d/JX8xVpbogpAER)
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 27 ноября | 2015г. | 07:28:43
Собрано в crosstool-ng 1.22.0
sh4 - gcc 4.9.3, binutils 2.25.1, glibc 2.22

Скачать (https://yadi.sk/d/HufAfJ9kkmfcZ)
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 11 мая | 2016г. | 19:27:14
Toolchain Vu+ Solo4k
Для 32-битной системы...
Скачать (https://yadi.sk/d/z4MaA0tDrdpUk)
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 05 апреля | 2017г. | 11:05:23
Новая версия среды сборки тулчейнов (нестабильная).
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 27 июня | 2017г. | 09:59:22
Тулчейн для ресиверов на АРМ архитектуре, последний gcc 7.1.1
gcc-linaro-7.1.1-2017.05-x86_64_arm-linux-gnueabihf (https://releases.linaro.org/components/toolchain/binaries/7.1-2017.05/arm-linux-gnueabihf/gcc-linaro-7.1.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz)
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 15 декабря | 2017г. | 14:01:44
Тулчейн для ресиверов на АРМ архитектуре, последний gcc 7.2.1
gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf (https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabihf/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz)
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 25 июня | 2018г. | 13:05:44
Тулчейн для ресиверов на АРМ архитектуре, последний gcc 7.3.1
gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf (https://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/arm-linux-gnueabihf/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz)
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 17 октября | 2018г. | 17:04:16
Тулчейн для ресиверов на АРМ архитектуре, последний gcc 8.2
gcc-arm-8.2-2018.11-x86_64-arm-linux-gnueabihf (https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2018.11/gcc-arm-8.2-2018.11-x86_64-arm-linux-gnueabihf.tar.xz)

UP Released: November 23, 2018
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 26 января | 2019г. | 21:35:52
Тулчейн для ресиверов на АРМ архитектуре, последний gcc 8.2
gcc-arm-8.2-2019.01-x86_64-arm-linux-gnueabihf (https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/8.2-2019.01/gcc-arm-8.2-2019.01-x86_64-arm-linux-gnueabihf.tar.xz)

UP Released: January 15, 2019
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 27 июня | 2019г. | 18:28:59
Обновлённый тулчейн:
mipsel - gcc 9.1.0, glibc 2.25 (FPU hard), binutils 2.32, linux-4.10.17, openssl-1.0.2s, libusb-1.0.22, pcsc-lite-1.8.25

Скачать (https://drive.google.com/file/d/1pLSts06NYsAbVUcPneBItJ-jEPhCClma/view?usp=sharing), для ОС 32 битной.
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 28 июня | 2019г. | 20:12:19
Обновлённый тулчейн:
arm-eabihf - gcc 9.1.0, glibc 2.25 (FPU hard), binutils 2.32, linux-4.1.49, openssl-1.0.2s, libusb-1.0.22, pcsc-lite-1.8.25

Скачать (https://drive.google.com/file/d/1qHeR7IslDkx5N769-L1XbDRS9u5cccTB/view?usp=sharing), для ОС 32 битной.
Название: Разработка под Enigma2 на C/C++
Отправлено: vip1131 от 14 января | 2020г. | 20:25:20
Тулчейн для ресиверов на АРМ архитектуре, последний gcc 9.2
gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf (https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-a/9.2-2019.12/binrel/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz)