фреймбуфер /dev/fb
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
фреймбуфер /dev/fb
В этом принципиальное отличие всех этих маленьких ARM SBC от привычных x86 - у них (ARM) нет видеоподсистемы текстового вывода на монитор, поэтому они подхватили довольно давнюю (ядро 2.1.107) идею видео фреймбуфера, куда записывается графические образ экрана, который мы потом и видим на HDMI.
Отображается фреймбуфер в системе (как один или несколько) /dev/fb0 ... и далее /dev/fb1 и т.д.
Но ... во-первых, в настройках-конфигурациях системы (а скорее даже системного загрузчика, U-boot etc.) фреймбуфер должен быть сконфигурирован.
А во-вторых, в смысле программного использования фреймбуфера - там всё не так просто.
Отображается фреймбуфер в системе (как один или несколько) /dev/fb0 ... и далее /dev/fb1 и т.д.
Но ... во-первых, в настройках-конфигурациях системы (а скорее даже системного загрузчика, U-boot etc.) фреймбуфер должен быть сконфигурирован.
А во-вторых, в смысле программного использования фреймбуфера - там всё не так просто.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Вот, подсказали - Curtis McEnroe:Olej писал(а):А во-вторых, в смысле программного использования фреймбуфера - там всё не так просто.
Очень небольшая статья, с примерами кода, которая показывает как а). отобразить фреймбуфер на буферную область памяти, б). как через эту буферную область отрисовать цветной пиксель на экране через фреймбуфер и в). как использовать текстовый фонт для вывода текста через фреймбуфер.Programming the Linux Framebuffer
Tuesday, 30 January, 2018
...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Фреймбуфер, как я понял, может создаваться в ядре - для известных видов видеоадаптеров!, или пробрасываться в ядро загрузчиком системы (U-boot и др.) для тех новых типов чипов, поддержка которых ещё не реализована в ядре.Olej писал(а): Но ... во-первых, в настройках-конфигурациях системы (а скорее даже системного загрузчика, U-boot etc.) фреймбуфер должен быть сконфигурирован.
Про мытарства с /dev/fb и его отображением на HDMI читаем здесь:
Mainline Kernel и HDMI (здесь, кстати, подробно показаны параметры кросс компиляции U-boot под ARM SBC Orange Pi !):
сборка системы BuildRootМай 11, 2017
...
1. Скачиваем u-boot из git://git.denx.de/u-boot.git (когда недавние изменения попадут в релиз, можно будет качать архив).
2. Накладываем на u-boot патч, с которым драйвер добавляет описание фреймбуфера в device tree во время загрузки https://github.com/Icenowy/u-boot/commi ... dc96.patch
3. Делаем defconfig, собираем u-boot.
4. Скачиваем свежее мейнлайновое ядро отсюда: https://www.kernel.org/ :)
5. Накладываем на ядро патч, который добавляет фреймбуфер в device tree для H3: https://pastebin.com/raw/PgYmgzbT
6. Делаем defconfig, собираем ядро.
7. Устанавливаем u-boot, ядро, dtb и радуемся рабочему HDMI с EDID.
Июнь 29, 2018
...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Вообще то, многие традиционные x86 дистрибутивы конфигурируют ядро с поддержкой фреймбуфера:Olej писал(а):В этом принципиальное отличие всех этих маленьких ARM SBC от привычных x86
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc$ uname -a
Linux ACER 4.19.0-2-amd64 #1 SMP Debian 4.19.16-1 (2019-01-17) x86_64 GNU/Linux
olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux buster/sid
Release: testing
Codename: buster
olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc$ ls -l /dev/fb*
crw-rw---- 1 root video 29, 0 фев 27 16:12 /dev/fb0
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc$ cat /boot/config-4.19.0-2-amd64 | grep FRAMEBUFFER
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
# CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/AplitSoft/OrgDoc$ cat /boot/config-4.19.0-2-amd64 | grep _FB_ | grep =y
CONFIG_DRM_KMS_FB_HELPER=y
CONFIG_FB_CMDLINE=y
CONFIG_FB_NOTIFY=y
CONFIG_FB_BOOT_VESA_SUPPORT=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_SYS_FILLRECT=y
CONFIG_FB_SYS_COPYAREA=y
CONFIG_FB_SYS_IMAGEBLIT=y
CONFIG_FB_SYS_FOPS=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_BACKLIGHT=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y
CONFIG_FB_PM2_FIFO_DISCONNECT=y
CONFIG_FB_CYBER2000_DDC=y
CONFIG_FB_VESA=y
CONFIG_FB_EFI=y
CONFIG_FB_MATROX_MILLENIUM=y
CONFIG_FB_MATROX_MYSTIQUE=y
CONFIG_FB_MATROX_G=y
CONFIG_FB_RADEON_I2C=y
CONFIG_FB_RADEON_BACKLIGHT=y
CONFIG_FB_ATY128_BACKLIGHT=y
CONFIG_FB_ATY_CT=y
CONFIG_FB_ATY_GX=y
CONFIG_FB_ATY_BACKLIGHT=y
CONFIG_FB_S3_DDC=y
CONFIG_FB_SIS_300=y
CONFIG_FB_SIS_315=y
CONFIG_FB_VIA_X_COMPATIBILITY=y
CONFIG_FB_3DFX_I2C=y
CONFIG_FB_MB862XX_PCI_GDC=y
CONFIG_FB_MB862XX_I2C=y
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Как это выглядит в разных дистрибутивах и при разном видеооборудовании:Olej писал(а): Вообще то, многие традиционные x86 дистрибутивы конфигурируют ядро с поддержкой фреймбуфера:
- Mint 19.1
Код: Выделить всё
olej@nvidia:~$ lsb_release -a
No LSB modules are available.
Distributor ID: LinuxMint
Description: Linux Mint 19.1 Tessa
Release: 19.1
Codename: tessa
olej@nvidia:~$ uname -a
Linux nvidia 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
olej@nvidia:~$ inxi -G
Graphics: Device-1: NVIDIA GF119 [GeForce GT 520] driver: nvidia v: 390.77
Display: server: X.Org 1.19.6 driver: nvidia unloaded: fbdev,modesetting,nouveau,vesa resolution: 1920x1080~60Hz
OpenGL: renderer: GeForce GT 520/PCIe/SSE2 v: 4.6.0 NVIDIA 390.77
olej@nvidia:~$ ls -l /dev/fb*
crw-rw---- 1 root video 29, 0 мар 5 12:32 /dev/fb0
Код: Выделить всё
[olej@xenix ~]$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: Fedora
Description: Fedora release 28 (Twenty Eight)
Release: 28
Codename: TwentyEight
[olej@xenix ~]$ uname -a
Linux xenix.localdomain 4.19.13-200.fc28.x86_64 #1 SMP Sat Dec 29 23:10:35 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[olej@xenix ~]$ inxi -G
Graphics: Device-1: Intel 4 Series Integrated Graphics driver: i915 v: kernel
Display: x11 server: Fedora Project X.org 1.19.6 driver: modesetting unloaded: fbdev,vesa
resolution: 1920x1080~60Hz
OpenGL: renderer: Mesa DRI Intel G41 v: 2.1 Mesa 18.0.5
[olej@xenix ~]$ ls -l /dev/fb*
crw-rw---- 1 root video 29, 0 мар 5 12:30 /dev/fb0
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
А это уже ARM SBC одноплатный Orange Pi One:Olej писал(а): Как это выглядит в разных дистрибутивах и при разном видеооборудовании:
Код: Выделить всё
[olej@xenix 05]$ ssh olej@192.168.1.108
olej@192.168.1.108's password:
___ ____ _ ___
/ _ \ _ __ __ _ _ __ __ _ ___ | _ \(_) / _ \ _ __ ___
| | | | '__/ _` | '_ \ / _` |/ _ \ | |_) | | | | | | '_ \ / _ \
| |_| | | | (_| | | | | (_| | __/ | __/| | | |_| | | | | __/
\___/|_| \__,_|_| |_|\__, |\___| |_| |_| \___/|_| |_|\___|
|___/
Welcome to ARMBIAN 5.60 stable Debian GNU/Linux 9 (stretch) 4.14.70-sunxi
System load: 0.00 0.07 0.05 Up time: 6 min
Memory usage: 10 % of 493MB IP: 192.168.1.108
CPU temp: 35°C
Usage of /: 74% of 3.7G
[ General system configuration (beta): armbian-config ]
Last login: Tue Mar 5 10:48:20 2019
olej@orangepione:~$ uname -a
Linux orangepione 4.14.70-sunxi #265 SMP Wed Sep 19 10:01:19 CEST 2018 armv7l GNU/Linux
olej@orangepione:~$ inxi -G
Graphics: Card: Failed to Detect Video Card!
Display Server: X.org 1.19.2 driver: N/A tty size: 120x45 Advanced Data: N/A out of X
olej@orangepione:~$ ls -l /dev/fb*
crw-rw---- 1 root video 29, 0 Nov 30 09:17 /dev/fb0
Код: Выделить всё
[olej@xenix 05]$ ssh olej@192.168.1.109
olej@192.168.1.109's password:
...
model: Raspberry Pi 2 Model B Rev 1.1
compatible: brcm,bcm2709
My IP address is 192.168.1.109
Xenomai/cobalt v3.0.5
olej@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
olej@raspberrypi:~ $ uname -a
Linux raspberrypi 4.1.21-v7+ #4 SMP Sat Jul 15 06:39:14 CEST 2017 armv7l GNU/Linux
olej@raspberrypi:~ $ ls -l /dev/fb*
crw-rw---- 1 root video 29, 0 Nov 30 09:17 /dev/fb0
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Я стал копать это так обширно только потому, что на некоторых образцах нет фреймбуфера:Olej писал(а): Как это выглядит в разных дистрибутивах и при разном видеооборудовании:
Код: Выделить всё
[olej@dell ~]$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: Fedora
Description: Fedora release 27 (Twenty Seven)
Release: 27
Codename: TwentySeven
[olej@dell ~]$ ls -l /dev/fb*
ls: невозможно получить доступ к '/dev/fb*': Нет такого файла или каталога
[olej@dell ~]$ inxi -G
Graphics: Device-1: NVIDIA GT218M [NVS 3100M] driver: nvidia v: 340.107
Display: server: X.org 1.19.6 driver: nvidia unloaded: fbdev,modesetting,nouveau,vesa tty: 172x49
Message: Advanced graphics data unavailable in console. Try -G --display
[olej@dell ~]$ inxi -G --display
Graphics: Device-1: NVIDIA GT218M [NVS 3100M] driver: nvidia v: 340.107
Display: x11 server: Fedora Project X.org 1.19.6 driver: nvidia
unloaded: fbdev,modesetting,nouveau,vesa resolution: 1600x900~60Hz
OpenGL: renderer: NVS 3100M/PCIe/SSE2 v: 3.3.0 NVIDIA 340.107
И что значит unloaded fbdev у inxi?
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Это очень старый механизм Linux (даже дремучий), получивший новую жизнь в связи с SBC, поэтому с ним крайне сложно разбираться:Olej писал(а):В этом принципиальное отличие всех этих маленьких ARM SBC от привычных x86 - у них (ARM) нет видеоподсистемы текстового вывода на монитор, поэтому они подхватили довольно давнюю (ядро 2.1.107) идею видео фреймбуфера, куда записывается графические образ экрана, который мы потом и видим на HDMI.
- публикации на счёт использования FB (API) - старые...
- относящиеся, главным образом, к консольным конфигурациям (без Xorg)...
- а все каталоги и пути с того времени, в разных дистрибутивах, поплыли - всё приходится разыскивать!
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Основываясь на этой публикации (в моих дистрибутивах всё находится совсем в других местах)...Olej писал(а): Вот, подсказали - Curtis McEnroe:Programming the Linux Framebuffer
Tuesday, 30 January, 2018
...
- fb1.c :
Код: Выделить всё
#include <fcntl.h>
#include <assert.h>
#include <stddef.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <sys/mman.h>
#include <stdint.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
int fb = open( "/dev/fb0", O_RDWR );
assert( fb > 0 );
struct fb_var_screeninfo info;
assert( 0 == ioctl( fb, FBIOGET_VSCREENINFO, &info ) );
size_t len = 4 * info.xres * info.yres;
printf( "X=%d | Y=%d | LEN=%u\n", info.xres, info.yres, len );
uint32_t *buf = mmap( NULL, len, PROT_READ | PROT_WRITE, MAP_SHARED, fb, 0 );
printf( "%p\n", buf );
if( MAP_FAILED == buf )
printf( "error: %m\n" );
assert( buf != MAP_FAILED );
int ret = munmap( buf, len );
if( ret != 0 )
printf( "error: %m\n" );
close( fb );
exit( EXIT_SUCCESS );
}
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/fb$ gcc fb1.c -o fb1
Код: Выделить всё
olej@ACER:~/2019_WORK/own.WORK/fb$ ./fb1
X=1920 | Y=1080 | LEN=8294400
0x7fb51c35f000
Код: Выделить всё
olej@orangepione:~/fb$ uname -a
Linux orangepione 4.14.70-sunxi #265 SMP Wed Sep 19 10:01:19 CEST 2018 armv7l GNU/Linux
olej@orangepione:~/fb$ gcc fb1.c -o fb1
olej@orangepione:~/fb$ ls -l /dev/fb*
crw-rw---- 1 root video 29, 0 Mar 5 22:17 /dev/fb0
olej@orangepione:~/fb$ cat /etc/group | grep video
video:x:44:olej,motion
olej@orangepione:~/fb$ ./fb1
X=1024 | Y=768 | LEN=3145728
0xb6b7a000
- Вложения
-
- fb1.c
- (886 байт) 223 скачивания
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: фреймбуфер /dev/fb
Но!!!Olej писал(а): Armbian Orange Pi (ARM):Код: Выделить всё
olej@orangepione:~/fb$ ./fb1 X=1024 | Y=768 | LEN=3145728 0xb6b7a000
Rapsberry Pi 2:
Код: Выделить всё
olej@raspberrypi:~/fb $ uname -a
Linux raspberrypi 4.1.21-v7+ #4 SMP Sat Jul 15 06:39:14 CEST 2017 armv7l GNU/Linux
olej@raspberrypi:~/fb $ ls -l /dev/fb0
crw-rw---- 1 root video 29, 0 Mar 5 22:17 /dev/fb0
olej@raspberrypi:~/fb $ cat /etc/group | grep video
video:x:44:pi,olej
olej@raspberrypi:~/fb $ ./fb1
fb1: fb1.c:14: main: Assertion `fb > 0' failed.
Aborted
olej@raspberrypi:~/fb $ sudo ./fb1
[sudo] password for olej:
X=656 | Y=416 | LEN=1091584
0xffffffff
error: Invalid argument
fb1: fb1.c:24: main: Assertion `buf != ((void *) -1)' failed.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей