ubantu环境编译micropython(lvgl for esp32s3)固件
分三个部分:
一.编译micropython esp32相应内存配置固件。
二.编译lv_micropython的esp32默认固件。
三.编译esp32s3的lv_micropython相应内存配置固件。
首先,下载安装VMware虚拟机,自行安装。
然后选择最新版本的ubantu进行虚拟系统安装。

安装完成后(推荐安装英文),我们进入第一部分:
一、编译micropython。
1.打开HOME文件夹,新建一个esp文件。

2.打开自带浏览器,输入www.github.com,搜索micropython。

3.点击第一个进入。

4.网页往下翻,是有简易的英文教程的。

进入那个ports的支文件中,继续打开esp32,下方还有具体教程:

5.在esp32目录下的教程是先下载esp-idf,进行esp32编译环境的建立。

6.打开自己建立的esp文件中的终端,准备下载esp-idf。

7.复制esp-idf地址,准备按教程下载。

8.粘贴复制,是一个clone分支,回车键确认下载。
git clone -b v4.0.2 --recursive https://github.com/espressif/esp-idf.git
网络不好的话,下载成v4.2要块很多,网络非常好就直接下载v4.4
例如 :
git clone -b v4.2 --recursive https://github.com/espressif/esp-idf.git
(因为此时下载版本为v4.0/4.2,由于网络原因,会出现文件下载不全,各种false,但是不用管,我们会在下一步处理)

9.打开下载的文件夹,刚才的终端中输入:
cd esp-idf
再输入:
git checkout v4.4
这里是检查文件内容是否更新到v4.4版本(因为是git clone,clone的文件会储存下载的地址)
再输入:
git submodule update --init --recursive
这里会将这个clone的文件夹里的所有子项目全部更新下载一遍(记住,这里一定要把所有文件全部下载,一个false都不能有)。
9.这里只需要一次又一次调用git submodule update --init --recursive就行,直到调用后没有任何clone就算是下载完成。(主要还是网络原因)
10.下载完成后,然后调用这个执行文件进行安装:
./install.sh
(安装只需要进行第一次就行)一般安装结果会提醒你没有python,实际上是有python3,终端中输入python无响应,输入python3就有响应,处理办法是将python给映射到python3,不然很多地方都要给你报这个问题,然后pip3 也要更新到最新版本,终端安装python3.10输入:
sudo apt-get install python 3.10
删除原有python链接(python有可能链接到python2.0,总之每个人问题可能不一样),输入:
sudo rm /usr/bin/python
建立新链接:
ln -s /usr/bin/python3 /usr/bin/python
测试链接是否成功:
python --version
安装pip3,终端输入:
sudo apt-get install python3-pip
升级pip3,输入:
python3 -m pip install --update pip
11.将python和pip解决后再重新安装esp-idf,就不会有其他出错了。记住只需要成功安装一次就行。安装输入:
./install.sh
12.用sourse执行这个程序,效果就是打开esp-idf的编译环境,而且打开后只能在这个shell中才能编译,终端输入:
source export.sh
终端会生成一个idf_shell,这个shell可以先不关,也可以关掉之后重新在esp-idf文件夹中打开终端输入source export.sh重新进入一个编译环境。
13.下载microPython,先复制下载地址。

14.在esp文件的终端中下载microPython。
git clone https://github.com/micropython/micropython.git


15.下载完成后,返回网页microPython/ports/esp32下的教程:

在终端中输入:
cd ~/esp/micropython
进入microPython目录,并准备开始预编译microPython所需的一些文件,终端输入:
make -C mpy-cross
打开esp32芯片的文件夹中(microPython支持了多种芯片),输入:
cd ports/esp32(前提是开启了esp-idf编译环境)
这里需要用到esp-idf的编译环境,所以一般是从打开了esp-idf的终端进行切换目录
先cd ~/esp/esp-idf
然后source export.sh开启编译环境
再是cd ~/esp/micropython/ports/esp32进入目录下执行:
make submodules
然后开始编译制作esp32固件所需要的一些模块。
16.接下来就是制作默认的esp32固件,可以在modules中加入想加的py文件(会给你编译成固件存在)(记住只能是py文件,如果是自己写的c文件以及对于的py接口,需要利用lv_binding_micropython的一些工具)终端中继续输入:
make
然后在~/esp/micropython/ports/biuld_GENERIC这个文件中找到一个firmware.bin的固件,把这个上传到自己的百度云就可以自行下载了(ubantu中进行VMtool文件传输很麻烦,只能鼠标右键复制粘贴一些东西,不能直接拖拽的)
17.如果是其他需求的开发板,比如s3,就输入:
make BOARD=GENERIC_S3
就可以制作,对应的型号就是~/esp/micropython/ports/esp32/boards文件中哪个板子的名字,复制过来就行,然后s3系列涉及到psram和外置大一点的flash,这里如果有psram(也是spiram),直接使用这个GENERIC_S3_SPIRAM_OCT,用的8进制(另外一个GENERIC_S3_SPIRAM能编译成功,但是烧录进板子会一直报错,说你硬件是没有SPIRAM,但是软件开启这个选项,搜索了一下,发现param是用的8进制,也就是OCT)
18.然后记得要更改这个BOARD文件下的sdkconfig.board里面flash的大小,默认是8M,如果没更改,你本来是16M,烧录好以后,会发现进入microPython中,采用esp函数进行查看flash大小会显示8M,相当于只使用了8M,而不是厂家给你的板子大小不对,有疑惑,可以直接win安装一个esp-idf,使用esptool.py flash_id这些函数直接查看最底层最真实的flash大小)
比如我这个板子就是16M,把y写在对应位置就行,上面有一个开机检查SPIRAM的选项,写上y会每次开机先检查一遍SPIRAM是否存在(我查到某个文档说是会大约花费0.5s),然后再进入microPython这些主函数。(默认是关闭就可以了)

第二部分:
进行lvgl_micropython的固件编译:
1.网址https://github.com/lvgl
打开lv_micropython(直接输网址https://github.com/lvgl/lv_micropython也行)

2.下载lv_micropython,打开esp文件夹,打开终端,输入:
git clone https://github.com/lvgl/lv_micropython.git

3.终端中打开下载的文件夹:
cd lv_micropython
更新所需要的模块,记住必须要使用Git更新,不能自行找到对应文件再下载进去,否则编译会提示文件没有链接(具体不清楚),终端中输入:
git submodule update --init --recursive lib/lv_bindings
(就算网络不好,也不用换国内源这些下载,多执行上面这个代码几遍,直到全部clone成功,再执行上述代码没有clone就OK了)
然后开始预编译lv_micropython,终端输入:
make -C mpy-cross

4.打开网页中文件的ports/esp32 里面会有这个板子的进一步教程,也可以跟着我继续:
5.首先需要esp-idf的编译环境:打开esp-idf所在的文件夹,空白地方点击鼠标右键选择进入终端,输入:
source export.sh
执行后进入esp-idf的编译环境,然后切换目录:
cd ~/esp/lv_micropython/ports/esp32
在这个目录下,我们可以编译了,但我们需要先把lvgl的一些参数设置了,先调整最基础的
打开文件lv_micropython/lib/lv_bindings下的lv_conf.h

6.将颜色深度从默认32改成我们需要16,当然也可以改成你所需要的,其余的配置根据你的要求自行阅读修改,然后保存。

7.现在切换成我们的编译终端来,并且终端处于esp32目录:
cd ~/esp/lv_micropython/ports/esp32
进行所需模块的安装下载,终端输入:
make submodules
(这里我发现是下载一个叫berkeley-db-1.xx这个的文件,记得这里得自行clone,千万别自己找文件去复制进去,是不行的,会报错,我试过了)(并且这个文件/软件的作用就是去更改链接microPython中的c文件和py接口,包括GC,lvgl作者将lvgl的gc与microPython自带的gc给合并了,也是通过这个软件去修改的)
然后就是终端执行:
make
目前官方给的lv_micropython只支持esp32板子不支持其他s2/s3等等,原因是其他系列的芯片的esp-idf底层重写了接口,lvgl作者也发起了协作,希望大家可以一起完善其他esp32系列的板子(同时还兼任原本的esp32)
第三部分:
但是针对s3系列,在评论中,发现有一个作者修改了lvgl的底层c接口,满足了新的底层接口,可以实现lv_micropython的s3的编译,但是需要将c文件进行替换,只能手动,只是稍微麻烦了一丢丢,来看看是怎么做的:
1.下载针对esp32s3的lv_binding_micropython模块(lv_binding_micropython是lv_micropython其中的一个子模块,只关乎lvgl的代码和接口),打开esp文件夹,鼠标右键打开终端,网址是https://github.com/imliubo/lv_binding_micropython/tree/dev_esp32_s3,下载作者的clone分支,esp文件终端输入
git clone -b dev_esp32_s3 https://github.com/imliubo/lv_binding_micropython.git
2.然后打开lv_binding_micropython/driver/esp32文件夹,将里面的全部文件复制,粘贴到
lv_micropython/lib/lv_bindings/driver/esp32文件下,统统覆盖掉原文件(虽然实际上只是更改几个c文件,但是为了大家方便,直接全换)
3.然后剩下步骤跟之前编译lv_micropython一样。
4.额外注意一点,lv_micropython/ports/esp32/boards中没有GENERIC_S3_SPIRAM_OCT这个板子,直接将microPython相应文件夹中GENERIC_S3_SPIRAM_OCT和sdkconfig.spiram_oct这两个文件给复制过去就可以了,flash内存配置也记得要更改哦。
5.然后esp32s3系列的板子,lv_micropython编译出来,程序文件超过了1M,原本的内存配置文件只给了1M的内存,所以编译到最后会报错,提示内存分配不够,我选用的是外挂flash16M,所以打开lv_micropython/ports/esp32中的partitions-8MiB.csv,更改第三个factory,从0X010000 到0X210000,第四个改从0X220000开始,大小基本上刚好够,然后就可以编译成功,当然lvgl的参数该调也得调整哦。


6.最后一步,终端继续输入:
make BOARD=GENERIC_S3_SPIRAM_OCT
然后找到固件上传云就可以下载了
记得每次搞定完 在esp-idf编译环境中clean一下,以便下次使用不出错,并且腾出虚拟机内存,终端输入:
make BOARD=GENERIC_S3_SPIRAM_OCT clean
感谢大家的浏览,有什么不清楚,还可以下方留言,记得三连!