加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在Ubuntu用esp-idf编译micropython---(1)

(2019-03-27 14:48:35)
标签:

micropython

esp32

compile

make

error

分类: Ubuntu,Puppy,Mac,Centos,
   打算把写的micropython编进去bin里面。据说可以减少ram和flash的消耗,而且保护源码不被看到,但能不能防止copy。。这就不知道了。 不是觉得自己写的东西好,,而是,这是要卖钱的。

    先安装dependencies ,看参考资料0:
sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing

    然后下载ESP32的compiler
    wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
    解压缩到自己的home

    再来,下载esp-idf
   git clone --recursive https://github.com/espressif/esp-idf.git
   也是放在home

    把micropython 也git clone ,

    先改home底下的 .profile  加上以下两条
    export IDF_PATH=~/esp-idf
    export PATH="$PATH:~/xtensa-esp32-elf"

    这样就找的到 xtensa的gcc和esp-idf的编译目录了
    如果要在esp-idf编译他的example。那就先make menuconfig ,修改xtensa的目录。

    因为我们是要在micropython里面编译。。所以要改makefile。在之前clone 下来的micropython目录 ports/esp32 修改 Makefile 。如下:

    在 22行左右的 CROSS_COMPILE ?= ~/xtensa-esp32-elf/bin/xtensa-esp32-elf-
    然后看第30行的 ESPIDF_SUPHASH ,5c88c5xxxxxxx...micropython有特定的esp-idf版本,,这个要回到esp-idf 目录,然后git reset --hard 5c88c5 。。。如果不一致会怎样。。。会有些错误讯息。

    然后就可以make 了。

    make时出现了错误: no rule to make target xxxx xxxx 。 解决方式如下: (看参考资料3)
    在micropython目录,执行  git submodule update --init ,然后 make clean 再make

    然而,,,又出现错误了,如下:
GEN build/esp32.common.ld
LINK build/application.elf
   text    data     bss     dec     hex filename
 843420  214080   27868 1085368  108fb8 build/application.elf
Create build/application.bin
esptool.py v2.6

A fatal error occurred: Invalid segment count 25 (max 16). Usually this indicates a linker script problem.
Makefile:844: recipe for target 'build/application.bin' failed
make: *** [build/application.bin] Error 2

   这个搞不定,,进micropython的forum问问,,等高手回复

后来用git submodule update --init  , 没用。 再git submodule update ,,然后再make。。竟然可以了。这次是在阿里云的Ubuntu 18.04 ..但是在笔记本的mint,去make还是一样的错误。比对两者的esp-idf 和micropython的commit hash,是不一样的。把mint上的commit也改成跟ubuntu 18.04一样。还是编译错误。比对 submodule的commit hash。。发现不一样。。。而且在大陆git clone,,,那是宇宙无敌慢

  不知道怎么改submodule的commit。。。所以重新git clone一次esp-idf试试

P.S. 后来发现,原来我有两个esp-idf 的clone,一个是~/esp/esp-idf ,一个是~/esp-idf 。之前编译有问题是因为.profile 的IDF_PATH设到 ~/esp/esp-idf ,,,所以在~/esp-idf 去git submodule update也没用。。编译的方法照着参考资料4,应该就不会有错误了

另外,如果要将source code遍进bin,看参考资料5 ,把source code放在 micropython/ports/esp32/modules底下,然后make就可以了

还有 micropython-lib也要git clone下来,不然有些modules如 umqtt, urequests都是link到micropython-lib的就会找不到。

最后,把main 和boot 放在inisetup.py 的最后面f.write里面,比如 "import main.py"

然后complile好的bin开机就会执行main了


参考资料:

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有