1 获取资料,
获取主仓库源码 git clone https://gitee.com/weidongshan/lv_100ask_linux_desktop.git
此时会在当前目录下,下载好一个 名字为 lv_100ask_linux_desktop 的文件夹, cd lv_100ask_linux_desktop
同步子仓库模块 git submodule update --init --recursive
到此代码库下载结束
后期如果更新代码库,则需要执行 git submodule update --remote
2 修改Makefile
在 lv_100ask_linux_desktop 下根据指示执行拷贝 dbus 相关内容,此处不同厂家的linux开发板不一样,天嵌开发板提供的SDK中所有的交叉编译文件和源码文件存放在
/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot
所以查找资料就需要从这里查找了
sudo find /opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/ -name *dbus*
根据查找结果,确认需要进入的目录,此处我的目录是
/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/usr/include
进入次目录后,然后根据100ask提供的指令进行复制
cp dbus-1.0/dbus/ -rfd .
然后执行数据同步指令 sync
最后添加如下,添加时候注意 \ 符号,
-I /opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/usr/include \
-I /opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/usr/lib/dbus-1.0/include
CFLAGS添加结束后,执行make 发现报错,
/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/7.4.1/../../../../aarch64-linux-gnu/bin/ld: cannot find -ldbus-1
百度后发现找不到对应的文件,另一种可能是,在 /lib 和 /usr/lib 这两个目录下都没有找到与之匹配的库,也可能存在了,但是不是交叉编译需要的函数,因此需要在编译时候就指定目录 ,此处我经过 find 查找,经过多次尝试最终确定在
/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/usr/lib
因此最终 Makefile 修改结果如下(注意不要自己私自添加LIBS,因为其他的app的编译目录中,只有LDFLAGS,若想修改,其他APP的Makefile也必须全部修改)
3 编译
编译时执行如下指令
make clean && make -j$(nproc) RUN_JOBS=-j$(nproc)
一般情况下可以直接执行,但是我这里报错如下
我在 /opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot 目录下进行搜索,发现如下目录有这个,于是简单的将以下两个目录添加到编译环境中,但是依然报错找不到
/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/usr/lib/
/opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/lib/
开始时候未怀疑 libpthread.so文件,为了找到原因,我开启100ask的编译环境,根据需要修改makefile,执行编译发现正常执行,于是我开始怀疑 libpthread.so
//100ask 编译时候需要的东西(注意不同板子,对应目录不一样)
-I ~/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/include \
-I ~/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include/dbus-1.0/include
cd ~/01_lvgl/lv_100ask_linux_desktop/
cd ~/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/include
make clean && make -j$(nproc) RUN_JOBS=-j$(nproc)
通过以下指令可以在指定文件夹下开始遍历 子目录和当前目录下所有文件,查找指定内容
//从当前目录下所有文件中搜索 libpthread.so.0
sudo grep -nr -i libpthread.so.0 *
在打开天嵌TQT编译环境下libpthread.so文件时发现,是个文本文件,如下,并且,此处目录已经指定了,结合之前,百度结果中有一条,编译后目录不能随意乱动,突然意识到,这个应该是交叉编译时候,可能没有设置好
为了解决这个问题,我突然想到,之前咨询厂家售后时候,了解到注意下检查下动态库是否有对应文件,检查软连接 我到对应 /lib /usr/lib 文件夹下未找到软连接,因此可以创建对应软连接如下
sudo ln -s /opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/usr/lib/* /usr/lib/
sudo ln -s /opt/EmbedSky/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/sysroot/lib/* /lib/
之后执行 以下指令 正常编译
make clean && make -j$(nproc) RUN_JOBS=-j$(nproc)
4 源码修订
在编译好,移植后,我发现报错
object_path: net.ask100.lvgl.Main, object_iface: /net/ask100/lvgl/Main
Segmentation fault
百度后,发现 Segmentation fault 是内存溢出错误,在添加打印点和多次尝试后,感觉官方提供的方案稍微有点不舒服,于是我进行以下小修改主要是修改main下的 lv_100ask_demo_init_icon(); 函数
目录如下 ./lv_100ask_modules/src/lv_100ask_demo_init_icon/
另一项修改是根据自己需要,在 lv_drv_conf.h 修改自己的触摸的设备事件号
查看所有设备信息 cat /proc/bus/input/devices
监听事件1的事件数据 cat /dev/input/event1 | hexdump
在main入口文件根据需要,修改屏幕分辨率, 根据需要在 lv_conf.h 修改LV_COLOR_DEPTH参数
修改完毕后,重新编译
5 移植
移植时,需要注意文件位置
推荐 文件放置在 /usr/share/100ask_desktop/ 目录下,因为 services 下默认指定是这个目录,创建这样的目录就不用修改 *.service 文件了
文件目录如下,注意
将 assets/icon下所有的文件复制出来,复制到 /usr/share/100ask_desktop/ 目录下,
将编译完毕的文件复制到 /usr/share/100ask_desktop/ 目录下,
将整个assets复制到 /usr/share/100ask_desktop/ 目录下
关于 dbus-1 服务的设置
为了找到这块开发板的 dbus-1 服务位置 执行指令 find / -name dbus-1
一个一个筛查,发现在 /usr/share/dbus-1/services/ 目录下
将 assets/services下的内容复制到此目录下
在板子 /usr/share/100ask_desktop/ 目录下,依次执行以下指令就可以运行起来了
export $(dbus-launch)
./100ask_lvgl_Main
、、