Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Процессорные модули » SK-iMX8Mini-MOD, SK-iMX8Mini-SODIMM
Падение gbm при создании курсора мышки в DRM
alex_code
Добавлено 30.04.2021 16:49
0
Сообщение: 1
alex_code
0

Пункты: 142
Регистрация: 30.04.2021
Добрый день.

Я использую SK-iMX8Mini-MOD с экраном SK-iMX8Mini-MB-LCD.

Я хочу запустить на нем OpenGL ES пример и добавить подержку отрисовки мышки.

Я взял пример из opengles-book-samples репозитория и подправил, чтобы dri card был по умолчанию /dev/dri/card0 или читался из переменной окружения DRI_CARD.

Сначала я собираю и запускаю пример из моего opengles-book-samples форка branch imx8-drm на Raspberry Pi 4 с Ubuntu 21.04 aarch64:
https://github.com/AlexanderScherbatiy/opengles-book-samples/pull/1

Код

git clone https://github.com/AlexanderScherbatiy/opengles-book-samples.git
cd opengles-book-samples
git checkout imx8-drm
cd LinuxDRM
make
sudo init 3
export DRI_CARD="/dev/dri/card1"
sudo -E Chapter_2/Hello_Triangle/CH02_HelloTriangle


и вижу красный треугольник в левом нижнем углу.

Потом копирую CH02_HelloTriangle на SK-iMX8Mini-MOD и запускаю
Код

init 3
export DRI_CARD="/dev/dri/card0"
./CH02_HelloTriangle


и вижу тот же красный треугольник.
card0 выбираую, так как imx8 выдает:
Код

ls /sys/class/drm/
card0 card0-DSI-1 version


После этого добавляю код, который рисует курсор используя gbm
https://github.com/AlexanderScherbatiy/opengles-book-samples/pull/2

вот такой код:
Код

static DRM_CURSOR *drm_create_cursor(int drmFd, struct gbm_device *gbmDevice, uint32_t crtc_id)
{
int w = 16;
int h = 16;
DRM_CURSOR * c = calloc(1, sizeof(DRM_CURSOR));
uint32_t buf[w * h];
int ret;

c->crtc_id = crtc_id;
c->bo = gbm_bo_create(gbmDevice, w, h,
GBM_FORMAT_ARGB8888,
GBM_BO_USE_CURSOR_64X64 | GBM_BO_USE_WRITE);
if( NULL == c->bo )
{
printf("Failed to create gbm_bo\n");
return NULL;
}
c->bo_handle = gbm_bo_get_handle(c->bo).u32;

memset(buf, 255, sizeof buf); // white for now
if ( gbm_bo_write(c->bo, buf, sizeof(buf)) < 0 ) {
printf("Failed to write gbm_bo\n");
return NULL;
}


Собираю и запускаю из branch imx8-drm-cursor на Raspberry Pi 4:
Код

git checkout imx8-drm-cursor
make
sudo init 3
export DRI_CARD="/dev/dri/card1"
sudo -E Chapter_2/Hello_Triangle/CH02_HelloTriangle


При этом в левом нижнем углу появляется треугольник и в правом верхнем углу белый квадратик курсора.

Копирую CH02_HelloTriangle на SK-iMX8Mini-MOD, запускаю, и код падает:
Код

init 3
export DRI_CARD="/dev/dri/card0"
./CH02_HelloTriangle
Used dri card: /dev/dri/card0
Try to init gbm with fd=3, h=800 v=1280
Segmentation fault (core dumped)


падает при вызове gbm_bo_write вот в этом коде:
Код

memset(buf, 255, sizeof buf); // white for now
if ( gbm_bo_write(c->bo, buf, sizeof(buf)) < 0 ) { // Segmentation fault
printf("Failed to write gbm_bo\n");
return NULL;
}


не понятно, что не так с этим вызовом.
gdb показывает, что buf правильно инициализирован и gbm_bo_create выдает не NULL значение.

вот что выдает ldd CH02_HelloTriangle на SK-iMX8Mini-MOD:
Код

ldd CH02_HelloTriangle
linux-vdso.so.1 (0x0000ffff971e9000)
libGLESv2.so.2 => /usr/lib/libGLESv2.so.2 (0x0000ffff97035000)
libEGL.so.1 => /usr/lib/libEGL.so.1 (0x0000ffff96ff2000)
libm.so.6 => /lib/libm.so.6 (0x0000ffff96f39000)
libgbm.so.1 => /usr/lib/libgbm.so.1 (0x0000ffff96f26000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x0000ffff96f06000)
libc.so.6 => /lib/libc.so.6 (0x0000ffff96db2000)
/lib/ld-linux-aarch64.so.1 (0x0000ffff971be000)
libGAL.so => /usr/lib/libGAL.so (0x0000ffff96c0e000)
libVSC.so => /usr/lib/libVSC.so (0x0000ffff96699000)
libdl.so.2 => /lib/libdl.so.2 (0x0000ffff96686000)
gbm_viv.so => /usr/lib/gbm_viv.so (0x0000ffff96672000)
libwayland-server.so.0 => /usr/lib/libwayland-server.so.0 (0x0000ffff96651000)
libwayland-client.so.0 => /usr/lib/libwayland-client.so.0 (0x0000ffff96634000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffff96608000)
librt.so.1 => /lib/librt.so.1 (0x0000ffff965f1000)
libffi.so.6 => /usr/lib/libffi.so.6 (0x0000ffff965d9000)



ldd /usr/lib/libgbm.so.1
Код

ldd /usr/lib/libgbm.so.1
ldd: warning: you do not have execution permission for `/usr/lib/libgbm.so.1'
linux-vdso.so.1 (0x0000ffffb37f4000)
gbm_viv.so => /usr/lib/gbm_viv.so (0x0000ffffb37a2000)
libc.so.6 => /lib/libc.so.6 (0x0000ffffb364e000)
libdrm.so.2 => /usr/lib/libdrm.so.2 (0x0000ffffb362e000)
libGAL.so => /usr/lib/libGAL.so (0x0000ffffb348a000)
libwayland-server.so.0 => /usr/lib/libwayland-server.so.0 (0x0000ffffb3469000)
/lib/ld-linux-aarch64.so.1 (0x0000ffffb37c9000)
libm.so.6 => /lib/libm.so.6 (0x0000ffffb33b0000)
libdl.so.2 => /lib/libdl.so.2 (0x0000ffffb339d000)
librt.so.1 => /lib/librt.so.1 (0x0000ffffb3386000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffffb335a000)
libffi.so.6 => /usr/lib/libffi.so.6 (0x0000ffffb3342000)
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 30.04.2021 19:02 Сообщение: 2
sasamy
4.70

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

После этого добавляю код, который рисует курсор используя gbm


у NXP своя реализация opengl, скорей всего с gbm работать не будет. Можно попробовать открытую реализацию драйверов - mesa + etnavive, но надо время чтобы сделать порт и 100% что-то не будет работать что работало на закрытых драйверах.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 30.04.2021 19:06 Сообщение: 3
sasamy
4.70

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

у NXP своя реализация opengl


можно еще попробовать кросскомпилировать чтобы линковалось с билиотеками NXP а не на RPI
Спуститься к концу Подняться к началу
Персональная информация
alex_code
Добавлено 30.04.2021 22:30 Сообщение: 4
alex_code
0

Пункты: 142
Регистрация: 30.04.2021
С чего лучше начать разбираться в кросс компиляции для SK-iMX8Mini-MOD?

Откуда нужно брать правильный кросс компилятор и sysroot?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 30.04.2021 22:50 Сообщение: 5
sasamy
4.70

Пункты: 76880
Регистрация: 14.08.2009
Цитата
С чего лучше начать разбираться в кросс компиляции для SK-iMX8Mini-MOD?

Откуда нужно брать правильный кросс компилятор и sysroot?


в buildroot

кросскомпилятор:
buildroot-2019.11-sk/output/host/bin/aarch64-linux-gcc

sysroot:
buildroot-2019.11-sk/output/staging

я пробовал ядро 5.4 с майнстримным драйвером и mesa - kmscube там вроде работал, сейчас есть 5.10.9 попоздней сделаю буилдрут для него с майнстримными компонентами
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.05.2021 14:02 Сообщение: 6
sasamy
4.70

Пункты: 76880
Регистрация: 14.08.2009
Проверил на 5.10.9 с открытыми драйверами - такой же сегфолт, kmscube работает
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX8Mini-MOD, SK-iMX8Mini-SODIMM