我现在已经编译好了LittlevGL的bin, 我参考pack_tf_img.sh这个脚本,里面有以下语句
if [ $_ADD_LITTLEVGL_DEMO = true ]
echo_tip "we gonna add littleVgl demo in your dir /root"
then sudo mkdir -p p2/root/littlevgl_demo &&\
sudo cp $_TOP_DIR/littlevgl_demo/$_SCREEN_PRAM/* p2/root/littlevgl_demo/
我就在我的脚本里加了
#LittlevGL
mkdir -p rootfs/root/littlevgl_demo 我加的
cp -r $LITTLEVGL_BIN rootfs/root/littlevgl_demo我加的
mkfs.jffs2 -s 0x100 -e 0x10000 --pad=0xAF0000 -o jffs2.img -d rootfs/ 以下是文档里的语句,
dd if=jffs2.img of=$OUT_FILENAME bs=1k seek=5184 conv=notrunc
我也将编译好的demo的可执行文件放到了root/littlevgl_demo 文件夹下, 之后打包成spi的flashimage,下载到板子上, 之后也没有什么界面出来, 还是跟没一直littlevgl以前一样,只是控制台界面, 我是哪里少加了什么吧?是不是linux启动后要自动运行littlevgl的demo可执行文件? 我尝试过在控制台下运行那个demo可执行文件(./demo), 提示我./demo: line 1: syntax error: unexpected ")"
离线
1. 首先用 crc32或者md5工具看下文件是否相同, 与电脑上的文件对比是否一致.
2. 如果一致, 用静态链接, gcc 的参数是 -static
3. 如果用静态链接没有问题, 那是你的rootfs里面的c库和littlevgl的c库不一致, 用同一个工具链编译即可。
离线
感谢! 真有可能是工具链的问题,但我还没试成功
buildroot的工具链 我就用默认的,没动, 之后我在buildroot下找到了它下载的arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2压缩包, 之后我解压,有个arm-2014.05文件夹,内部有arm-none-linux-gnueabi和 bin 等文件夹
之后我就到littlevgl中将Makefile修改如下
CC ?= /home/steven/dev/arm-2014.05/arm-none-linux-gnueabi-gcc
也能编译过, 但最后下载到板子上, 执行./demo 还是报同样的错 line 1: syntax error: unexpected ")".
我感觉我还是哪里不对, 是不是buildroot中也要配置外部工具链? 也就是arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2这个,我尝试改了,但是编译buildroot老是提示Cannot execute cross-compiler
1. 首先用 crc32或者md5工具看下文件是否相同, 与电脑上的文件对比是否一致.
2. 如果一致, 用静态链接, gcc 的参数是 -static
3. 如果用静态链接没有问题, 那是你的rootfs里面的c库和littlevgl的c库不一致, 用同一个工具链编译即可。
离线
先不用管其他的, 你使用 buildroot 的 output/host/bin/arm-linux-gcc 编译 lvgl 就可以了。
离线
在试, 一会回你
先不用管其他的, 你使用 buildroot 的 output/host/bin/arm-linux-gcc 编译 lvgl 就可以了。
离线
还是报同样的错./demo: line 1: syntax error: unexpected ")"
littlevgl 的makfile中CC ?= /home/steven/develop/buildroot-2017.08/output/host/bin/arm-linux-gcc
buildroot中toolclain type-->buildroot toolchain 默认的链接器
在试, 一会回你
awfans 说:先不用管其他的, 你使用 buildroot 的 output/host/bin/arm-linux-gcc 编译 lvgl 就可以了。
离线
不能去, 一旦去掉就编译报错了, 就找不到SDL头文件
/home/steven/develop/LittlevGL/pc_simulator/lv_drivers/display/monitor.c:19:34: fatal error: SDL2/SDL.h: No such file or directory
#include MONITOR_SDL_INCLUDE_PATH
^
compilation terminated.
把 CC 后面的问好去掉试一试
离线
这样啊?我再试试, 我有些没理解, 我先在去掉问号,是编译LittlevGL出错, 那我应该去buildroot下的menuconfig把sdl2功能开启吗?还是要到LittlevGL中去找找如何用fb? 我小白,刚接触这个
离线
我现在改了如下几个地方
littlegl:
Makefile中CC = /home/steven/develop/buildroot-2017.08/output/host/bin/arm-linux-gcc(问号去掉了,报sdl.h找不到,我在想办法改)
#define USE_FBDEV 1
# define USE_EVDEV 1
main中添加(按文档添加的)
/* 添加 fb 支持 */
#include "lv_drivers/display/fbdev.h"
#include "lv_drivers/indev/evdev.h"
/*Linux frame buffer device init*/
fbdev_init();
/*Add a display the LittlevGL sing the frame buffer driver*/
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.disp_flush = fbdev_flush; /*It flushes the internal graphical buffer to the frame buffer*/
lv_disp_drv_register(&disp_drv);
这个目前报错,main.c:78:13: error: ‘lv_disp_drv_t {aka struct _disp_drv_t}’ has no member named ‘disp_flush’
buildroot:
我正在看看哪里加SDL的支持
当然会报错了,你的buildroot 很可能没有开启SDL2,而且嵌入式下面一般用fb,而不是SDL
最近编辑记录 shiqx429 (2019-09-09 17:55:46)
离线
离线
好的,感谢二位,我再多看看,谢谢了
离线
状况更新一下:
1.buildroot中 要将SDL2加上
2.CC?= 要将?去掉(不去可能也没事,后续再确认)
3.disp_drv.disp_flush = fbdev_flush; 改为disp_drv.flush_cb = fbdev_flush; 官方release6.0说改了
目前启动之后
# ./demo
The framebuffer device was opened successfully.
800x480, 32bpp
The framebuffer device was mapped to memory successfully.
Segmentation fault
暂时还没启动起来,我再看看
离线
如果改 fb 了, 为什么还用 SDL2 呢?
离线
更新:
Segmentation fault问题已经找到 就是按照awfans提到的那样, 直接用那里的main.c就好
目前图形界面已经显示出来了, 就是无法触控
看论坛帖子上好像说要把USE_LIBINPUT使能, 我正看如何在buildroot中把libinput功能加进来
离线
也可以用 USE_EVDEV=1 吧, libinput 是不是把 ev又封装了一遍?
离线
USE_EVDEV我已经设置过了,就是触控无效我才去找置顶的帖子,那里有说"littlegv :在官方的framebuffer demo基础上添加了libinput设备的初始化,就可以用触屏了。",我也不确定呢,在试!
也可以用 USE_EVDEV=1 吧, libinput 是不是把 ev又封装了一遍?
离线
USE_EVDEV我已经设置过了,就是触控无效我才去找置顶的帖子,那里有说"littlegv :在官方的framebuffer demo基础上添加了libinput设备的初始化,就可以用触屏了。",我也不确定呢,在试!
qter 说:也可以用 USE_EVDEV=1 吧, libinput 是不是把 ev又封装了一遍?
用evdev就可以,可以看我项目里的这个提交
https://github.com/summershrimp/opendeck-gui/commit/f16c256390c36c5360f5efb919942c9960aef1eb
离线
楼上厉害, 感谢分享!
离线
我看过了,如果确实不用libinput的话, 那就是我之前一版那种情况,但是触控不行, 就是触控无效我才去想开启libinput
下面是我的设置,这个是显示都正常,就是无法触控
Makefile文件
LVGL_DIR ?= ${shell pwd}
CFLAGS ?= -Wall -Wshadow -Wundef -Wmaybe-uninitialized -O3 -g0 -I$(LVGL_DIR)/
LDFLAGS ?= -lSDL2 -lm
BIN = demo
lv_drv_conf.h文件
/*-----------------------------------------
* Linux frame buffer device (/dev/fbx)
*-----------------------------------------*/
#ifndef USE_FBDEV
# define USE_FBDEV 1
#endif
#if USE_FBDEV
# define FBDEV_PATH "/dev/fb0"
#endif
/*-------------------------------------------------
* Touchscreen as libinput interface (for Linux based systems)
*------------------------------------------------*/
#ifndef USE_LIBINPUT
# define USE_LIBINPUT 0
#endif
#if USE_LIBINPUT
# define LIBINPUT_NAME "/dev/input/event0" /*You can use the "evtest" Linux tool to get the list of devices and test them*/
#endif /*USE_LIBINPUT*/
/*-------------------------------------------------
* Mouse or touchpad as evdev interface (for Linux based systems)
*------------------------------------------------*/
#ifndef USE_EVDEV
# define USE_EVDEV 1
#endif
main.c 文件添加
#include "lv_drivers/indev/evdev.h"
lv_indev_drv_t indev_drv;
lv_indev_drv_init(&indev_drv); /*Basic initialization*/
evdev_init();
indev_drv.type = LV_INDEV_TYPE_POINTER; /*See below.*/
indev_drv.read_cb = evdev_read; /*See below.*/
lv_indev_drv_register(&indev_drv);
shiqx429 说:USE_EVDEV我已经设置过了,就是触控无效我才去找置顶的帖子,那里有说"littlegv :在官方的framebuffer demo基础上添加了libinput设备的初始化,就可以用触屏了。",我也不确定呢,在试!
qter 说:也可以用 USE_EVDEV=1 吧, libinput 是不是把 ev又封装了一遍?
用evdev就可以,可以看我项目里的这个提交
https://github.com/summershrimp/opendeck-gui/commit/f16c256390c36c5360f5efb919942c9960aef1eb
离线
用 evtest/ts_calibrate/ts_test 先测试一下触摸是否正常吧
离线
我正在看这块,正在尝试在buildroot添加tslib, 我现在buildroot是尽量要小, 知道怎么在buildroot中加tslib么, 这里需要先添加QT5, 但是我menuconfig中提示*** Qt5 needs a toolchain w/ wchar, NPTL, C++, dynamic library *** , 要添加很多依赖,我现在还在看都要添加哪些
用 evtest/ts_calibrate/ts_test 先测试一下触摸是否正常吧
离线
不用先添加 Qt5, 只要 -> Target packages -> Libraries -> Hardware handling -> tslib
Symbol: BR2_PACKAGE_TSLIB [=y] │
│ Type : bool │
│ Prompt: tslib │
│ Location: │
│ -> Target packages │
│ -> Libraries │
│ (4) -> Hardware handling
此人很懒,没有签名!
离线
加上了,非常感谢, 目前报错提示selected device is not a touchscreen, 网上也有人说这个问题,我在找资料看看
不用先添加 Qt5, 只要 -> Target packages -> Libraries -> Hardware handling -> tslib
Symbol: BR2_PACKAGE_TSLIB [=y] │ │ Type : bool │ │ Prompt: tslib │ │ Location: │ │ -> Target packages │ │ -> Libraries │ │ (4) -> Hardware handling
离线
@shiqx429 https://whycan.cn/t_2717.html#p21836
离线
谢谢,我的问题跟他不一样 我的是tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
可能是kernel那边触摸屏驱动没加,再试
tslib: Selected device is not a touchscreen (must support ABS and KEY event types)
两种情况:一种内核未加入触摸屏的支持,另一种情况是将TSLIB_TSDEVICE=/dev/input/eventN,改为 TSLIB_TSDEVICE=/dev/input/eventX
@shiqx429 https://whycan.cn/t_2717.html#p21836
最近编辑记录 shiqx429 (2019-09-11 10:45:40)
离线