天天看点

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

作者:代码碎片

一、编译环境:Ubuntu 16.04.7 LTS(如下我本机ubuntu虚拟机)

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

二、安装依赖库

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

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

三、搭建交叉编译链环境:

1、V1109平台开发板对应交叉编译工具为:gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz

下载地址:http://mirrors.aliyun.com/armbian-releases/_toolchain/

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

2、下载完成将文件到自己指定的目录下

解压,命令:tar xvJf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

3、解压完成后,设置交叉编译环境 命令:vi /etc/profile

添加环境变量:export PATH=$PATH:/opt/cross-tools/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

4、重启设备:reboot

5、检查交叉编译器是否已安装:

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

四、编译依赖库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

  1. make成功后生成arm-unknown-linux-gnueabihf文件夹
lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

五、lv_micropython下载与配置:

1、lv_micropython下载

mkdir project

cd project

git clone https://gitee.com/l_y_r/lv_micropython.git

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

2、更新子模组

cd lv_micropython

git submodule update --init

cd lib/lv_bindings/

git submodule update --init

(执行过程可能会失败,则一直执行至更新成功)

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)
  1. 增加板级目录-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)

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

修改文件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"

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)
  1. 取消SDL编译(板子上都是纯linux, 无桌面GUI,故取消):

cd lv_micropython

cd ports\unix

编辑文件(SDL报错):vi ports/unix/mpconfigport.h,搜索MICROPY_PY_LVGL_SDL,并将该宏定义配置为0

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

编辑文件(SDLB报错):vi ports/unix/Makefile文件,搜索 -lSDL2 并用#注释掉

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

搜索SDL_monitor.c所在位置,删除以下3行代码

lv_bindings/driver/SDL/sdl_common.c \

lv_bindings/driver/SDL/sdl.c \

lv_bindings/driver/SDL/modSDL.c \

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

编辑文件(.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交叉编译(x86-Ubuntu至arm-rv1109)

六、编译lv_micropython固件:

1、编编译mpy-cross工具

cd lv_micropython

make -C mpy-cross

  1. 编译unix端口的mpy

make -C ports/unix clean

make -C ports/unix VARIANT=rv1109

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)

编译成功后会在lv_mivropython/ports/unix目录下生成mivropython_lvgl文件

lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)
  1. 测试
  2. 将编译的固件放到rv1109开发板,给予执行权限:chmod 777 micropython-lvgl
  3. 执行./micropython-lvgl查看micropython版本
  4. 交互模式执行help("modules")查看支持模块
lv_micropython交叉编译(x86-Ubuntu至arm-rv1109)