記事ディレクトリ
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