Tina_Linux_Графическая система_Руководство по разработке
Tina_Linux_Графическая система_Руководство по разработке

Tina_Linux_Графическая система_Руководство по разработке

1 Обзор

В этом документе будет представлена ​​оконная система, портированная в Allwinner Tina Linux, и способы ее использования, включая MiniGUI, QT5, EFL, GTK+ (WebkitGtk, Midori), DirectFB, Wayland, общая структура следующее:

[Передача изображения по внешней ссылке не удалась. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-HxqCAORu-1677205148391) (C:\Users\livel\Downloads\OpenRemoved_Tina_Linux_Graphics_system_development_Guide-image1). .jpg)]

Область применения: Tina Linux v3.5 и выше. Соответствующий персонал: Персонал, связанный с разработкой программы пользовательского интерфейса.

2 MiniGUI

2.1 Описание мини-интерфейса.

В настоящее время основная библиотека MiniGUI3.2 и ее компоненты перенесены в Tina. В следующей таблице приведены описания пакетов, связанных с MiniGUI:

Таблица 2-1: Описание пакета, связанного с MiniGUI

имя пакета

иллюстрировать

cell-phone-ux-demo

Приложение мобильного интерфейса MiniGUI

libminigui-gpl

Основная библиотека MiniGUI

minigui-res-be

Библиотека ресурсов MiniGUI

mg-samples

Пример приложения MiniGUI

libmdolphin

Основная библиотека браузера MiniGUI

mdolphin-release-home

Браузерное приложение MiniGUI

mdolphin-release-tv

Браузерное приложение MiniGUI

mdolphin-samples

Браузерное приложение MiniGUI

libmg3d

MiniGUI предоставляет компоненты 3D-интерфейса.

libmgeff

Фреймворк анимации MiniGUI

libmgi

Компонент метода ввода MiniGUI

libmgncs

Новый набор элементов управления MiniGUI

libmgp

MiniGUI предоставляет компоненты функции печати.

libmgplus

Улучшение интерфейса графического рисования MiniGUI.

libmgutils

MiniGUI предоставляет шаблоны диалогов.

Таблица 2-2: Приложения, разработанные на основе MiniGUI

имя пакета

иллюстрировать

multimedia-test

Тестовая демонстрация мультимедиа, включая предварительный просмотр камеры, фотосъемку, запись видео, воспроизведение аудио и видео, а также функции просмотра изображений.

r11-board

Демо-версия умной стиральной машины, включая некоторые эффекты скольжения интерфейса, элементы управления выбором и другие распространенные функции.

smart-music-player

Демо-версия интеллектуального музыкального проигрывателя, включая реализацию скользящего списка, адаптированная для R328 и R329.

Ниже приведен скриншот приложения мультимедиа-тест:

Нажмите на значки SD-карты и U-диска, чтобы отформатировать SD-карту и U-диск. При съемке и записи требуется правильный формат, иначе запись будет невозможна. Синие SD-карта и USB-накопитель указывают на то, что SD-карта и USB-накопитель установлены правильно, а серые — на то, что они установлены неправильно. Если SD-карта и U-диск установлены одновременно, SD-карта используется по умолчанию. Щелкните соответствующий значок, чтобы войти в соответствующий функциональный интерфейс.

Ниже приведен снимок экрана приложения r11-board:

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

Нажмите кнопку «Стирка», «Полоскание» и «Обезвоживание» внизу, чтобы открыть скользящий список для выбора различных параметров. Нажмите кнопку «Функция +», чтобы запустить вращающуюся анимацию.

Ниже приведен скриншот приложения smart-music-player:

2.2 Конфигурация MiniGUI.

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Gui --->
    Minigui --->
        <*> libminigui-gpl --->
            [*] Enabel truetype font support (Поддерживает векторные шрифты TTF)
            [*] Enabel tslib support for MiniGUI (Поддерживает сенсорный экран)
            [ ] Enabel g2d support for MiniGUI (Поддерживается аппаратное обеспечение G2D, требуется механизм отображения sunxifb, в настоящее время поддерживается только на R528/D1)
            [ ] Enabel g2drotate support for MiniGUI (Для поддержки вращения G2D вам необходимо использовать механизм отображения sunxifb, который в настоящее время поддерживается только на R528/D1)
            [ ] Enabel sunxifb support for MiniGUI (Обработчик отображения, аналогичный fbcon, длина кадрового буфера больше, чем 3, переключиться на кольцевой буфер)
            [ ] Enabel sunxifbion support for MiniGUI (Механизм отображения, применение буфера отображения через libuapi)
            [ ] Enabel coortrans cw support for MiniGUI (поворот пользовательского интерфейса 90 степень)
            [ ] Enabel reduce size for MiniGUI (Вырезаем несколько ненужных модулей)
        -*- minigui-res-be
        <*> mg-samples

Некоторым примерам программ MiniGUI необходимо скомпилировать основную библиотеку MiniGUI в многопроцессный режим, поэтому требуется следующая конфигурация: Параметр:

Язык кода:javascript
копировать
Gui --->
    Minigui --->
        <*> libminigui-gpl --->
            Preferred Minigui Run Mode (ths) ---> proc

Несколько различий иллюстрируем:

  1. Текущая версия даMiniGUI3.2, интегрированная в Tina, 64 Бит И 32 Он может нормально работать на всех машинах.
  2. Если вы не используете сенсорный экран,Требуется настройка мыши.,Чтобы курсор мыши нормально отображался,Следующий Makefile необходимо изменить:
Язык кода:javascript
копировать
tina/package/minigui/libminigui-gpl/Makefile

Измените –enable-cursor=no на yes, чтобы использовать мышь.

Параметры конфигурации MiniGUI платформы V853

Язык кода:javascript
копировать
source build/envsetup.sh
Обед выберите v853_perf1-tina
make menuconfig
Язык кода:javascript
копировать
CONFIG_PACKAGE_eyesee-minigui:
eyesee-minigui is a GUILib for eyesee project.
Symbol: PACKAGE_eyesee-minigui [=y]
Type : tristate
Prompt: eyesee-minigui............................. eyesee-minigui for Tina Linux

Путь к коду: external/minigui/

2.3 Использование MiniGUI.

После успешного программирования прошивки для использования MiniGUI на небольшом компьютере необходимо выполнить следующие шаги:

  1. да сенсорный экран используется,Требуется калибровка сенсорного экрана.
  2. Файл ConfigurationMiniGUI.cfg.
2.3.1 Калибровка сенсорного экрана.

Емкостный экран не нуждается в калибровке. Если касание емкостного экрана является неточным, необходимо удалить файл /etc/pointercal.

Для резистивных экранов сначала необходимо убедиться, что драйвер сенсорного экрана работает правильно и создается сенсорный узел, например /dev/input/event1, который можно выполнить Выполните следующую команду, а затем коснитесь экрана, чтобы проверить, печатает ли последовательный порт.

Язык кода:javascript
копировать
cat /dev/input/event

Установите следующие переменные на маленьком компьютере:

Язык кода:javascript
копировать
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb
// TSLIB_TSDEVICE Конфигурация на основе узла устройства, созданного сенсорным экраном.
export TSLIB_TSDEVICE=/dev/input/event
ts_calibrate

Обратите внимание, что TSLIB_TSDEVICE должен быть сгенерированным сенсорным узлом. Следуйте инструкциям на экране и щелкните, чтобы завершить калибровку. Калибровка завершена.

После создания файла /etc/pointerca сохраните этот файл калибровки, чтобы не требовалось калибровать каждый продукт.

2.3.2 Конфигурация MiniGUI.cfg

Файл MiniGUI/usr/local/etc/MiniGUI.cfg:

Язык кода:javascript
копировать
vim usr/local/etc/MiniGUI.cfg

Настройте механизмы ial и gal MiniGUI. Файлы конфигурации используются следующим образом:

Язык кода:javascript
копировать
[system]
// GAL engine and default options
gal_engine=fbcon
// defaultmode устанавливает размер дисплея
defaultmode=800x480-32bpp

[fbcon]
// defaultmode устанавливает размер дисплея
defaultmode=800x480-32bpp

[sunxifb]
defaultmode=800x480-32bpp
// Flipbuffer=1 заменяет исходный экспорт. MG_DOUBLEBUFFER=1
flipbuffer=1
// cacheflag=1 позволяет кэшу fb быстрее копировать буфер. В R328/R329 fb не имеет функции кэширования, и его необходимо установить в 0.
cacheflag=1
// Rotateда управляет углом поворота. Действует после включения вращения G2D. Когда угол поворота равен 0 и 180 градусам, режим по умолчанию менять не нужно.
// Когда угол поворота составляет 90 и 270 градусов, режим systemèsunxifb по умолчанию должен быть изменен на 480x800-32bpp.
rotate=0

При использовании сенсорного экрана обратите внимание, что mdev необходимо настроить как сгенерированный сенсорный узел. Конфигурация механизма ввода следующая:

Язык кода:javascript
копировать
// IAL engine
ial_engine=tslib
mdev=/dev/input/event1
mtype=none

С помощью мыши механизм ввода настраивается следующим образом:

Язык кода:javascript
копировать
// IAL engine
ial_engine=console
mdev=/dev/input/mouse0
mtype=IMPS

2.4 Оптимизация MiniGUI.

2.4.1 Double Buffer

Основная цель двойной буферизации — предотвратить разрывы и мерцания экрана.

  1. Измените ядро, чтобы включить двойные буферы.

Измените файл tina/lichee/linux-3.4/drivers/video/sunxi/disp2/disp/dev_disp.c.

Примечание. Путь к коду платформы V853: lichee/linux-4.9/drivers/video/fbdev/sunxi/disp2/disp/dev_disp.c.

Язык кода:javascript
копировать
//fb0, обратите внимание, что назначение 3 Или Когда их будет больше, движок sunxifb переключится на циклический буфер, что может увеличить частоту кадров при быстром скольжении.
init_para->buffer_num[0] = 2;
  1. Импортируйте переменные среды перед выполнением программы MiniGUI.
Язык кода:javascript
копировать
export MG_DOUBLEBUFFER=1

Обратите внимание, что эту переменную среды необходимо импортировать только при использовании механизма fbcon. Механизм sunxifb указывается в поле флипбуфера.

После выполнения шагов 1 и 2 MiniGUI будет использовать внутреннюю двойную буферизацию, чтобы решить проблему мерцания при переключении интерфейсов.

  1. Также предлагает функцию,Вы можете использовать уровень приложения, чтобы контролировать, следует ли использовать двойные буферы.,Например, включите двойную буферизацию перед открытием интерфейса.,Прекратите использовать двойную буферизацию после открытия интерфейса.

Фреймбуфер не имеет кеша при запуске. При запуске программы minigui, если выполняется экспорт. MG_DOUBLEBUFFER=1 или флипбуфер=1 и кэш-флаг=1, кадровый буфер переключится на диапазон Кэш, по умолчанию кеш будет сбрасываться при смене страниц.

Таблица 2-3: DoubleBufferEnableфункцияиллюстрировать

функция

иллюстрировать

DoubleBufferEnable(FALSE)

Фреймбуфер будет переключен на буфер без кеша, поэтому очищать кеш не нужно.

DoubleBufferEnable(TRUE)

Фреймбуфер будет переключен на буфер с кешем. По умолчанию кеш будет очищаться при смене страниц.

DoubleBufferEnable необходимо выполнить перед экспортом MG_DOUBLEBUFFER=1 или флипбуфер=1 Его можно вызвать только после того, как DoubleBufferEnable вернет 0, что означает, что вызов успешен. Если он возвращает -1, это означает, что вызов не выполнен. Если кэш не удается закрыть, это также может быть связано с сбоем фреймбуфера mmap. Уровень приложения должен снова вызвать интерфейс, в противном случае будет отображено исключение. Нормально или неправильно.

2.4.2 Прочее
  1. Чтобы изменить скин клавиатуры, обратитесь к документу «Изменение скина клавиатуры MiniGUI».
  2. Словарь обновления метода ввода см. в документе «Словарь обновления метода ввода MiniGUI».
  3. Для поворота текста вы можете обратиться к документу «Создание библиотеки шрифтов вращения MiniGUI TTF и вертикальное отображение текста».
  4. Чтобы перенести MiniGUI в Ubuntu, обратитесь к документу «64-битное портирование Minigui 3.2 в Ubuntu».
  5. Информацию о небольших видеоокнах см. в документе «Воспроизведение видео в маленьком окне minigui_per_view».

3 QT

3.1 Конфигурация QT5

В настоящее время версия QT5.10.1 перенесена в Tina. Для настройки Qt см. следующую иллюстрацию:

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Global build settings
    Binary stripping method (strip) ---> strip
Gui --->
    Qt --->
        -*- qt5-core
        <*> qt5-examples

Это урезает информацию о символах табуляции исходной библиотеки, чтобы уменьшить ее размер. Некоторым библиотекам Qt необходимо использовать strtab с информацией заголовка библиотеки. Это таблица символов, поэтому выберите в качестве легкого разреза полосу, оставив в качестве таблицы символов strtab. Выбор по умолчанию — sstrip.

Чтобы ускорить компиляцию, предоставляются пакеты QT, предварительно скомпилированные с помощью различных цепочек инструментов компиляции:

Язык кода:javascript
копировать
tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_glibc_32bit.tar.gz
tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_glibc_64bit.tar.gz
tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_musl_32bit.tar.gz
tina/dl/qt-everywhere-opensource-src-5.12.9-prebuilt_musl_64bit.tar.gz
tina/dl/qt-everywhere-opensource-src-5.12.9.tar.xz

Если есть проблемы с компиляцией исходного кода, проверьте, выбрана ли конфигурация alsa-lib.

делая menuconfigВыбиратьQt–> qt5 use предварительно созданный, чтобы определить, какой метод компиляции использовать.

Язык кода:javascript
копировать
make menuconfig
Libraries --->
    -*- alsa-lib
Gui --->
    Qt --->
        [*] qt5 use prebuilt

Значение qt5 use prebuilt будет использоваться в файле tina/package/qt/qt5/Makefile.

Язык кода:javascript
копировать
ifeq ($(CONFIG_QT5_USE_PREBUILT),y)
ifeq ($(CONFIG_USE_GLIBC),y)
ifeq ($(TARGET_ARCH),aarch64)
    PKG_MD5SUM:=b96ae8d2d55983911b7bf46896d516bc
    PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_glibc_64bit.tar.gz

    PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)-
    prebuilt_glibc_64bit
else
    PKG_MD5SUM:=6fc40f289dd51ad2bf2403ad2da85bf
    PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_glibc_32bit.tar.gz
    PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)-
    prebuilt_glibc_32bit
endif
else ifeq ($(CONFIG_USE_MUSL),y)
    ifeq ($(TARGET_ARCH),aarch64)
    PKG_MD5SUM:=b7859b3fc75a28f10047cc63f8bb
    PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_musl_64bit.tar.gz
    PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)-
    prebuilt_musl_64bit
else
    PKG_MD5SUM:=9d1e2d3b5673976b3277142f047d2c
    PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION)-prebuilt_musl_32bit.tar.gz
    PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)-
    prebuilt_musl_32bit
endif
endif
else
    PKG_MD5SUM:=f177284b4d3d572aa46a34ac8f5a7f
    PKG_SOURCE:=qt-everywhere-opensource-src-$(PKG_VERSION).tar.xz
    PKG_BUILD_DIR=$(COMPILE_DIR)/qt-everywhere-opensource-src-$(PKG_VERSION)
endif

3.2 Выбор платформы QT5

  1. eglfs будет использовать графический процессор для рендеринга пользовательского интерфейса при рисовании. Если на платформе есть графический процессор, попробуйте использовать eglfs.
  2. libqlinuxfb,Стандартная платформа отображения Linux,Узел /dev/fb0 будет открыт для рисования и отображения.

Параметры плагина платформы настраиваются в package/qt/qt5/files/qt-env.sh. Этот файл, как показано ниже, по умолчанию имеет значение plat- formdaeglfs, в которых эффект переменной окружения MALI_NOCLEAR не очищает экран при вызове eglInitializeфункции, В противном случае после отображения логотипа запуска экран в течение некоторого времени будет черным, что приведет к ухудшению пользовательского опыта.

Язык кода:javascript
копировать
#!/bin/sh

export QT_QPA_PLATFORM=eglfs:size=800x
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt5/plugins
export QT_QPA_FONTDIR=/usr/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_GENERIC_PLUGINS=evdevmouse:/dev/input/event
export QT_QPA_GENERIC_PLUGINS=evdevkeyboard:/dev/input/event
export MALI_NOCLEAR=

Плагины платформы обычно создаются на стороне небольшого компьютера:

Язык кода:javascript
копировать
/usr/lib/qt5/plugins/platforms/libqeglfs.so

Динамическая библиотека плагина платформы linuxfb — libqlinuxfb.so.

Если вы хотите перейти на linuxfb, вам необходимо изменить содержимое файла tina/package/qt/qt5/files/qt-env.sh и сделать Menuconfig выбирает qt5-drivers-linuxfb, как показано ниже:

Язык кода:javascript
копировать
Gui --->
    Qt --->
        -*- qt5-core
        <*> qt5-drivers-linuxfb
        <*> qt5-examples

linuxfb можно настроить с помощью следующих переменных среды:

Язык кода:javascript
копировать
#!/bin/sh

export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480:mmSize=800x480:offset=0x0:tty=/dev/tty1
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt5/plugins
export QT_QPA_FONTDIR=/usr/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_GENERIC_PLUGINS=evdevmouse:/dev/input/event1
export QT_QPA_GENERIC_PLUGINS=evdevkeyboard:/dev/input/event2
Язык кода:javascript
копировать
fb=/dev/fbN //Указываем устройство кадрового буфера;
size=<width>x<height> //Указываем размер экрана в пикселях;
mmsize=<width>x<height> //Физическая ширина и высота;
offset=<width>x<height> //смещение пикселя в левом верхнем углу экрана
nographicsmodeswitch- //Не переводить виртуальный терминал в графический режим;
tty=/dev/ttyN //Переопределить виртуальную консоль, используется только в том случае, если nographicsmodeswitch не установлен;

eglfs можно настроить с помощью следующих переменных среды:

Язык кода:javascript
копировать
export QT_QPA_EGLFS_WIDTH=800 // Содержит ширину экрана в пикселях
export QT_QPA_EGLFS_HEIGHT=480 // Содержит высоту экрана в пикселях
export QT_QPA_EGLFS_FB=/dev/fb0 //Перезаписываем устройство кадрового буфера, по умолчанию да/dev/fb0
export QT_QPA_EGLFS_DEPTH=32 //Глубина цвета наложенного экрана, значение по умолчанию: 32

3.3 Конфигурация сенсорного экрана мыши QT5

Чтобы использовать мышь в Qt, вам нужно запустить udev, пометить устройство мыши как устройство ввода, а затем использовать libinput Qt для обработки ввода. событие, чтобы иметь возможность распознавать мышь. Установите для udev автозапуск по умолчанию.

Экран является сенсорным, поэтому вам нужно выбрать сенсорный модуль Qt qt5-drivers-touchscreen в make менюconfig, например Как показано ниже:

Язык кода:javascript
копировать
Gui --->
    Qt --->
        -*- qt5-core
        <*> qt5-drivers-touchscreen
        <*> qt5-examples

Драйвер сенсорного экрана для небольших компьютеров:

Язык кода:javascript
копировать
/usr/lib/qt5/plugins/generic/libqtslibplugin.so

Если касание не имеет эффекта, выполните следующие переменные среды:

Язык кода:javascript
копировать
export QT_QPA_GENERIC_PLUGINS=tslib

3.4 Работа примера QT5

После успешного программирования прошивки используйте QT на маленьком компьютере. Если вы используете резистивный сенсорный экран, вам необходимо откалибровать сенсорный экран. См. раздел 2.3.1 данного документа.

Пример применения QT на маленьком компьютере выглядит следующим образом:

Язык кода:javascript
копировать
usr/share/qt5/examples /Это тестовое приложение, поставляемое с даQT/
Язык кода:javascript
копировать
make menuconfig
Gui --->
    Qt --->
        <*> qt-easing.
        <*> qt-textures
        <*> qt-washing-machine

//Это три недавно добавленных приложения QT. Если при запуске этого приложения возникнут проблемы, обратитесь к документу package/qt/qt-washing-machine/src/doc.

Чтобы запустить приложение qt, вам необходимо указать платформу подключаемого модуля. В настоящее время QT поддерживает следующие платформы подключаемых модулей: eglfs или linuxfb. Рабочий пример выглядит следующим образом. Показано:

Язык кода:javascript
копировать
./application -platform eglfs
./application -platform linuxfb

Или сначала выполните следующую команду, импортируйте переменные среды QT, а затем запустите программу.

Язык кода:javascript
копировать
./etc/qt-env.sh

3.5 Сбор проблем QT5

3.5.1 strip

Приложения, работающие под управлением QT, будут иметь следующие проблемы, и библиотеку libqeglfs.so необходимо вернуть обратно в /usr/lib/qt5/plugins/platforms. под дорожкой. Если эта проблема возникает в нескольких библиотеках подключаемых платформ, это может быть связано с тем, что скомпилированные и сгенерированные библиотеки импортированы в систему Tina. Обрезка строки, чтобы сделать ее меньше. Когда Qt загружается динамически, ему необходимо найти символ табуляции strtab в информации заголовка библиотеки, поэтому Выберите режим легкой обрезки -strip в make менюconfig.

3.5.2 eglfs

Если возникает следующая ошибка и не удается применить собственное окно, возможно, библиотека libqeglfs-mali-integration.so отсутствует. Вам необходимо загрузить ее с помощью adb по пути /usr/lib/qt5/plugins/egldeviceintegrations. маленький компьютер.

3.5.3 runtime

Возникает следующая ошибка при передаче переменных среды:

Язык кода:javascript
копировать
export QT_QPA_EGLFS_INTEGRATION=none
export XDG_RUNTIME_DIR=/dev/shm
3.5.4 Сенсором пользоваться нельзя.

Это может произойти из-за следующих шагов:

  1. Сенсорный экран не откалиброван.

Подробную информацию о калибровке см. в разделе «2.3.1 Калибровка сенсорного экрана»/etc/ts_activate.

  1. В qt нет узла для настройки сенсорного экрана.

Ссылка《3.2 Выбор платформы QT5》。

  1. Если это все еще не работает, выполните его самостоятельно.
Язык кода:javascript
копировать
export QT_QPA_GENERIC_PLUGINS=tslib

4 EFL

4.1 Описание EFL

Enlightenment Foundation Libraries (EFL) с поддержкой Просвещения, их также можно использовать автономно или Используйте другие библиотеки для предоставления полезных функций и создания мощных приложений.

Основная библиотека EFL более эффективна с точки зрения скорости и размера, чем ее аналоги, такие как GTK+ и Qt, и требует меньше памяти. количество.

EFL в настоящее время переезжает в Тайн. Основная библиотека версии 1.20.6 и ее компоненты перечислены ниже для иллюстрации пакетов, связанных с EFL.

Таблица 4-1: EFLСвязанные пакетыиллюстрировать

имя пакета

иллюстрировать

efl

Функция EFL Библиотека функций

ephoto

Приложение для фотоальбомов, зависящее от EFL

terminology

Эмулятор терминала, основанный на EFL

Ниже скриншот приложения:

4.2 Конфигурация EFL

EFL может использовать Framebuffer или Wayland для отображения изображений. Если вы используете Wayland, вам необходимо следовать разделу 8 этого документа. В этом разделе настраиваются Wayland. В системе Tina Framebuffer настроен по умолчанию. Выполните следующую конфигурацию команды ЭФЛ:

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Gui --->
    EFL --->
        -*- efl
        <*> ephoto
        <*> terminology

efl — это основная библиотека, а ephoto — приложение для фотоальбомов. Это приложение может выбирать изображения на доске для просмотра и слайд-шоу. terminology — это эмулятор терминала, аналогичный терминалу в Ubuntu. Войдите в интерфейс конфигурации efl для настройки. Функции, поддерживаемые efl. Как показано ниже:

В основном сосредоточьтесь на следующих конфигурациях:

Таблица 4-2: EFLКонфигурацияиллюстрировать

Конфигурация

иллюстрировать

Enable raw Framebuffer access

Использовать фреймбуфер для отображения интерфейса efl

Enabel wayland display server

Используйте Wayland для отображения интерфейса efl

Enabel sunxi-mali opengl es support

используя OpenGL

Enable bidirectional text support

Поддерживать ли двунаправленный текст, отображать текст слева направо или справа налево

Enable tslib for touchscreen events

Поддерживать ли сенсорный ввод

если Использовать фреймбуфер для отображения интерфейса efl, больше ничего делать не нужно, потому что в Тине он включен по умолчанию кадровый буфер, если вы используете Wayland, вам необходимо обратиться к главе 1 этого документа. 8 Раздел Конфигурация — Wayland。

4.3 Работа EFL

Если после успешного программирования прошивки вы используете Wayland, вам необходимо убедиться, что Weston работает, и использовать EFL на небольшой машине. Выполните следующую команду для запуска тестовой программы:

Язык кода:javascript
копировать
elementary_test

элементарный_тест — официальный апплет, содержащий примеры использования различных элементов управления в efl. То же самое касается и двух других тестовых программ. Выполните следующим образом:

Язык кода:javascript
копировать
ephoto
Язык кода:javascript
копировать
terminology

Вы также можете выполнить элементарную_конфигурацию, чтобы перейти к Конфигурацияelf.,Режимы, которые можно отобразить с помощью интерфейса Конфигурация,Шрифт, размер элемента управления и т. д. ждать.

Язык кода:javascript
копировать
elementary_config

Вы также можете вручную указать механизм рендеринга, например:

Язык кода:javascript
копировать
ECORE_EVAS_ENGINE=wayland_egl elementary_test
//или
ELM_ACCEL=gl elementary_test
//или
ELM_DISPLAY=wl elementary_test

Если вы хотите просмотреть отладочную информацию efl, вы можете добавить: перед запуском программы:

Язык кода:javascript
копировать
EINA_LOG_LEVEL=4 elementary_test

Если вы используете Wayland для отображения интерфейса efl и хотите протестировать OpenGL, выполните:

Язык кода:javascript
копировать
ELM_ACCEL=gl elementary_test

Затем нажмите GLView Gears, GLView Many Gears, GLViewSimple, чтобы просмотреть результаты, и выполните элементы. Во время tary_test интерфейс может быть темным. Переместите интерфейс, прокрутите интерфейс или разверните интерфейс, чтобы отобразить его. Если элементарный_тест не отвечает, вы можете завершить процесс и повторить попытку. Используйте команду kill -9 PID для завершения. пучок.

5 GTK+

5.1 Описание GTK+

GTK+ — это библиотека для создания графических интерфейсов, которая может работать во многих UNIX-подобных системах, Windows и OSX. ГТК+ Выпущено под лицензией GNU LGPL, которая является относительно либеральной для программы. GTK+ имеет интерфейс на основе C для Гибкая архитектура для слона, имеет версии для многих других языков, включая C++, Objective-C, Guile/Scheme, Perl, Python, TOM, Ada95, Free Pascal и Eiffel. GTK+ зависит от следующих библиотек:

  1. GLibда Многоцелевая библиотека.,Не только для графических интерфейсов。GLibПредоставляет полезные типы данных、Макрос、преобразование типов,струнные инструменты,файловые инструменты,Абстракция основного цикла и т. д. ожидание.
  2. GObjectда предоставляет систему типов.、Коллекция базовых типов, включающая метатип.、Библиотека систем сигнализации.
  3. GIOда включаемый файл、оборудование、звук、Входные и выходные потоки、Сетевое программирование и связь DBus для современного и простого в использовании интерфейса программирования приложений VFS.
  4. cairo Cairoда Комплекс поддержкиоборудование Выход2Dграфическая библиотека。
  5. Pango Pangoda — это международная библиотека макетов текста. Он окружает PangoLayout, который представляет собой абзац тела. ob- проект. Pango предоставляет другие движки GtkTextView, GtkLabel и GtkEntry для отображения текста.
  6. АТКда Дружественный набор инструментов. Он предоставляет набор интерфейсов, которые позволяют взаимодействовать между технологиями и графическим пользовательским интерфейсом. Например, программа чтения с экрана использует ATK для обнаружения текста в интерфейсе и чтения его для слепых пользователей. Компоненты GTK+ созданы для поддержки платформы ATK.
  7. GdkPixbufда позволяет создавать GdkPixbuf («пиксельный буфер») из данных изображения или файлов изображений. изображения.
  8. ГДКда разрешение GTK+ поддерживает уровень абстракции для сложных графических систем. GDK поддерживает X11, Wayland, Windows иOS. Инструменты графической системы для X.
  9. Компоненты GTK+даGTK+ включены в саму библиотеку,Если быть точным, части даGUI,Например GtkButtonилиGtk-TextView.

БолееGTKПрограммирование приложений может относиться к:Пример

Gtk+ (GIMP Tool Kit, GIMP Tool Kit) — это графическая библиотека для создания графических пользовательских интерфейсов. Ниже приведен снимок экрана GIMP в GNU/Linux:

В систему Tina пересажена библиотека GTK+3 и ее компоненты, соответствующие пакетам GTK и зависимостям:

gtk±3.22.10.tar.xz: соответствующий исходный код Gtk+3.

Pkgconf, gettext-full, atk, glib2, libcairo, pango, gdk-pixbuf, libepoxy, libxkb-common, libpixman, libinput, wayland, wayland-protocols, udev, libdrm, sunxi-mali: Openwrt system Gtk+3 имя зависимости пакет соответствующий Makefile находится в package/libs/libgtk3/.

5.2 Конфигурация GTK+

GTK основан только на проверке системной платформы R18, другие платформы не проверяются. Конфигурация GTK по умолчанию становиться порт Wayland, теория; GTK может работать на всех платформах, поддерживающих Wayland R40, используя Wayland+FBDEV в качестве дисплея; С другой стороны, R18 использует Wayland+DRM.

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig

Если взять в качестве примера платформу R18, то основными элементами являются:

Язык кода:javascript
копировать
Gui --->
    Libs --->
        -*- libcairo --->
            [*] Enable cairo postscript support
            [*] Enable cairo pdf support
            [*] Enable cairo png support
            [ ] Enable script support
            [*] Enable cairo svg support
            [ ] Enable cairo tee support
            [ ] Enable cairo xml support
    Gtk --->
        <*> libgtk3 --->
            [*] Broadway GDK backend
            [*] Wayland GDK backend
            [*] Install libgtk3 demo program

Потому что Gtk+3 зависит от Wayland,Wayland использует синтезатор Weston,Конфигурациякогда это необходимо ВыбиратьWestonи Wayland, вам необходимо следовать инструкциям в этом документе. 8 Раздел Конфигурация — Wayland。

5.3 GTK+ работает

После успешного программирования прошивки, если вы используете Wayland, вам необходимо убедиться, что Weston запущен, а затем запустить его на небольшом компьютерном терминале:

Язык кода:javascript
копировать
/usr/bin/gdk-pixbuf-query-loaders --update-cache
gdk-pixbuf-query-loaders > /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache

Затем запустите gtk3-demo:

Язык кода:javascript
копировать
gtk3-demo

5.4 Пример GTK+

Язык кода:javascript
копировать
#include <gtk/gtk.h>

int main( int argc, char *argv[] ){
    GtkWidget *window;
    gtk_init (&argc, &argv);
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show(window);
    gtk_main ();
    return(0);
}

6 WebKitGtk

6.1 Описание WebkitGtk.

В систему Tina пересажена библиотека WebKitGtk и ее компоненты, соответствующие пакету WebKitGtk и зависимостям, иллюстрировать ниже:

webkitgtk-2.18.6.tar.xz, Midori_0.5.11_all_.tar.bz2, package/libs/webkitgtk, package/utils/midori: соответствующий исходный код браузера WebKitGtk и Midori и Makefile.

ruby/host、flex/host、bison/host、gperf/host、enchant、harfbuzz、icu、libjpeg、libgtk3、libsecret、libsoup、libxml2、libxslt、libsqlite3、libegl、libgles、libwebp libgles、lcms2、libtasn1、gstreamer1、gst1-libav , gst1-plugins-bas, gst1-plugins-good, gst1-plugins-ugly, gst1-plugins-bad: Система Openwrt WebkitGtk зависит от имени пакетасказать。

Ниже приведен скриншот WebKitGtk:

6.2 Конфигурация WebKitGtk

WebKitGtk проверен только на основе системной платформы R18, другие платформы еще не проверены. Конфигурация WebKitGtk по умолчанию — это путь. сухопутный порт, R18 использует Wayland+DRM.

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Gui --->
    Gtk --->
        <*> webkitgtk
        <*> midori

Потому что WebKitGtk зависит от Gtk+3иWayland,Wayland использует синтезатор Weston,Конфигурациякогда это необходимо ВыбиратьGtk+3、WestonиWayland, вам необходимо следовать инструкциям в этом документе. 5 и 8 Подраздел Конфигурация хорошая Gtk+3иWayland.

6.3 Запуск WebKitGtk

После успешного программирования прошивки, если вы используете Wayland, вам необходимо убедиться, что Weston запущен, а затем запустить его на небольшом компьютерном терминале:

Язык кода:javascript
копировать
/usr/bin/gdk-pixbuf-query-loaders --update-cache
gdk-pixbuf-query-loaders > /usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache

Затем запустите Midori или минибраузер:

Язык кода:javascript
копировать
midori

или:

Язык кода:javascript
копировать
minibrowser

6.4 Сбор проблем WebKitGtk

Сообщается об ошибке:

Язык кода:javascript
копировать
error: Package `gee-0.8' not found in specified Vala API directories or GObject-Introspection GIR directories

Причина в том, что инструмент Vala установлен в среде хоста, но необходим инструмент, скомпилированный в tina. Просто удалите инструмент Vala с хоста.

7 DirectFB

7.1 Инструкции DirectFB

DirectFB (Direct Frame Buffer) — это набор графических API, реализованных поверх уровня абстракции кадрового буфера Linux (fbdev).

  • Утилита для максимального аппаратного ускорения.
  • Поддерживает расширенные графические операции, такие как несколько режимов альфа-смешивания.
  • Никаких модификаций ядра. Никаких зависимостей от библиотек, кроме libc.
  • Соответствует требованиям спецификаций MHP.

На данный момент в Тине графический процессор не подключен.

В настоящее время основная библиотека DirectFB и ее демо-версия перенесены в Tina. В следующей таблице перечислены пакеты, связанные с DirectFB:

Таблица 7-1: DirectFBСвязанные пакетыиллюстрировать

имя пакета

иллюстрировать

directfb

Основная библиотека DirectFB

directfb-examples

directfb demo

7.2 Конфигурация DirectFB

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Gui --->
    Directfb --->
        -*- directfb
        <*> directfb-examples

7.3 Работа DirectFB

На маленьком компьютере вы можете выполнить некоторые тестовые примеры, начинающиеся с df_, например df_andi, df_dok:

df_andi

8 Wayland

8.1 Описание Вейланда.

Wayland — это набор протоколов связи между сервером отображения (композитором Wayland) и клиентом, а Weston — эталонная реализация компоновщика Wayland, предназначенная для замены графической системы X в Linux.

В настоящее время основная библиотека Wayland и ее компоненты перенесены в Tina. В следующей таблице перечислены пакеты, связанные с Wayland:

![Таблица 8-1: WaylandСвязанные пакетыиллюстрировать]

имя пакета

эффект

glmark2

Используйте Wayland в качестве программы тестирования графического процессора для запуска серверной части или используйте FBDEV для отображения.

wayland

Инструменты на стороне хоста, необходимые для компиляции Weston

wayland-protocols

Протокол Wayland, эквивалент плагина

weston

основная библиотека

8.2 Конфигурация Вейланда.

8.2.1 menuconfig.

В настоящее время Wayland может работать на R18 и R40. Другие платформы еще не тестировались. На R40 можно использовать только FBDEV. В качестве работающего бэкэнда на R18 вы можете использовать ДРМ и ФБДЕВ. Чтобы продолжить, выполните следующую команду:

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Gui --->
    Wayland --->
        < > glmark2
            [ ] Enabel fbdev support
            [*] Enabel wayland support
        -*- wayland
        -*- wayland-protocols
        <*> weston --->
            [ ] Enabel dbus support
            [ ] Enabel weston-launch linux pam support
            [*] Enabel opengl es support
            [ ] Enabel fbdev compositor support
            [*] Enabel drm compositor support
            [ ] Enabel lcms supports support
            [ ] Enabel junit xml support
            [ ] Enabel demo clients install

Как показано ниже:

glmark2 — это программа эталонного тестирования, использующая графический процессор. Ее можно использовать при использовании DRM в качестве бэкэнда Wayland на R18. Кроме того, вы также можете использовать FBDEV для отображения и тестирования производительности графического процессора. Wayland, Wayland-протоколы Используется при компиляции Weston. Войдите в интерфейс Конфигурация Weston, чтобы использовать функции, поддерживаемые Конфигурацияweston. следующее Как показано на рисунке:

В основном сосредоточьтесь на следующих конфигурациях:

Таблица 8-2: WaylandКонфигурацияиллюстрировать

Параметры

иллюстрировать

Enabel opengl es support

Может быть выбран только при использовании DRM в качестве серверной части Weston, поддерживает ускорение графического процессора OpenGL.

Enabel fbdev compositor support

Использовать фреймбуфер в качестве механизма отображения

Enabel drm compositor support

Используйте DRM в качестве механизма отображения

Enabel demo clients install

Скомпилируйте тестовую демонстрацию Wayland

Если вы используете FBDEV, вам нужно выбрать kmod-mali-utgard-km и kmod-sunxi-disp:

Язык кода:javascript
копировать
Kernel modules --->
    Video Support --->
        <*> kmod-mali-utgard-km
        <*> kmod-sunxi-disp
        < > kmod-sunxi-drm

Если вы используете DRM и ускорение графического процессора, вам нужно выбрать kmod-mali-utgard-km и kmod-sunxi-drm:

Язык кода:javascript
копировать
Kernel modules --->
    Video Support --->
        <*> kmod-mali-utgard-km
        < > kmod-sunxi-disp
        <*> kmod-sunxi-drm

выбиратьDRMиGPUускорятьсяиз Как показано ниже:

Обратите внимание, что FBDEV и DRM являются взаимоисключающими и не могут быть выбраны одновременно.

Если вам нужно, чтобы Weston запускался автоматически при загрузке, вам необходимо его изменить. Сделать - в каталоге tina/package/wayland/weston file,Пучок(CP) ./weston (1) Просто удалите комментарии в /etc/init.d.

Если выбрано DRM механизм отображения, можно также поставить DRM Тестовая демонстрация Давать Выбирать,Параметрыследующее:

Язык кода:javascript
копировать
Gui --->
    Libs --->
        libdrm --->
            [*] install libdrm test programs
            [ ] Enable support for vc4's API

westonполагатьсяиз БиблиотекаcairoХОРОШОКонфигурация,вEnable cairo pdf поддержка и Включить cairo png Поддержка должна быть выбрана, иначе во время компиляции будет сообщено об ошибке. Если вы компилируете GTK+, вам нужно выбрать больше, см. Ознакомьтесь с разделом 5.2 этого документа.

Язык кода:javascript
копировать
Gui --->
    Libs --->
        -*- libcairo --->
            [ ] Enable cairo postscript support
            [*] Enable cairo pdf support
            [*] Enable cairo png support
            [ ] Enable script support
            [ ] Enable cairo svg support
            [ ] Enable cairo tee support
            [ ] Enable cairo xml support
8.2.2 kernel_menuconfig
8.2.2.1 FBDEV

Если в менюconfig выбрано использование FBDEV в качестве серверной части и выбран kmod-sunxi-disp, платформа R18 будет Параметры при автоматической настройке, нет необходимости выполнять действия, описанные в этом разделе. На другой платформе еще не реализована автоматическая конфигурация, основная информация приведена ниже. Для документации по использованию FBDEV в качестве серверной части требуется Конфигурация ядра. В ядре другой платформы по умолчанию используется Конфигурация с использованием FBDEV.

Выполните следующую команду на примере R18:

Язык кода:javascript
копировать
make kernel_menuconfig

Выбирать Поддержка консоли кадрового буфера (sunxi), поддержка драйвера DISP (sunxi-disp2), поддержка консоли кадрового буфера, поддержка драйвера преобразования (sunxi):

Язык кода:javascript
копировать
Device Drivers --->
    Graphics support --->
        Frame buffer Devices --->
            <*> Support for frame buffer devices --->
            Video support for sunxi --->
                [*] Framebuffer Console Support(sunxi)
                <*> DISP Driver Support(sunxi-disp2)
        Console display driver support --->
            <*> Framebuffer Console support
    Character devices --->
        <*> Transform Driver Support(sunxi)

Как показано ниже:

8.2.2.2 DRM.

Если менюconfig выбирает да Использовать DRM как серверная часть,Так как в ядре по умолчанию используется FBDEV,Итак, сначала нам нужно отменить исходную Конфигурацию.,Затем выберите Конфигурация с DRM.,Отмените kmod-sunxi-disp в меню Конфигурация.,Выбиратьkmod-sunxi-drm,Платформа R18 автоматически настроит следующие параметры.,Нет необходимости выполнять действия, описанные в этом разделе.,На другой платформе еще не реализована автоматическая конфигурация.。

Выполните следующую команду, взяв в качестве примера R18. На данном этапе только R18 поддерживает DRM:

Язык кода:javascript
копировать
make kernel_menuconfig

Отмените выбор поддержки консоли кадрового буфера (sunxi), поддержки драйвера DISP (sunxi-disp2), поддержки консоли кадрового буфера и поддержки драйвера преобразования (sunxi):

Язык кода:javascript
копировать
Device Drivers --->
    Graphics support --->
        Frame buffer Devices --->
            < > Support for frame buffer devices --->
                Video support for sunxi --->
                    [ ] Framebuffer Console Support(sunxi)
                    < > DISP Driver Support(sunxi-disp2)
        Console display driver support --->
            < > Framebuffer Console support
    Character devices --->
        < > Transform Driver Support(sunxi)

ВыбиратьDRMКонфигурация:

Язык кода:javascript
копировать
Device Drivers --->
    Graphics support --->
        <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
        <*> DRM Support for Allwinnertech SoC A and R Series

Как показано ниже:

После того, как DRM готов, возможно, он еще не был скомпилирован. Прошивку DRM необходимо сначала удалить и очистить. Файлы, скомпилированные предыдущим ядром, иначе могут возникнуть проблемы с компиляцией, выполняйте в каталоге ядра:

Язык кода:javascript
копировать
make clean

8.3 Использование Wayland.

8.3.1 Операция Вестона.

После успешного программирования прошивки для использования Wayland на маленьком компьютере необходимо выполнить следующие команды:

Язык кода:javascript
копировать
chmod 0700 /dev/shm/
export XDG_RUNTIME_DIR=/dev/shm
export XDG_CONFIG_HOME=/etc/xdg
weston --backend=drm-backend.so --tty=1 --idle-time=0 &
//или
weston --backend=fbdev-backend.so --tty=1 --idle-time=0 &

Если папки /dev/shm/ нет, просто создайте ее вручную:

Язык кода:javascript
копировать
mkdir /dev/shm/

Если вам нужно включить отладку, перед запуском weston выполните следующую команду:

Язык кода:javascript
копировать
export MESA_DEBUG=1
export EGL_LOG_LEVEL=debug
export LIBGL_DEBUG=verbose
export WAYLAND_DEBUG=1

Если Wayland Demo скомпилирована, после запуска Weston вы можете запустить Demo в /usr/bin:

wayland-scanner、weston-calibrator、weston-clickdot、weston-cliptest、weston-confine、weston-dnd、weston-eventdemo、weston-flower、weston-fullscreen、weston-image、weston-info、weston-multi-resource、weston-presentation-shm、weston-resizor、weston-scaler、weston-simple-damage、weston-simple-dmabuf-intel、weston-simple-dmabuf-v4l、weston-simple-egl、weston-simple-shm、weston-simple-touch、weston-smoke、weston-stacking、weston-subsurfaces、weston-terminal、weston-transformed。

Программа тестирования производительности графического процессора может выполнять следующие команды при условии, что glmark2 скомпилирован:

Язык кода:javascript
копировать
glmark2-es2-wayland

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

8.3.2 weston.ini.

weston.ini да Wayland Файл конфигурации рабочего стола. Например, если вы хотите удалить фон и строку состояния, вы можете изменить его на значения параметров ниже. Комментировать background-image,background-color Сменить на черный 0xff000000, Измените положение панели на none:

Язык кода:javascript
копировать
vi /etc/xdg/weston.ini
Язык кода:javascript
копировать
[shell]
# background-image=/usr/share/weston/background.png
background-color=0xff000000
panel-position=none

Если вам нужно повернуть экран:

Язык кода:javascript
копировать
# [output]
[output]
# name=LVDS1,экран мипи DSI-1
имя=DSI-1
# режим=1680x1050,Изменить до соответствующего разрешения
Язык кода:javascript
копировать
mode=480*800
# Transform=90, угол поворота
transform=90

Более конкретные параметры,Пожалуйста, обратитесь кweston.ini(5) — справочная страница Arch

8.4 Сбор проблем Wayland

Сообщается об ошибке:

Язык кода:javascript
копировать
no "wayland-egl" found

Причина может быть в том, что да уже был скомпилирован раньше? wayland графическая система, графический процессор Библиотека была скомпилирована так, чтобы не поддерживать wayland Библиотека, в Конфигурации weston обязательно Enabel opengl es support Выберите и выполните mm в каталоге tina/package/libs/gpu-um/. -B перекомпилировать библиотеку графического процессора, если она по-прежнему сообщает «нет». “wayland-egl” найден, вы можете удалить каталог tina/out/ и перекомпилировать.

9 LVGL

9.1 Описание LVGL.

LVGLда — бесплатная графическая библиотека с открытым исходным кодом.,Предоставляет все необходимое для создания встроенного графического интерфейса.,Имеет простые в использовании графические элементы.,Красивые визуальные эффекты и низкое использование памяти.,Принято лицензионное соглашение MIT,Вы можете посетить LittlevGL для получения дополнительной информации.

  • Мощный строительный блок: кнопки、диаграмма、список、ползунок、изображениеждать.
  • Расширенный графический движок: анимация、Сглаживание、непрозрачность、плавная прокрутка、Режим наложения ждать.
  • Поддержка различных входовоборудование:сенсорный экран、мышь、клавиатура、кодер、кнопкаждать.
  • Поддерживает несколько мониторов.
  • Аппаратно независим и работает с любым микроконтроллером и дисплеем.
  • Масштабируемость для работы с небольшим объемом памяти (64 КБ Flash, 16 КБ RAM).
  • Многоязычная поддержка, поддержка обработки UTF-8, CJK, двунаправленная и арабская.
  • Полностью настраиваемые графические элементы с помощью стилей CSS.
  • Мощный макет, вдохновленный CSS: Flexbox и Grid.
  • Операционная система, внешняя память и графический процессор поддерживаются, но не обязательны.
  • Плавный рендеринг также возможен с использованием одного кадрового буфера.
  • Написан на C и совместим с C++.
  • Micropython Binding предоставляет LVGL API в Micropython.
  • Можно разработать на ПК с помощью симулятора.
  • 100+ простых примеров.
  • Онлайн-документация и документация в формате PDF, а также справочник по API.

LVGL в настоящее время преобразован из основных компонентов 8.1.0 и демо-версии, в следующей таблице перечислены библиотеки, связанные с LVGL:

Таблица 9-1: LVGLСвязанные библиотекииллюстрировать

имя пакета

иллюстрировать

lv_demos

официальная демо-версия lvgl

lv_drivers

lvglизчиновникоборудованиеводитель,Интегрированный sunxifb, sunxig2dиsunximem

lv_examples

тестовый пример lvgl,Функция в dalv_demos наконец-то вызвана

lvgl

lvglосновная библиотека

lv_g2d_test

Тестовый пример g2d, в частности тестирование подключенного интерфейса g2d

lv_monitor

Программное обеспечение для стресс-тестирования и мониторинга состояния

sunxifb.mk

Публичные файлы конфигурации,Его необходимо включить при написании Makefile приложения.

Ниже приведен скриншот приложения lv_examples:

Ниже приведен скриншот приложения lv_monitor:

9.2 Конфигурация LVGL.

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Gui --->
    Littlevgl --->
        < > lv_demo
        <*> lv_examples (официальная демо-версия lvgl)
        -*- lvgl-8.1.0 use sunxifb double buffer (Включите двойную буферизацию, чтобы решить проблему разрыва)
        [*] lvgl-8.1.0 use sunxifb cache (включить ФБ cache)
        [ ] lvgl-8.1.0 use sunxifb g2d (Включить аппаратное обеспечение G2D)
        [ ] lvgl-8.1.0 use sunxifb g2d rotate (Включить ротацию оборудования G2D)
        [ ] lvgl-8.1.0 use freetype (автоматически связывается с FreeType)
        <*> lv_g2d_test (тестовый пример g2dинтерфейса)
        <*> lv_monitor (Программное обеспечение для стресс-тестирования и мониторинга данных)
        < > smartva
        < > smartva_ota

9.3 Использование LVGL.

лвгл путь:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8
9.3.1 sunxifb

В sunxifb мы предоставляем следующий набор интерфейсов:

Таблица 9-2: sunxifbСвязанныйинтерфейсиллюстрировать

интерфейс

иллюстрировать

sunxifb_init

Функция main инициализирует механизм отображения. с параметром вращения,Если включено вращение g2d,Просто используйте этот параметр, чтобы указать направление вращения.

sunxifb_exit

Функция относительно проста,Реализовать закрытие кеша,Закрыть g2d,Освободить буфер вращения,закрыть fb0

sunxifb_flush

Функция более важная и отвечает за отрисовку скопировать буфер обратно буфер, и после отрисовки последнего кадра поменять местами frontback буфер. Приложения не вызывают эту функцию

sunxifb_get_sizes

Функция получения разрешения экрана,Таким образом, приложению не нужно жестко запрограммировать разрешение инициализации.

sunxifb_alloc

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

sunxifb_free

Функция используется для освобождения памяти, запрошенной sunxifb_alloc.

Расположение кода следующее:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_drivers/display/sunxifb.c

В sunxifb_init(rotated) значения Rotated — LV_DISP_ROT_NONE, LV_DISP_ROT_90, LV_DISP_ROT_180, LV_DISP_ROT_270.

Наконец, есть назначение disp_drv.rotated=rotated. Если ротация g2d отсутствует, вы также можете указать disp_drv.sw_rotate = 1, чтобы использовать программную ротацию.

9.3.2 sunxig2d

В sunxig2d реализован пакет g2d ioctl,Ни одна из этих функций не требует вызовов приложений.,следующее:

Таблица 9-3: sunxig2dСвязанныйинтерфейсиллюстрировать

интерфейс

иллюстрировать

sunxifb_g2d_init

функция инициализации модуля g2d,Откройте узел /dev/g2d.,Установите g_format. Во время инициализации,На основе включенных макросов,Распечатайте соответствующий журнал

sunxifb_g2d_deinit

Долженфункция Закрыть g2dоборудование

интерфейс

иллюстрировать

sunxifb_g2d_get_limit

Функция получает порог использования g2d.

sunxifb_g2d_blit_to_fb

Долженфункцияиспользуется для копированияfb0изfrontиback Эти два буфера также можно вращать. Повернуть буфер назад buffer

sunxifb_g2d_fill

Функция использует g2d для заполнения цветного прямоугольника.,Цвета могут иметь прозрачность

sunxifb_g2d_blit

Функция используется для копирования изображений,Невозможно смешать изображения

sunxifb_g2d_blend

Функция может смешивать изображения

sunxifb_g2d_scale

Функция используется для масштабирования изображения.

Расположение кода следующее:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_drivers/display/sunxig2d.c

Больше, чем функция g2d,Все они подключены к фреймворку рисования lvgl.,Вы можете использовать функции lv_draw_map и lv_img_set_zoomиlv_canvas_draw_img от lvgl.

В приложении lv_g2d_test есть полные примеры использования.

9.3.3 sunximem.

в Сунксимеме,Реализована инкапсуляция для управления физической памятью.,Ни одна из этих функций не требует вызовов приложений.,следующее:

Таблица 9-4: sunximemСвязанныйинтерфейсиллюстрировать

интерфейс

иллюстрировать

sunxifb_mem_init

Функция будет вызвана в sunxifb_init.,Инициализация интерфейса приложения физической памяти,используемое промежуточное программное обеспечение далибуапи

sunxifb_mem_deinit

Функция передается путем вызова SunxiMemClose.,Освободите запрошенные ресурсы интерфейса

sunxifb_mem_alloc

Функция важнее,Используется во многих местах,Количество байтов, которые необходимо передать приложению и использовать, иллюстрировать

sunxifb_mem_free

Функция используется для освобождения памяти, запрошенной путем вызова sunxifb_mem_alloc.

sunxifb_mem_get_phyaddr

Функция преобразует виртуальный адрес памяти, запрошенный sunxifb_mem_alloc, в физический адрес.,Драйвер g2d принимает только физический адрес буфера или fd.

sunxifb_mem_flush_cache

Эта функция используется для очистки sunxifb_mem_alloc для применения буферного кеша.

Расположение кода следующее:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_drivers/display/sunxigmem.c

Поскольку драйвер g2d может использовать только физическую непрерывную память, при декодировании изображений его необходимо применять через sunxifb_mem_alloc. Пожалуйста, помните.

иллюстрировать:В настоящее время только реализовано bmp 、 png и gif Приложение памяти изображений, jpeg Фотографии пока недоступны.

При использовании lv_canvas_set_buffer входящий буфер нуждается в буфере, примененном даsunxifb_alloc, sunx- Ifb_alloc определит, нужно ли обращаться к физической непрерывной памяти.

иллюстрировать: холст на заказ lv_canvas Еще не подключен g2d Функция масштабирования.

9.3.4 evdev

Коснитесь официального evdev dalvgl, который мы используем.

Расположение кода следующее:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_drivers/indev/evdev.c

в приложении lv_drv_conf.h Средняя модификация EVDEV_NAME Создано для переписки с сенсорным экраном event узел, например lv_examplesиз Конфигурациядокумент:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_examples/src/lv_drv_conf.h

Кроме того, вы также можете использовать команду для создания сенсорного экрана с программным подключением, который будет напрямую использовать сенсорный экран в качестве сенсорного узла для легкой настройки. пытаться. Команда выглядит следующим образом:

Язык кода:javascript
копировать
ln -s /dev/input/eventX /dev/input/touchscreen

Если в disp_drv.rotated указан поворот на 90 или 180 градусов, lvgl будет внутренне вращать координаты касания, не касаясь его. Драйвер внутренне вращает координаты касания.

9.4 Новое приложение LVGL

Рекомендуется использовать lv_g2d_test в качестве шаблона для копирования нового проекта:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_g2d_test

В Makefile,Необходимо включить sunxifb.mk в публичную конфигурацию,При компиляции приложения Пучок Макроспройти дальше。Способследующее:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_g2d_test/Makefile

include ../sunxifb.mk

Кроме того, можно отметить, что имеются следующие Конфигурации.,Эти конфигурации необходимо включать по требованию.,На некоторых чипах да не поддерживает G2D_BLEND и т.п.

Операция поддерживает только простую функцию вращения:

Язык кода:javascript
копировать
ifeq ($(CONFIG_LVGL8_USE_SUNXIFB_G2D),y)
TARGET_CFLAGS+=-DLV_USE_SUNXIFB_G2D_FILL \
                -DLV_USE_SUNXIFB_G2D_BLEND \
                -DLV_USE_SUNXIFB_G2D_BLIT \
                -DLV_USE_SUNXIFB_G2D_SCALE
endif

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

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_g2d_test/src/Makefile
Язык кода:javascript
копировать
include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mk

#Do not compile the example
EXCSRCS += $(shell find -L $(LVGL_DIR)/$(LVGL_DIR_NAME)/examples -name \*.c)
CSRCS := $(filter-out $(EXCSRCS),$(CSRCS))

О файле конфигурации lvgl,Также рекомендуется использовать lv_g2d_test,Можно сравнить с оригинальной неизмененной Конфигурация.,Затем root В соответствии с фактическим переключением сцены соответствующая Конфигурация. Файл конфигурации следующий:

Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lv_g2d_test/src/lv_conf.h
tina/package/gui/littlevgl-8/lv_g2d_test/src/lv_drv_conf.h
Язык кода:javascript
копировать
tina/package/gui/littlevgl-8/lvgl/lv_conf_template.h
tina/package/gui/littlevgl-8/lv_drivers/lv_drv_conf_template.h.h

Наконец, инициализация приложения да,в lv_g2d_test,Существует более понятный процесс вызова.,нужно вниманиеиздаsunx- ifb_init необходимо передать параметр вращения и sunxifb_alloc, чтобы подать заявку на использование памяти.

9.5 LVGL работает.

Мы предоставляем несколько тестовых случаев, команды выполнения следующие:

Язык кода:javascript
копировать
lv_examples 0
Язык кода:javascript
копировать
lv_examples 0, is lv_demo_widgets
lv_examples 1, is lv_demo_music
lv_examples 2, is lv_demo_benchmark
lv_examples 3, is lv_demo_keypad_encoder
lv_examples 4, is lv_demo_stress
Язык кода:javascript
копировать
lv_g2d_test
Язык кода:javascript
копировать
lv_g2d_test 0 5 0 1
one num is rotate, range is 0~3
tow num is gif, range is 0~11, 11 is no show gif
three num is bmp, range is 0~2, 2 is no show bmp
four num is png, range is 0~3, 3 is no show png
Язык кода:javascript
копировать
lv_monitor

во время инициализации,Следующее будет напечатано,Будут различия в зависимости от конфигурации.,Указывает, что что-то открыто:

Язык кода:javascript
копировать
wh=1280x800, vwh=1280x1600, bpp=32, rotated=0
Turn on double buffering.
Turn on 2d hardware acceleration.
Turn on 2d hardware acceleration fill.
Turn on 2d hardware acceleration blit.
Turn on 2d hardware acceleration blend.
Turn on 2d hardware acceleration scale.
Turn on 2d hardware acceleration rotate.

10 Flutter

10.1 Инструкции по флаттеру

Flutter привносит инновации в разработку приложений: всего одна база кода,Готово к постройке, Тестирование и выпуск для мобильных устройств、Web、стол Изысканные приложения для встраиваемых платформ. Особенности Flutter:

  • Быстро: код Flutter компилируется в коде ARM 32, ARM 64, x86 и JavaScript, обеспечивая производительность собственной платформы.
  • Эффективность: используйте горячую перезагрузку (HotReload) для быстрого создания и итерации вашего продукта.,Вы можете увидеть изменения сразу после обновления кода,И ни одно состояние приложения не теряется.
  • Гибкость: вы можете создать каждый пиксель экрана, создавая настраиваемый адаптивный дизайн для элегантного просмотра на любом экране.
  • Мультиплатформенность:Развертывание в несколькихоборудование,Требуется только одна база кода,Поддержка мобильных устройств、веб-страница、столлапшаи Встроенныйоборудование。
  • Опыт разработки: В проекте можно использовать плагины, автоматическое тестирование, инструменты разработчика и любые инструменты, которые можно использовать для создания качественных приложений.
  • Стабильность и надежность: Flutter поддерживается Google и широко используется.,Широкое участие и поддержка со стороны глобального сообщества разработчиков.,Нам доверяют многие всемирно известные бренды.
  • Язык программирования: Flutter мощно управляется Dart, оптимизирован для всех платформ и создан для быстрых приложений.
  • Локальная итерация. Вы можете отлаживать код локально и запускать прототипы на веб- или мобильных платформах перед развертыванием на устройстве.
  • Гибкое расширение: гибкий и легкий движок пользовательского интерфейса Flutter можно легко расширить для любого встроенного устройства в соответствии с вашими потребностями.
  • Быстро развивающаяся экосистема. Благодаря зрелой экосистеме пакетов Flutter вы можете создать новые возможности для многих встроенных устройств.

Флаттер в настоящее время трансплантирован Тине. 2.10.4 и Demo, обратите внимание, что приложения Flutter можно запускать только с помощью цепочки инструментов компиляции glibc. ХОРОШО。Перечислено нижеFlutterСвязанные библиотекииллюстрировать:

Таблица 10-1: FlutterСвязанные библиотекииллюстрировать

имя пакета

иллюстрировать

complex_layout

Приложение для тестирования скользящего списка

gallery flutter

официальное масштабное приложение,Интегрированы различные эффекты управления и общие сценарии применения.

video_player

Приложение для тестирования воспроизведения видео

flutter_eglfs

Предварительная компиляция и загрузка приложений Flutter, использование графического процессора для рендеринга, поддержка вращения

flutter_fbdev

Приложения, которые предварительно компилируют и загружают приложение Flutter, обрабатываются с использованием ЦП, и в настоящее время вращение не поддерживается.

flutter-client

Предварительная компиляция и загрузка приложений Flutter, использование графического процессора для рендеринга, поддержка телефонс воспроизведением видео

libvideo_player_plugin.so

Плагин воспроизведения видео,Пока только в целях тестирования,Видео будет заменено позже.

libflutter_elinux_eglfs.so

Если вам нужен собственный плагин, вам нужно дать ссылку на эту библиотеку.

libflutter_engine.so

flutterосновная библиотека

gen_snapshot flutter

Инструменты, необходимые для компиляции приложения AOT

Ниже приведен скриншот приложения complex_layout:

Ниже приведен скриншот галереи приложений:

10.2 Конфигурация флаттера

Язык кода:javascript
копировать
source build/envsetup.sh
lunch XXX название платформы
make menuconfig
Язык кода:javascript
копировать
Gui --->
    Flutter --->
        flutter-sunxi --->
            --- flutter-sunxi
            -*- flutter use fbdev
            [*] flutter use eglfs
            [ ] flutter use client
            [ ] flutter use elinux so
            [*] flutter demo complex layout
            [*] flutter demo gallery
            [ ] flutter demo video player

10.3 Флаттерный бег

Путь флаттера следующий:

Язык кода:javascript
копировать
tina/package/gui/flutter/flutter-sunxi
tina/dl/flutter-sunxi-1.0.7.tar.gz

когда Конфигурацияначальствоflutterпосле,поставлю flutter_fbdev,complex_layout и т. д. размещаются в каталоге /usr/bin.,libflut- ter_engine.so и т. д. помещаются в каталог /usr/lib и выполняют следующую команду:

Язык кода:javascript
копировать
flutter_eglfs /usr/bin/bundle_complex_layout/
flutter_eglfs /usr/bin/usr/bin/bundle_gallery/
Язык кода:javascript
копировать
flutter_fbdev /usr/bin/bundle_complex_layout/
flutter_fbdev /usr/bin/usr/bin/bundle_gallery/
Язык кода:javascript
копировать
flutter-client -b /usr/bin/bundle_complex_layout/
flutter-client -b /usr/bin/bundle_gallery/

Некоторая информация будет выведена во время инициализации и обнаружения узлов касания, лог следующий:

Язык кода:javascript
копировать
root@TinaLinux:/# flutter_eglfs /usr/bin/bundle_gallery/
flutter: egl version: 1.4 (1.4 build 1.11@5516664)
flutter: egl vendor: Imagination Technologies
flutter: red OK: 8
flutter: green OK: 8
flutter: blue OK: 8
flutter: alpha OK: 8
flutter: found input device <sunxi-keyboard>
flutter: input props: <none>
flutter: found input device <axp806-pek>
flutter: input props: <none>
Язык кода:javascript
копировать
flutter: found input device <gt82x>
flutter: input props: <INPUT_PROP_DIRECT>

Если INPUT_PROP_DIRECT не распознан, необходимо добавить в драйвер сенсорного экрана следующий код:

Язык кода:javascript
копировать
set_bit(INPUT_PROP_DIRECT, ts->input_dev->propbit);

Кроме того, вы также можете использовать команду для создания сенсорного экрана с программным подключением, который будет напрямую использовать сенсорный экран в качестве сенсорного узла для легкой настройки. пытаться. Команда выглядит следующим образом:

Язык кода:javascript
копировать
ln -s /dev/input/eventX /dev/input/touchscreen

Вы также можете просмотреть более подробную информацию и добавить параметры вращения. Команда выглядит следующим образом:

Язык кода:javascript
копировать
root@TinaLinux:/# flutter_eglfs -h
    flutter_eglfs - run flutter apps on your device.

USAGE:
    flutter_eglfs [options] <bundle path>

OPTIONS:
    -f, --fps-print Print frame rates.
    -p, --touch-print Print touch points.
    -r, --rotate-screen Rotate the screen, the values are 0, 90, 180, 270.
    -v, --version Show flutter_eglfs version and exit.
    -h, --help Show this help and exit.

BUNDLE PATH TREE:
    ./app_bundle/data/flutter_assets
    ./app_bundle/data/icudtl.dat
    ./app_bundle/lib/libapp.so

EXAMPLES:
    flutter_eglfs ./app_bundle
    flutter_eglfs -r 90 ./app_bundle
    LD_LIBRARY_PATH=./ flutter_eglfs ./app_bundle
    LD_LIBRARY_PATH can ensure that libflutter_engine.so is found.

OTHER:
    Some applications may require system information.
    export LANG="en_US.UTF-8"

О том, как компилировать флаттер-приложения,Посмотреть иллюстрировать можно в readme.txt.,путьследующее:

Язык кода:javascript
копировать
tina/out/имя проекта/compile_dir/target/flutter-sunxi-1.0.7/readme.txt
boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]