一、编译环境:Ubuntu 16.04.7 LTS(如下我本机ubuntu虚拟机)
二、安装依赖库
sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial ssh
sudo apt-get install libsdl2-dev
sudo apt-get install libsdl1.2-dev
三、搭建交叉编译链环境:
1、V1109平台开发板对应交叉编译工具为:gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
下载地址:http://mirrors.aliyun.com/armbian-releases/_toolchain/
2、下载完成将文件到自己指定的目录下
解压,命令:tar xvJf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
3、解压完成后,设置交叉编译环境 命令:vi /etc/profile
添加环境变量:export PATH=$PATH:/opt/cross-tools/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin
4、重启设备:reboot
5、检查交叉编译器是否已安装:
四、编译依赖库libffi
1、下载libffi:wget ftp://sourceware.org/pub/libffi/libffi-3.0.13.tar.gz
2、解压:tar libffi-3.0.13.tar.gz
3、编译arm版libffi库
cd libffi-3.0.13/
./configure --host=arm-linux-gnueabihf
make
- make成功后生成arm-unknown-linux-gnueabihf文件夹
五、lv_micropython下载与配置:
1、lv_micropython下载
mkdir project
cd project
git clone https://gitee.com/l_y_r/lv_micropython.git
2、更新子模组
cd lv_micropython
git submodule update --init
cd lib/lv_bindings/
git submodule update --init
(执行过程可能会失败,则一直执行至更新成功)
- 增加板级目录-rv1109及配置
mkdir -p ports/unix/variants/rv1109
cp ports/unix/variants/standard/mpconfigvariant.h ports/unix/variants/rv1109
cp ports/unix/variants/standard/mpconfigvariant.mk ports/unix/variants/rv1109
修改文件vi ports/unix/variants/rv1109/mpconfigvariant.h,增加如下内容:
#define MICROPY_PY_BUILTINS_MEMORYVIEW_ITEMSIZE (1)
#define MICROPY_PY_BUILTINS_NEXT2 (1)
#define MICROPY_PY_BUILTINS_RANGE_BINOP (1)
#define MICROPY_PY_BUILTINS_HELP (1)
#define MICROPY_PY_BUILTINS_HELP_MODULES (1)
修改文件vi ports/unix/variants/rv1109/mpconfigvariant.mk,增加如下内容:
# 设置编译出的固件位置与名称,默认在unix目录下
PROG ?= micropython-lvgl
# 设置交叉编译工具链,可以使用绝对路径
CROSS_COMPILE = arm-linux-gnueabihf-
# 引用libffi库
INC += -I/opt/cross-libs/libffi-3.0.13/arm-unknown-linux-gnueabihf/include
LDFLAGS += -L/opt/cross-libs/libffi-3.0.13/arm-unknown-linux-gnueabihf/.libs -lffi
# 引用SDL库,板子linux无SDL支持,这里不启用
#INC += -I/home/lyr/work/t31_lib/SDL2/include
#LDFLAGS += -L/home/lyr/work/t31_lib/SDL2/lib
# 我的板子屏幕是16位色深的这里需要标明,32或24色深则无需配置该项
#LV_CFLAGS="-DLV_COLOR_DEPTH=16"
- 取消SDL编译(板子上都是纯linux, 无桌面GUI,故取消):
cd lv_micropython
cd ports\unix
编辑文件(SDL报错):vi ports/unix/mpconfigport.h,搜索MICROPY_PY_LVGL_SDL,并将该宏定义配置为0
编辑文件(SDLB报错):vi ports/unix/Makefile文件,搜索 -lSDL2 并用#注释掉
搜索SDL_monitor.c所在位置,删除以下3行代码
lv_bindings/driver/SDL/sdl_common.c \
lv_bindings/driver/SDL/sdl.c \
lv_bindings/driver/SDL/modSDL.c \
编辑文件(.o报错):vi ports/unix/variants/manifest.py,修改如下内容
# manifest.py
freeze_as_mpy('$(MPY_DIR)/tools', 'upip.py')
freeze_as_mpy('$(MPY_DIR)/tools', 'upip_utarfile.py', opt=3)
freeze('$(MPY_DIR)/lib/lv_bindings/driver/linux', 'evdev.py')
freeze('$(MPY_DIR)/lib/lv_bindings/lib', 'lv_colors.py')
include("$(MPY_DIR)/extmod/uasyncio/manifest.py") # async_utils.py depend on this
# freeze('$(MPY_DIR)/lib/lv_bindings/lib', 'async_utils.py')
# freeze('$(MPY_DIR)/lib/lv_bindings/lib', 'display_driver_utils.py')
# freeze('$(MPY_DIR)/lib/lv_bindings/lib', 'imagetools.py') # enable this will report error
freeze('$(MPY_DIR)/lib/lv_bindings/lib', 'fs_driver.py')
六、编译lv_micropython固件:
1、编编译mpy-cross工具
cd lv_micropython
make -C mpy-cross
- 编译unix端口的mpy
make -C ports/unix clean
make -C ports/unix VARIANT=rv1109
编译成功后会在lv_mivropython/ports/unix目录下生成mivropython_lvgl文件
- 测试
- 将编译的固件放到rv1109开发板,给予执行权限:chmod 777 micropython-lvgl
- 执行./micropython-lvgl查看micropython版本
- 交互模式执行help("modules")查看支持模块