【RV1126】移植LVGL

1. Linux カーネル構成 Frambuffer ドライバー

RV1126 ファイル システムの下にデバイス ノードがありません/dev/fb0:
カーネルに入ります

cd kernel
make ARCH=arm rv1126_defconfig
make ARCH=arm menuconfig

設定を入力してください:

位置 1 を次のように変更します。
ここに画像の説明を挿入位置 2 を次のように変更します。

ここに画像の説明を挿入
次に、ファームウェアを再コンパイルして生成し、開発ボードに書き込みます。

make ARCH=arm savedefconfig // 将.config 保存为 deconfig
cp defconfig arch/arm/configs/rv1126_defconfig
cd ..
./build.sh kernel

2. LVGL移植

2.1 公式 Linux FB ルーチン

アドレス: https://github.com/lvgl/lv_port_linux_frame_buffer
git clone アドレス: https://github.com/lvgl/lv_port_linux_frame_buffer.git
公式ドキュメント: https://blog.lvgl.io/2018-01-03/linux_fb

独自のネットワークが利用可能な場合は、git を使用して直接クローンを作成できます。

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

それ以外の場合は、以下のようにファイルを 1 つずつダウンロードしてから、解凍します。

プロジェクト ファイルをダウンロードします。ダウンロード後、lv_drivers フォルダーと lvgl フォルダーは空なので、個別にダウンロードする必要があります。次に、対応する 2 つのフォルダーに解凍します。

ここに画像の説明を挿入

lv_drivers と lvgl の 2 つのファイルを個別にダウンロードします。

ここに画像の説明を挿入
2 つのファイルをダウンロードしたら、プロジェクトの対応するフォルダーに解凍します。

ここに画像の説明を挿入
lv_port_linux_frame_buffer フォルダーに入り、このディレクトリ内の Makefile ファイルを変更します。

  • ファイル内のすべての大文字をCC小文字に変更しますcc
  • gccに変更されますarm-linux-gnueabihf-gcc(もちろん、独自のクロスコンパイル環境が必要です!)
#
# Makefile
#
cc ?= arm-linux-gnueabihf-gcc
LVGL_DIR_NAME ?= lvgl
LVGL_DIR ?= ${shell pwd}
CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmissing-prototypes -Wno-discarded-qualifiers -Wall -Wextra -Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=2048 -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wmissing-prototypes -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wno-discarded-qualifiers -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare -std=c99
LDFLAGS ?= -lm
BIN = demo

prefix ?= /usr
bindir ?= $(prefix)/bin

#Collect the files to compile
MAINSRC = ./main.c

include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mk

CSRCS +=$(LVGL_DIR)/mouse_cursor_icon.c 

OBJEXT ?= .o

AOBJS = $(ASRCS:.S=$(OBJEXT))
COBJS = $(CSRCS:.c=$(OBJEXT))

MAINOBJ = $(MAINSRC:.c=$(OBJEXT))

SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
OBJS = $(AOBJS) $(COBJS)

## MAINOBJ -> OBJFILES

all: default

%.o: %.c
	@$(cc)  $(CFLAGS) -c $< -o $@
	@echo "cc $<"
    
default: $(AOBJS) $(COBJS) $(MAINOBJ)
	$(cc) -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS)

clean: 
	rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)

install:
	install -d $(DESTDIR)$(bindir)
	install $(BIN) $(DESTDIR)$(bindir)

uninstall:
	$(RM) -r $(addprefix $(DESTDIR)$(bindir)/,$(BIN))

次に、make現在のディレクトリを調べます。デモの実行可能ファイルが表示されます。デモ ファイルの種類を確認してください。

liefyuan@ubuntu:/home/nfs/lv_port_linux_frame_buffer$ file demo
demo: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, with debug_info, not stripped

OK、これは 32 ビット ARM アーキテクチャ用の実行可能ファイルです。

開発ボードにコピーして実行します。

2.2 lv_conf.h パラメータの変更

以下のように、ディレクトリ内に lv_conf.h ファイルがあり、このファイルを変更することで多くの機能を実現できます。

liefyuan@ubuntu:/home/nfs/lv_port_linux_frame_buffer$ ls
CMakeLists.txt  lv_conf.h   lv_drv_conf.h  main.c    mouse_cursor_icon.c
LICENSE         lv_drivers  lvgl           Makefile  README.md

lvgl では、テンプレート構成を使用してコピーし、わずかに変更します。
lvgl テンプレートをコピーし、
cp lvgl/lv_conf_template.h ./lv_conf.h lv_conf.h の if 0 を if 1 に変更します。

最新のコードでは、画面の表示サイズはグローバル マクロではなく、アプリケーションでのパラメーター割り当てです。

/*Initialize and register a display driver*/
static lv_disp_drv_t disp_drv;
    lv_disp_drv_init(&disp_drv);
    disp_drv.draw_buf   = &disp_buf;
    disp_drv.flush_cb   = fbdev_flush;
    disp_drv.hor_res    = 1024;
    disp_drv.ver_res    = 600;
    lv_disp_drv_register(&disp_drv);

構成する必要がある最も重要なことは、検索および構成できる次の項目です。
これらのいくつかは、ボードの実際の状況に応じて変更する必要があります。

  • #define LV_COLOR_DEPTH 32//LCD 画面のピクセル深度。通常、rgb565 または rgb8888 である可能性があります。32 を書き込み、実際の使用に応じて変更してください。

  • #define LV_USE_GPU 1//これを 0 に設定することを忘れないでください。一般的なボードには GPU があってはなりません

  • #define LV_USE_PERF_MONITOR 0//右下隅に出力されるCPU情報。テストを開いて確認できます

  • # define LV_MEM_SIZE (32U * 1024U)//ここでのデフォルトは、lvgl の動的メモリ割り当ての 32K です。実際の状況に応じて変更できますが、2KB 以上である必要があります

  • #define LV_DISP_DEF_REFR_PERIOD 30// 30 ミリ秒のリフレッシュ間隔はリフレッシュ レートの問題です。パフォーマンス設定を参照してください。

  • #define LV_INDEV_DEF_READ_PERIOD 30//入力デバイスのスキャン時間は、キーをポーリングする時間です。デフォルトは 30ms です。

  • #define LV_USE_FILESYSTEM 1//ファイルシステムを使用しない場合は 0 に設定できます

  • #define LV_USE_DEBUG 1//デバッグ情報の出力を閉じることができます

2.3 lv_drv_conf パラメータの変更

以下のように、ディレクトリ内に lv_drv_conf.h ファイルがあり、このファイルを変更することで多くの機能を実現できます。

liefyuan@ubuntu:/home/nfs/lv_port_linux_frame_buffer$ ls
CMakeLists.txt  lv_conf.h   lv_drv_conf.h  main.c    mouse_cursor_icon.c
LICENSE         lv_drivers  lvgl           Makefile  README.md

ドライバの修正、フレームバッファのサポート

  • # define USE_FBDEV 0// これを 1 に設定します
  • # define FBDEV_PATH "/dev/fb0"//自分の端末のfbか確認
/*-----------------------------------------
 *  Linux frame buffer device (/dev/fbx)
 *-----------------------------------------*/
#ifndef USE_FBDEV
#  define USE_FBDEV           1
#endif

#if USE_FBDEV
#  define FBDEV_PATH          "/dev/fb0"
#endif

タッチアンドクリック設定

  • # define USE_EVDEV 0これを 1 に設定します
  • # define EVDEV_NAME "/dev/input/event0"//これは、イベントの数を確認するための入力デバイスです。
/*-------------------------------------------------
 * Mouse or touchpad as evdev interface (for Linux based systems)
 *------------------------------------------------*/
#ifndef USE_EVDEV
#  define USE_EVDEV           1
#endif

#ifndef USE_BSD_EVDEV
#  define USE_BSD_EVDEV       0
#endif

#if USE_EVDEV || USE_BSD_EVDEV
#  define EVDEV_NAME   "/dev/input/event0"        /*You can use the "evtest" Linux tool to get the list of devices and test

おすすめ

転載: blog.csdn.net/qq_28877125/article/details/129603396