Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/lvgl/lv_port_linux

LVGL configured to work with a standard Linux framebuffer
https://github.com/lvgl/lv_port_linux

framebuffer linux lvgl

Last synced: 10 days ago
JSON representation

LVGL configured to work with a standard Linux framebuffer

Awesome Lists containing this project

README

        

# LVGL on top of Linux graphics stack

Example project to use LVGL on top of Linux graphics stack.
Currently supported backends are legacy framebuffer
(fbdev), modern DRM/KMS, Wayland or SDL2.

By default, legacy framebuffer backend uses `/dev/fb0` device node,
DRM/KMS backend uses '/dev/dri/card0' card node, SDL2 uses window
resolution of 800x480.

Check out this blog post for a step by step tutorial:
https://blog.lvgl.io/2018-01-03/linux_fb

## Build dependencies
Check the [Dockerfiles](docker/) for the build dependencies.

## Clone the project

Clone the LVGL Framebuffer Demo project and its related sub modules.

```
git clone https://github.com/lvgl/lv_port_linux.git
cd lv_port_linux/
git submodule update --init --recursive
```

## Select graphics backend

To use legacy framebuffer (fbdev) support, adjust `lv_conf.h` as follows:
```
#define LV_USE_LINUX_FBDEV 1
#define LV_USE_LINUX_DRM 0
#define LV_USE_SDL 0
#define LV_USE_WAYLAND 0
```

To use modern DRM/KMS support, adjust `lv_conf.h` as follows:
```
#define LV_USE_LINUX_FBDEV 0
#define LV_USE_LINUX_DRM 1
#define LV_USE_SDL 0
#define LV_USE_WAYLAND 0
```

To use SDL2 support, adjust `lv_conf.h` as follows:
```
#define LV_USE_LINUX_FBDEV 0
#define LV_USE_LINUX_DRM 0
#define LV_USE_SDL 1
#define LV_USE_WAYLAND 0
```

To use wayland, adjust `lv_conf.h` as follows:
```
#define LV_USE_LINUX_FBDEV 0
#define LV_USE_LINUX_DRM 0
#define LV_USE_SDL 0
#define LV_USE_WAYLAND 1
```

### cmake

```
cmake -B build -S .
make -C build -j
```

### Makefile

```
make -j
```

## Command line options

Command line options are used to modify behavior of the demo, they take precedence over environment variables.

### Wayland

- `-f` - enters fullscreen on startup
- `-m` - maximizes window on startup
- `-w ` - set the width of the window
- `-h ` - set the height of the window

### SDL2

- `-w ` - set the width of the window
- `-h ` - set the height of the window

## Environment variables

Environment variables can be set to modify the behavior of the demo.

### Legacy framebuffer (fbdev)

- `LV_LINUX_FBDEV_DEVICE` - override default (`/dev/fb0`) framebuffer device node.

### EVDEV touchscreen/mouse pointer device

- `LV_LINUX_EVDEV_POINTER_DEVICE` - override default (`/dev/input/by-id/my-mouse-or-touchscreen`) input device

### DRM/KMS

- `LV_LINUX_DRM_CARD` - override default (`/dev/dri/card0`) card.

### SDL2

- `LV_SIM_WINDOW_WIDTH` - width of SDL2 surface (default `800`).
- `LV_SIM_WINDOW_HEIGHT` - height of SDL2 surface (default `480`).

### Wayland

- `LV_SIM_WINDOW_WIDTH` - width of the window (default `800`).
- `LV_SIM_WINDOW_HEIGHT` - height of the window (default `480`).

## Run the demo application

### FBDEV

Unpriviledged users don't have access to the framebuffer device `/dev/fb0`
`sudo` or `su` must be used.

cmake:
```
sudo ./bin/lvglsim
```

Makefile:
```
cd build/bin/
sudo main
```

Access to the framebuffer device can be granted by adding the unpriviledged user to the `video` group

cmake:
```
sudo adduser $USER video
newgrp video
./bin/lvglsim
```