Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:2
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Процессорные модули » SK-iMX6ULL-MOD
Инициализация драйвера fbdev, различные результаты
dolmatov
Добавлено 07.07.2023 15:59
0
Сообщение: 1
dolmatov
0

Пункты: 1802
Регистрация: 03.07.2016
Пишу приложение с использованием графической библиотеки LVGL. Компилятор gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf. Вызываю fbdev_init() без изменения исходных текстов приложения, контролирую полученные параметры. Иногда получаю 800x480 32bpp, в этом случае все работает как нужно, а в некоторых, чаще, 800x480 16bpp, с соответствующими последствиями...
Спуститься к концу Подняться к началу
Персональная информация
dolmatov
Добавлено 07.07.2023 16:03 Сообщение: 2
dolmatov
0

Пункты: 1802
Регистрация: 03.07.2016
Цитата
без изменения исходных текстов приложения

имеется в виду без изменений в плане инициализации драйверов
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 10.07.2023 12:22 Сообщение: 3
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата
Пишу приложение с использованием графической библиотеки LVGL. Компилятор gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf. Вызываю fbdev_init() без изменения исходных текстов приложения, контролирую полученные параметры. Иногда получаю 800x480 32bpp, в этом случае все работает как нужно, а в некоторых, чаще, 800x480 16bpp, с соответствующими последствиями...


Не знаком с lvgl, выглядит как будто приложение пытается выставить свои параметры для дисплея - посмотрите доки как указать lvgl чтобы использовалось то что по умолчанию у фоеймбуфера
Спуститься к концу Подняться к началу
Персональная информация
dolmatov
Добавлено 13.07.2023 04:51 Сообщение: 4
dolmatov
0

Пункты: 1802
Регистрация: 03.07.2016
Цитата

Не знаком с lvgl, выглядит как будто приложение пытается выставить свои параметры для дисплея - посмотрите доки как указать lvgl чтобы использовалось то что по умолчанию у фоеймбуфера


непохоже ..

Код


void fbdev_init(void)
{
// Open the file for reading and writing
fbfd = open(FBDEV_PATH, O_RDWR);
if(fbfd == -1) {
perror("Error: cannot open framebuffer device");
return;
}
LV_LOG_INFO("The framebuffer device was opened successfully");

// Make sure that the display is on.
if (ioctl(fbfd, FBIOBLANK, FB_BLANK_UNBLANK) != 0) {
perror("ioctl(FBIOBLANK)");
// Don't return. Some framebuffer drivers like efifb or simplefb don't implement FBIOBLANK.
}

#if USE_BSD_FBDEV
struct fbtype fb;
unsigned line_length;

//Get fb type
if (ioctl(fbfd, FBIOGTYPE, &fb) != 0) {
perror("ioctl(FBIOGTYPE)");
return;
}

//Get screen width
if (ioctl(fbfd, FBIO_GETLINEWIDTH, &line_length) != 0) {
perror("ioctl(FBIO_GETLINEWIDTH)");
return;
}

vinfo.xres = (unsigned) fb.fb_width;
vinfo.yres = (unsigned) fb.fb_height;
vinfo.bits_per_pixel = fb.fb_depth;
vinfo.xoffset = 0;
vinfo.yoffset = 0;
finfo.line_length = line_length;
finfo.smem_len = finfo.line_length * vinfo.yres;
#else /* USE_BSD_FBDEV */

// Get fixed screen information
if(ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo) == -1) {
perror("Error reading fixed information");
return;
}

// Get variable screen information
if(ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
perror("Error reading variable information");
return;
}
#endif /* USE_BSD_FBDEV */

LV_LOG_INFO("%dx%d, %dbpp", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);

// Figure out the size of the screen in bytes
screensize = finfo.smem_len; //finfo.line_length * vinfo.yres;

// Map the device to memory
fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);
if((intptr_t)fbp == -1) {
perror("Error: failed to map framebuffer device to memory");
return;
}

// Don't initialise the memory to retain what's currently displayed / avoid clearing the screen.
// This is important for applications that only draw to a subsection of the full framebuffer.

LV_LOG_INFO("The framebuffer device was mapped to memory successfully");

}


c qt приложением картина чем то схожая: при первом (после включения)старте приложения плучаю картинку в виде четырех искаженных по цвету и геометрии виджетов везхнего уровня, при втором и последующих запусках все нормально ...
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.07.2023 12:46 Сообщение: 5
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата
Иногда получаю 800x480 32bpp, в этом случае все работает как нужно, а в некоторых, чаще, 800x480 16bpp, с соответствующими последствиями...


на местной MB с местным дисплеем штатно 16 bpp работает без проблем, можете для проверки попробовать у себя включить в buildroot fb-test и проверить

https://i.ibb.co/gzn0NpB/imx6ull-mb.jpg
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.07.2023 12:53 Сообщение: 6
sasamy
4.71

Пункты: 83540
Регистрация: 14.08.2009
Цитата

# fbset

mode "800x480-60"
# D: 33.501 MHz, H: 31.515 kHz, V: 60.259 Hz
geometry 800 480 800 480 16
timings 29850 89 164 23 10 10 10
accel false
rgba 5/11,6/5,5/0,0/0
endmode

# fb-test
fb-test 1.1.0 (rosetta)
fb res 800x480 virtual 800x480, line_len 1600, bpp 16

# uname -a
Linux SK-iMX6ULL 4.9.11 #1 PREEMPT Thu Jul 13 00:37:23 PDT 2023 armv7l GNU/Linux


собрано в штатном buildroot
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX6ULL-MOD