В этот раз будем подключать TFT-LCD дисплей на популярном контроллере ILI9341 к одноплатному компьютеру Banana Pi BPI-M64. В сети Интернет много материала как подключать различные LCD экраны к Raspberry Pi. Но что если у вас нет Raspberry Pi, а хочется подключить недорогой LCD экран? Есть решение, подключить с помощью дерева устройств (Device Tree overlays) Linux. Будем подключать недорогой цветной TFT-LCD экран диагональю 2.4 дюйма по SPI интерфейсу к Banana Pi BPI-M64 под ОС Armbian.
Многие одноплатные компьютеры снабжены HDMI выходом, но подключение полноценного дисплея с поддержкой HDMI входа достаточно дорогое удовольствие для небольшого проекта. В особенности, если необходимо реализовать минимальный функционал взаимодействия с пользователем, терминал распечатки документов, вывод текущего статуса работающего приложения. Для подобных задач можно использовать символьные дисплеи LCD Hitachi HD44780 на интерфейсе I2C, они достаточно дешевы и удобны. Но в тоже время сильно ограничены в функциональности, на эти экраны невозможно вывести консоль Linux и нативный UI приложения, вдобавок площадь LCD экрана нельзя использовать как панель ввода информации. Для решения этих задач прекрасно подойдут LCD экраны на SPI интерфейсе. На LCD экран можно выводить консоль Linux и подсистему Xorg. Таким образом, использование SPI LCD является лучшим вариантом по соотношению функциональности к стоимости.
Оглавление
- Постановка задачи
- Дисплей ILI9341 2.2 inch 2.2″ SPI TFT
- Вариант 1. Схема подключения SPI LCD ILI9341 2.4 inch к Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) с постоянно включенной подсветкой
- Вариант 2. Схема подключения SPI LCD ILI9341 2.4 inch к Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) с включаемой подсветкой контактом GPIO
- Вариант 3. Схема подключения SPI LCD ILI9341 2.4 inch к Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) с драйвером gpio-backlight
- Виртуальное устройство для вывода графики Framebuffer
- Настройка графической подсистемы Xorg и графической оболочки Xfce
- Литература
Постановка задачи
Подключить модуль SPI TFT LCD ILI9341 SKU:MSP2401 диагональю 2.4 дюйма разрешение 240×320 без резистивного слоя, куплен на Aliexpress за 5.39$ + доставка (продавец ZQC Module Store), к Banana Pi BPI-M64 под ОС Armbian. Требуется версия ядра Linux не ниже 5.4.
- Плата Banana Pi BPI-M64 установлена версия Armbian_20.08.2_Bananapim64_bionic_current_5.8.6_minimal.img.xz, основанная на Ubuntu 18.04.5 LTS (Bionic Beaver), ядро Linux 5.8.6. uname: Linux bananapim64 5.8.6-sunxi64 #20.08.2 SMP Fri Sep 4 08:52:31 CEST 2020 aarch64 aarch64 aarch64 GNU/Linux.
Дисплей ILI9341 2.2 inch 2.2″ SPI TFT
Контроллер ILI9341 предназначен для управления TFT панелью. Под контроллер ILI9341 поставляются панели диагональю от 2.2 до 3.2 дюймов, разрешение 240×320, к некоторым LCD добавляют резистивный слой.
Рассмотрим характеристики и распиновку SPI LCD ILI9341 2.4 inch
- 2,4-дюймовый цветной экран, поддержка 65K цветов (16-bit color)
- разрешение 320X240
- интерфейс подключения SPI
- доступен слот для SD-карты
- питание модуля 3.3V~5V
- Напряжение управления логикой 3.3V (TTL)
Контакты подключения LCD
Number | Pin Label | Description |
1 | VCC | 5V/3.3V power input |
2 | GND | Ground |
3 | CS | LCD chip select signal, low level enable |
4 | RESET | LCD reset signal, low level reset |
5 | DC/RS | LCD register / data selection signal,high level: register, low level: data |
6 | SDI(MOSI) | SPI bus write data signal |
7 | SCK | SPI bus clock signal |
8 | LED | Backlight control, high level lighting,if not controlled, connect 3.3V always bright |
9 | SDO(MISO) | SPI bus read data signal, if you do not need to the read function, you can not connect it |
Для управления подсветки используется контакт номер 8 — LED. Максимальное напряжение 3.3V соответствует максимальной яркости от общего питания VCC. Если необходимо задать 50% яркости экрана, то на LED необходимо подать напряжение в 1.65V. Для программного управления яркости подсветки необходимо подключать контакт LED к аналоговому выходу GPIO на одноплатном компьютере. При наличие только цифровых выходов, доступна лишь возможности включить или полностью выключить подсветку экрана.
Исходя из характеристик LCD экрана предъявляются следующие требования к одноплатному компьютеру:
- наличие SPI интерфейса
- напряжение логики на контактах 3.3V (большинство плат)
- потребуется еще два (RESET, DC/RS) свободных контактов GPIO
Вариант 1. Схема подключения SPI LCD ILI9341 2.4 inch к Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) с постоянно включенной подсветкой
SPI интерфейс LCD экрана подключаем к SPI1 на Banana Pi BPI-M64. Контакты CS, RESET, DC/RS можно подключать к любым цифровым выводам.
Таблица контактов подключения:
Номер LCD | Метка LCD | Номер контакта на Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) |
1 | VCC | 1 или 2 (если необходима максимальная яркость, то контакт №2 на 5V) |
2 | GND | 39, или любой другой Ground |
3 | CS | 24 |
4 | RESET | 18 |
5 | DC/RS | 22 |
6 | SDI(MOSI) | 19 |
7 | SCK | 23 |
8 | LED | 1 или любой свободный GPIO на 3.3V (через резистор ~ 56 Ом) |
9 | SDO(MISO) | 21 |
Если контакт LED подключать к цифровому выводу GPIO, то для включения подсветки вручную потребуется подавать логическую «1» — для включения или «0» — для выключения экрана. Подключать контакт LED рекомендуют через резистор номиналом ~ 56 Ом.
SPI интерфейс представлен на 40-контактном разъеме (типа Raspberry Pi 3 GPIO). Для формирования файла DTS необходимо знать название контактов, для этого воспользуемся Wiki-страницей Banana Pi BPI-M64 или Распиновка GPIO для Banana Pi BPI-M64, узнаем название контактов: PD2, PD3, и т.д.
40 PIN GPIO of Banana pi BPI-M64 | |||
GPIO Pin Name | Default Function | Function2:GPIO | Function3 |
CON2-P18 | PD4 | PD4 | |
CON2-P19 | SPI1-MOSI | PD2 | UART4-TX |
CON2-P21 | SPI1-MISO | PD3 | UART4-RX |
CON2-P22 | PC0 | PC0 | |
CON2-P23 | SPI1-CLK | PD1 | UART3-RX |
CON2-P24 | SPI1-CS | PD0 | UART3-TX |
Файл наложения устройств DTS для SPI LCD ILI9341 2.4 inch
Как формируются файлы наложения устройств (DTS) можно почитать в публикации Работа с GPIO на примере Banana Pi BPI-M64. Часть 2. Device Tree overlays.
В Armbian уже есть драйвер для ILI9341, поэтому все что требуется, это создать файл описания устройства в формате DTS, скомпилировать его в формат DTBO, и перезагрузить одноплатный компьютер.
Драйвера для Linux, в том числе и для ILI9341 располагаются по пути: /lib/modules/$(uname -r)/kernel/drivers/ . Убедимся в наличие драйвера, командой:
find /lib/modules/$(uname -r)/kernel/drivers/ -iname "*ili9341*"
Результат выполнения:
root@bananapim64:~# find /lib/modules/$(uname -r)/kernel/drivers/ -iname "*ili9341*" /lib/modules/5.8.6-sunxi64/kernel/drivers/staging/fbtft/fb_ili9341.ko /lib/modules/5.8.6-sunxi64/kernel/drivers/gpu/drm/tiny/ili9341.ko root@bananapim64:~#
Из результата видно наличие драйверов fb_ili9341.ko и ili9341.ko, можно продолжать настройку.
Создадим файл DTS с названием: sun50i-a64-spi-ili9341-led-always-on.dts (в основе dts файл для платы Orange Pi PC):
/dts-v1/; /plugin/; / { compatible = "allwinner,sun8i-h3"; fragment@0 { target = <&pio>; __overlay__ { ili9341_pins: ili9341_pins { pins = "PD4", "PC0"; /*RESET, DC_RS*/ function = "gpio_out", "gpio_out" ; }; }; }; fragment@1 { target = <&spi1>; __overlay__ { status = "okay"; cs-gpios = <&pio 3 0 0>; /* PD0 */ ili9341: ili9341@0 { compatible = "ilitek,ili9341"; reg = <0>; pinctrl-names = "default"; pinctrl-0 = <&ili9341_pins>; spi-max-frequency = <16000000>; rotate = <90>; bgr; fps = <25>; buswidth = <8>; reset-gpios = <&pio 3 4 1>; /*RESET=PD4*/ dc-gpios = <&pio 2 0 0>; /*DC_RS=PC0*/ /*led-gpios = <&pio 2 4 0>; LED=PC4*/ debug = <0>; }; }; }; };
Рассмотрим параметры (описание параметров Device Tree — GitHub Wiki notro/fbtft):
- fragment@0 — является наложением на блок узла /soc/pinctrl@1c20800, ссылка этого узла &pio. Описывает название задействованных контактов GPIO «PD4», «PC0» и определяет функцию gpio_out для контактов.
- &pio — это ссылка в дереве устройств для контактов GPIO на узел /soc/pinctrl@1c20800, название определяли выше. Ссылка берется из файла в Armbian по пути: /boot/dtb-5.8.6-sunxi64/allwinner/sun50i-a64-bananapi-m64.dtb . Для компиляции в формат DTS, выполнить команду: dtc -I dtb -O dts sun50i-a64-bananapi-m64.dtb -o sun50i-a64-bananapi-m64.dts
- fragment@1 — является наложением на блок узла /soc/spi@1c69000, ссылка этого узла &spi1.
- status = «okay» — задействует SPI1 интерфейс на плате для подключения устройств
- cs-gpios = <&pio 3 0 0>; /* PD0 */ — номер контакта для CS интерфейса SPI1.
- <&pio 3 0 0> — параметры пина, где &pio ссылка на gpioiochip1 в основном дереве устройств, буква P не учитывается, означает PORT, буква D — кодируется в цифру 3 (формула: порядковый номер буквы в алфавите — 1), 0 после цифры 3 это позиция вывода, 0 из PD0, и последний 0 — означает полярность, по умолчанию всегда 0 (полярность 0 — на логический ноль, выдается напряжение 0; полярность 1 — на логический ноль, выдается напряжение 1).
- compatible = «ilitek,ili9341» — идентификатор драйвера для данного устройства
- pinctrl-0 = <&ili9341_pins> — ссылка на используемые контакты из fragment@0
- spi-max-frequency = <16000000> — частота работы SPI интерфейса
- rotate = <90> — ориентация изображения, поворот на 90 градусов, в зависимости как необходимо расположить дисплей. Возможные значения: 0, 90, 180, 270.
- bgr — устанавливает бит BGR (поддерживается некоторыми драйверами). Используется для необходимости смены местами красного и синего цвета.
- fps = <25> — кадров в секунду (значение по умолчанию — 20)
- reset-gpios = <&pio 3 4 1> — контакт сброса устройства, RESET=PD4
- dc-gpios = <&pio 2 0 0> — контакт для передачи данных/команд, DC_RS=PC0
- debug = <0> — Включает/выключает отладку, «0» — отладка выключена, «1»-отладка включена. Сообщения можно посмотреть командой: dmesg . Установить уровень журналирования, команда: echo «5» > /sys/class/graphics/fb1/debug . Более подробно почитать в Wiki-notro/fbtft Debug.
Разместим файл по пути /boot/dtb/allwinner/overlay . Затем компилируем файл .dts в .dtbo:
$ dtc -O dtb -o sun50i-a64-spi-ili9341-led-always-on.dtbo sun50i-a64-spi-ili9341-led-always-on.dts
Запустим утилиту конфигурирования платы: armbian-config . Перейдем по меню: System > Hardware, и включим слой (overlay): spi-ili9341-led-always-on. После перезагрузки платы, консоль Linux будет на SPI LCD экране:
После перезапуска можно проверить устройство вывода графики, командой dmesg | grep graphics :
В консоли должна быть следующая информация:
root@bananapim64:~# dmesg | grep graphics [ 6.367060] graphics fb0: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=25, spi0.0 at 16 MHz root@bananapim64:~#
Решение проблем
1. Если изображение не появилось на LCD, выполните команду для проверки: dmesg | grep -E ‘ili9341’ .
В консоли должна быть следующая информация:
root@bananapim64:~# dmesg | grep -E 'ili9341' [ 5.733989] fb_ili9341: module is from the staging directory, the quality is unknown, you have been warned. [ 5.734718] fb_ili9341 spi0.0: fbtft_property_value: buswidth = 8 [ 5.734731] fb_ili9341 spi0.0: fbtft_property_value: debug = 0 [ 5.734737] fb_ili9341 spi0.0: fbtft_property_value: rotate = 90 [ 5.734744] fb_ili9341 spi0.0: fbtft_property_value: fps = 25 [ 6.119287] graphics fb0: fb_ili9341 frame buffer, 320x240, 150 KiB video memory, 16 KiB buffer memory, fps=25, spi0.0 at 16 MHz
2. В файле DTS (sun50i-a64-spi-ili9341-led-always-on.dts) включить отладку, строку «debug = <0>;» заменить на «debug = <1>;». После перезапуска платы, для просмотра сообщений выполнить команду: dmesg .
Вариант 2. Схема подключения SPI LCD ILI9341 2.4 inch к Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) с включаемой подсветкой контактом GPIO
В схеме Вариант 1 управление подсветкой было напрямую подключено к линии питания 3.3V, в результате подсветка всегда работала в независимости от вывода изображения на экран. Для программного управления подсветки необходимо контакт номер 8 — LED на LCD экране подключить к цифровому выходу GPIO на Banana Pi BPI-M64. В данном случае, контакт LED на LCD подключаем к 27-pin (PC4) на 40-контактном разъеме (Raspberry Pi 3).
Таблица контактов подключения (дополнительно к Варианту 1):
Номер LCD | Метка LCD | Номер контакта на Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) |
8 | LED | 27 (через резистор ~ 56 Ом) |
Подключать контакт LED рекомендуют через резистор номиналом ~ 56 Ом.
SPI интерфейс представлен на 40-контактном разъеме (типа Raspberry Pi 3 GPIO). Для формирования файла DTS необходимо знать название контактов, для этого воспользуемся Wiki-страницей Banana Pi BPI-M64 или Распиновка GPIO для Banana Pi BPI-M64, узнаем название контактов, дополним таблицу 27-pin контактом:
40 PIN GPIO of Banana pi BPI-M64 | |||
GPIO Pin Name | Default Function | Function2:GPIO | Function3 |
CON2-P18 | PD4 | PD4 | |
CON2-P19 | SPI1-MOSI | PD2 | UART4-TX |
CON2-P21 | SPI1-MISO | PD3 | UART4-RX |
CON2-P22 | PC0 | PC0 | |
CON2-P23 | SPI1-CLK | PD1 | UART3-RX |
CON2-P24 | SPI1-CS | PD0 | UART3-TX |
CON2-P27 | PC4 | PC4 |
Файл наложения устройств DTS для SPI LCD ILI9341 2.4 inch
Отличие от Варианта 1 будет заключаться в раскомментирование строки: led-gpios = <&pio 2 4 0>; /*LED=PC4*/
Создадим файл DTS с названием: sun50i-a64-spi-ili9341-main.dts (в основе dts файл для платы Orange Pi PC):
/dts-v1/; /plugin/; / { compatible = "allwinner,sun8i-h3"; fragment@0 { target = <&pio>; __overlay__ { ili9341_pins: ili9341_pins { pins = "PD4", "PC0"; /*RESET, DC_RS*/ function = "gpio_out", "gpio_out" ; }; }; }; fragment@1 { target = <&spi1>; __overlay__ { status = "okay"; cs-gpios = <&pio 3 0 0>; /* PD0 */ ili9341: ili9341@0 { compatible = "ilitek,ili9341"; reg = <0>; pinctrl-names = "default"; pinctrl-0 = <&ili9341_pins>; spi-max-frequency = <16000000>; rotate = <90>; bgr; fps = <25>; buswidth = <8>; reset-gpios = <&pio 3 4 1>; /*RESET=PD4*/ dc-gpios = <&pio 2 0 0>; /*DC_RS=PC0*/ led-gpios = <&pio 2 4 0>; /*LED=PC4*/ debug = <0>; }; }; }; };
Рассмотрим параметры (дополнение к Вариант 1):
- gpios = <&pio 2 4 0> — контакт для управления подсветкой, LED=PC4
Разместим файл по пути /boot/dtb/allwinner/overlay . Затем компилируем файл .dts в .dtbo:
$ dtc -O dtb -o sun50i-a64-spi-ili9341-main.dtbo sun50i-a64-spi-ili9341-main.dts
Запустим утилиту конфигурирования платы: armbian-config . Перейдем по меню: System > Hardware, и включим слой (overlay): spi-ili9341-main. Если до этого выполняли Вариант 1, то предыдущий слой spi-ili9341-led-always-on необходимо выключить. После перезагрузки платы, подсветка LCD экрана включится только во время инициализации и выключится вместе с устройством.
Вариант 3. Схема подключения SPI LCD ILI9341 2.4 inch к Banana Pi BPI-M64 (порт GPIO Raspberry Pi 3) с драйвером gpio-backlight
Реализация схемы Вариант 2 давала возможность задействовать подсветку только во время работы самого дисплея, но невозможно было выключать/включать подсветку во время работы. Для возможности управления подсветкой необходимо в ОС зарегистрировать устройство класса backlight, тогда через стандартные интерфейсы и программы можно управлять подсветкой в интерактивном режиме.
Для реализации подсветки через драйвер gpio-backlight необходимо LCD дисплей подключить по схеме Вариант 2. Драйвер gpio-backlight будет управлять контактом PC4, тот который был в файле DTS: led-gpios = <&pio 2 4 0>. В данной реализации сможем только включать/выключать подсветку.
Файл наложения устройств DTS для SPI LCD ILI9341 2.4 inch
Создадим файл DTS с названием: sun50i-a64-spi-ili9341-backlight-on-off.dts (в основе dts файл для платы Orange Pi PC):
/dts-v1/; /plugin/; / { compatible = "allwinner,sun8i-h3"; fragment@0 { target = <&pio>; __overlay__ { backlight_pin: backlight_pin { pins = "PC4"; function = "gpio_out"; }; }; }; fragment@1 { target-path = "/"; __overlay__ { backlightlcdtft: backlightlcdtft { compatible = "gpio-backlight"; pinctrl-names = "default"; pinctrl-0 = <&backlight_pin>; gpios = <&pio 2 4 0>; //PIN27 GPIO68 PC4 default-on; }; }; }; fragment@2 { target = <&pio>; __overlay__ { ili9341_pins: ili9341_pins { pins = "PD4", "PC0"; /*RESET, DC_RS*/ function = "gpio_out", "gpio_out" ; }; }; }; fragment@3 { target = <&spi1>; __overlay__ { status = "okay"; cs-gpios = <&pio 3 0 0>; /* PD0 */ ili9341: ili9341@0 { compatible = "ilitek,ili9341"; reg = <0>; pinctrl-names = "default"; pinctrl-0 = <&ili9341_pins>; spi-max-frequency = <16000000>; rotate = <90>; bgr; fps = <25>; buswidth = <8>; reset-gpios = <&pio 3 4 1>; /*RESET=PD4*/ dc-gpios = <&pio 2 0 0>; /*DC_RS=PC0*/ backlight = <&backlightlcdtft>; /*led-gpios = <&pio 2 4 0>; LED=PC4*/ debug = <0>; }; }; }; };
Рассмотрим параметры (дополнение к Вариант 1):
- fragment@0, fragment@1 — реализует устройство gpio-backlight.
- backlight = <&backlight> — ссылка на устройство управления подсветкой.
Разместим файл по пути /boot/dtb/allwinner/overlay . Затем компилируем файл .dts в .dtbo:
$ dtc -O dtb -o sun50i-a64-spi-ili9341-backlight-on-off.dtbo sun50i-a64-spi-ili9341-backlight-on-off.dts
Запустим утилиту конфигурирования платы: armbian-config . Перейдем по меню: System > Hardware, и включим слой (overlay): spi-ili9341-backlight-on-off. Если до этого выполняли Вариант 1 или Вариант 2, то предыдущий слой spi-ili9341-led-always-on или sun50i-a64-spi-ili9341-main.dts необходимо выключить. После перезагрузки в системе появится новое устройство класса backlight. По пути /sys/class/backlight будет папка backlightlcdtft.
root@bananapim64:~# cd /sys/class/backlight root@bananapim64:/sys/class/backlight# ls -l total 0 lrwxrwxrwx 1 root root 0 Mar 21 14:26 backlightlcdtft -> ../../devices/platform/backlightlcdtft/backlight/backlightlcdtft root@bananapim64:/sys/class/backlight#
Для включения подсветки, необходимо выполнить команду:
echo "1" > /sys/class/backlight/backlightlcdtft/brightness
Для выключения подсветки, необходимо выполнить команду:
echo "0" > /sys/class/backlight/backlightlcdtft/brightness
Решение проблем
1. Если папка по пути /sys/class/backlight , пустая то выполните команду для проверки: dmesg | grep -E ‘backlight’ .
В консоли должна быть следующая информация:
root@bananapim64:~# dmesg | grep -E 'backlight' [ 6.015634] fb_ili9341 spi0.0: fbtft_property_value: backlight = 181 root@bananapim64:~#
Виртуальное устройство для вывода графики Framebuffer
Linux предоставляет концепцию framebuffer, виртуального устройства, с которого можно читать и записывать для отображения графики. Содержимое framebuffer обычно отображается на экране. На Banana Pi BPI-M64 выход HDMI соответствует Framebuffer 0, представленному файлом /dev/fb0 . Если к плате подключена HDMI панель и дисплей SPI LCD, то будет два устройства /dev/fb0 и /dev/fb1 , где /dev/fb0 — HDMI, /dev/fb1 — SPI LCD. Записывая в файл /dev/fb0 графические данные, можно отобразить графику на дисплее.
Для просмотра доступных виртуальных устройств Framebuffer, необходимо выполнить команду:
$ ls -l /dev/fb*
Результат выполнения:
root@bananapim64:~# ls -l /dev/fb* crw-rw---- 1 root video 29, 0 Mar 21 14:26 /dev/fb0 root@bananapim64:~#
В системе доступно виртуальное устройство framebuffer, /dev/fb0 которое является отражением SPI LCD ILI9341 экрана. Выведем изображение и видео на экран SPI LCD ILI9341 напрямую через устройство /dev/fb0 . Дополнительная документация по Framebuffer — Framebuffer use GitHub notro/fbtft.
Загрузить на устройство /dev/fb0 , изображение:
$ sudo apt-get update $ sudo apt-get -y install fbi $ mkdir ~/lcdtest $ cd lcdtest $ wget https://raw.githubusercontent.com/devdotnetorg/Site/master/Uploads/minion-banana.jpg $ sudo fbi -d /dev/fb0 -T 1 -noverbose -a minion-banana.jpg
Загрузить на устройство /dev/fb0 , видео в формате mpg:
$ sudo apt-get update $ sudo apt-get install -y mplayer $ wget https://raw.githubusercontent.com/devdotnetorg/Site/master/Uploads/minions-320x180.mpg $ mplayer -nolirc -vo fbdev2:/dev/fb0 minions-320x180.mpg
Displaying pictures and videos using Framebuffer in Linux on the SPI LCD ILI9341
Экран можно заполнить случайными пикселями, командой:
cat /dev/urandom > /dev/fb0
Очистить экран, командой:
cat /dev/zero > /dev/fb0
Как сделать скриншот с устройства Framebuffer
Особенность архитектуры Linux позволяет линейно считывать данные у устройства /dev/fb0 и сохранять в виде графического файла, в не зависимости от графической оболочки и текущего контекста пользователя. Для создания скриншотов используется программа fbgrab, помимо ее необходимо установить графическую библиотеку imagemagick для сжатия картинки в формате PNG. Синтаксис вызова простой: fbgrab -d /dev/fb0 screenshot.png , где /dev/fb0 — адрес устройства, screenshot.png — название файла.
Установка:
apt-get update apt-get install -y imagemagick fbgrab
Команда создания скриншота: fbgrab -d /dev/fb0 screenshot.png
Результат выполнения команды, скриншот с программой htop:
Настройка графической подсистемы Xorg и графической оболочки Xfce
Необходимо установить Xorg и Xfce:
1) Установим Xorg и Xfce:
$ sudo apt-get update $ sudo apt-get install -y xorg $ sudo apt-get install -y xfce4
2) Для процессора Allwinner необходимо дополнительно устанавливать GPU драйвер — fbdev:
$ sudo apt-get install -y xserver-xorg-video-fbdev
3) Создать конфигурационный файл по пути /usr/share/X11/xorg.conf.d/99-fbdev.conf и разместить в нем следующий фрагмент:
Section "Device" Identifier "myfb" Driver "fbdev" Option "fbdev" "/dev/fb0" EndSection
Где /dev/fb0 — устройство SPI LCD.
Если к плате подключена HDMI панель, то будет два устройства /dev/fb0 и /dev/fb1 , где /dev/fb0 — HDMI, /dev/fb1 — SPI LCD. И строку Option «fbdev» «/dev/fb0» необходимо будет заменить на Option «fbdev» «/dev/fb1».
Запускаем графический интерфейс командой: startx или startxfxe4 :
Если необходимо при запуске одноплатного компьютера показывать графическое окно для входа логин/пароль, то необходимо дополнительно установить пакеты:
$ sudo apt-get install -y tasksel $ sudo apt-get install -y xubuntu-desktop
Для возвращения запуска только консоли необходимо отключить автозапуск службы экранного менеджера display-manager.service. :
$ sudo systemctl disable display-manager.service
Экранный менеджер или менеджер входа — графический экран, который отображается в конце процесса загрузки вместо стандартного приглашения командной строки. Экранный менеджер представляет собой экран ввода имени пользователя и пароля для входа в систему. Существует множество экранных менеджеров, как и окружений рабочего стола.
Решение проблем
Если графический интерфейс не запускается то для решение проблем необходимо посмотреть журнал событий Xorg, командой:
$ cat /var/log/Xorg.0.log
Файлы DTS для подключения SPI LCD ILI9341 и другие файлы наложения дерева доступны в каталоге GitHub Banana-Pi-BPI-M64/dt-overlays/
Обновление: 12/04/2021 Добавлен раздел — Как сделать скриншот с устройства Framebuffer и команды заполнения Framebuffer.
Литература
- Подключение дисплея по SPI (ili9341) на ядре > 5.4/Orange Pi One и Orange Pi PC/PC Plus — AlexTransit14, Форум PDA
- 2.4inch SPI Module ILI9341 SKU:MSP2402 — LCD Wiki
- notro/fbtft — GitHub Wiki
- SPIdev — SUNXI
- Как добавить драйвер устройства SPI, если к устройству уже обращается драйвер «spidev»? — CodeRoad
- Инструкция по подключению дисплея на чипе ili9341 320X240 SPI к ORANGE PI ZERO — Comanche_Ak, Форум PDA
- Banana Pi BPI-R64 SPI touch panel test with OpenWRT — Forum Banana pi
- gpio-backlight bindings — Kernel.org
- Generic howto for Allwinner devices — Armbian Documentation
- Как в Linux включить автоматических вход в систему — ZaLinux.ru
- Writing GUI applications on the Raspberry Pi without a desktop environment — Avik Das [medium.com]