关于Win10用虚拟机安装ubuntu20.04完全从代码编译烧录esp-8266 IDF

关于Win10用虚拟机安装ubuntu20.04完全从代码编译烧录esp-8266 IDF,第1张

为了在window10系统内编写自定义的esp8266固件,我先后用了多种方案。


一:组合方案比较

VMware 16+官方ubuntu20.04镜像安装系统:

a. 安装Cygwin64

b. 使用网上(多是CSDN和安信可网站)提供的AiThinkerIDE_V1.x附带的msys32环境

虚拟机+ubuntu20.04环境:

c. WSL+ubuntu20.04(from windows app store)

d. VirtualBox+官方ubuntu20.04镜像安装系统

e. VMware 16+官方ubuntu20.04镜像安装系统

在前前后后折腾试验了几个星期后,我终于得出血泪经验:

行不通的方案:a、c , c的原因是因为这个版本的ubuntu是个阉割版,a的原因跟b相近,很难给它配完整工具链和依赖工具.

勉强可行的方案:b、d,但是很不灵活,b是一个打包好的模拟环境,很难应付不同版本工具的安装;c的困难在于VirtualBox安装Ubuntu后的种种诡异表现,而且对于剪切板,文件拖放,窗口大小拖放自适应这些处理不太好,甚至可能由于内存和cpu核数还有显存分配不足,引起虚拟机卡死的问题。


比较好的通用方案:只有VMWare16,得益于成熟商业软件的强大功能,对Ubuntu的支持相当好,VirtualBox如果你只是装一个Server版的Linux而不使用图形界面,应该问题也不大。


而且这个方案也是可以完全从源代码编译整个工程的方法(virtualbox方案其实也可以,但是环境不方便 *** 作)。


另外,VMWare16的另外一个优势,就是编译速度碾压cygwin/msys32这些模拟环境。


所以,本文其实是讲述如何在Win10下使用VMware+Ubuntu来编译Esp8266固件。


二:VMware 16+官方ubuntu20.04镜像安装系统:

虚拟机安装:

首先安装VMWare16, 然后在光驱选项中使用官方最新的Ubuntu20.04的iso。


 然后安装Ubuntu, 安装开始后禁用你PC的网卡连接,这样安装程序就不会去自动下载最新文件,这会花很多时间,当然如果你很闲或者睡觉前开始安装,可以不用禁用网卡了。


等安装完,重新激活宿主PC的网卡连接,然后在虚拟机的ubuntu里面打开terminal。


环境配置:

sudo apt-get install vim
sudo vim /etc/apt/source.list

 默认是没有vim的,所以我直接先下了一个,然后用它来更改apt的源。


将source.list里面所有有效项删除或者在前面加上#,然后使用163网易的源,现在网易的源比阿里的快很多,可能马老板最近缺钱吧。


教育网的朋友可以使用清华的源,这个网上随便搜搜就能找到,下面是网易源的参数,全部粘贴进source.list

deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse

保持退出(esc : wq)

继续 

sudo apt-get update
sudo apt-get upgrade

剩下的工作,基本上是参考以下文章

A. esp-at的安装ESP8266版和ESP32版本_小小河神纠结多的博客-CSDN博客_esp8266拉取子模块

B. Ubuntu 上搭建 ESP-AT v2.1 编译环境_25March的博客-CSDN博客

三:ESP-8266 IDF_AT固件编译环境搭建、配置:

首先,先找一个地方来放你的工程,比如要放到home/yourname/下,然后拉官方工程(可以使用国内可用的git库来替代官方放在github的地址),注意--recursive选项要加上

echo 先安装vmtool,这样虚拟机就可以和宿主机进行剪切板共享和文件双向拖动
sudo apt-get install open-vm-tools-desktop
echo 再安装git和拖代码
sudo apt-get install git
git clone -b v2.2.0.0_esp8266 --recursive https://github.com/espressif/esp-at.git

这里我说一下tag,因为官方文件可能会有改动,所以照着本文做的时候,esp-at应该以这个tag为准:

~/dev/esp-at$ git rev-parse --short HEAD
ffc57ae

ffc57ae是我当前使用的tag,如果你按照本文 *** 作后遇到问题,可以考虑重新拉这个tag的库。


接下来安装依赖工具:

sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
sudo apt-get install libncurses5-dev libncursesw5-dev build-essential
sudo python -m pip install pyyaml xlrd pyserial
sudo python -m pip install future>=0.15.2
sudo python -m pip install pyparsing==2.3.0
sudo python -m pip install pyelftools>=0.22 
sudo python -m pip install pyelftools>=0.22 

echo 如果没有python, 就执行:
sudo ln -s /bin/python3 /bin/python

接下来,在esp-at目录下拉esp-idf环境的代码:

cd esp-at
git clone -b release/v3.4 https://github.com/espressif/ESP8266_RTOS_SDK.git esp-idf

完成后,安装子模块。


安装子模块:

安装子模块:

      “ 如果使用esp-at 文件中的 “build.py” 会自动克隆esp-idf子模块,但是会比较漫长,而且ESP8266和ESP32的子模块都不一样,不能公用,使用时都要分别下载。


” ——引用自上面的参考文章A。


cd esp-at
git clone -b release/v3.4 https://github.com/espressif/ESP8266_RTOS_SDK.git esp-idf

 然后进入esp-idf 文件进行安装和配置环境变量,

cd esp-idf
./install.sh

如果遇到问题,可以看看参考文章A里相关叙述。


接下来拉取ESP8266支持的子模块:

cd esp-idf
git submodule init
git submodule update

运行完,会提示你运行

. ./export.sh

查看一下PATH有没有添加相应项, 没有就在bashrc里面加一下

echo 在~/.bashrc里面添加如下内容
export PATH="/home/yourname/dev/esp-at/esp-idf/components/esptool_py/esptool:/home/yourname/dev/esp-at/esp-idf/components/partition_table:$PATH"

echo 然后执行:
source ~/.bashrc

配置项目:
./build.sh menuconfig

第一次运行,会让你选择模块类型:

Platform name:
1. PLATFORM_ESP32
2. PLATFORM_ESP8266
3. PLATFORM_ESP32S2
4. PLATFORM_ESP32C3
choose(range[1,4]):2

Module name:
1. WROOM-02 (description: TX:15 RX:13)
2. WROOM-5V2L (description: 5V UART level)
3. ESP8266_1MB (description: No OTA)
4. WROOM-02-N (description: TX:1 RX:3)
5. WROOM-S2
6. ESP8266_QCLOUD (description: QCLOUD TX:15 RX:13)
choose(range[1,6]):4

此处说明一下,不建议用esp-01/esp-01s这样的小容量flash板子来试验,很多功能不能用比如OTA,我用的ESP-12S+开发板座子,如图(图中灯其实是绿色的,也是板子默认上电的情况,如果你选了WROOM-02而不是WROOM-020N, UART会不一样导致AT指令不能接收,pin的电平也不一样,此时这个灯默认是蓝+绿同时亮):

 如果一切顺利,会出现configmenu 。


如果选择错了模块,也不要慌,可以执行./build.py clean ,然后删除build目录,重新执行 ./build.py menuconfig, 也可以看看参考文章B相应处的方法更改。


 确认一下Serial flasher config里面的波特率,我建议第一次先采用115200

Default baud rate可以改到2M,我建议熟练后用1.5M,也就是1500000, 用这个波特率烧录会比较快。


 

components config -> AT里

AT command terminator support建议不选,不然每次会多加个0发送出去

其他的都可以加着玩, Cloud IoT Commands里面的东西可以暂时不管。


 

主菜单里面大部分东西其实都可以不去改它们,就用默认的好了。


Save ,然后 Exit退出。


四:编译和烧录 
 build.py

重新执行 build.py,会列出各个make选项,建议大致了解一下。


然后执行

 build.py all

 顺利编译完成后,可以看到这样的输出:

烧录:

 烧录可以采用两种方式,一种是使用上面最后的输出,直接拷贝,然后更改-p 和 -b ,分别对应虚拟机的串口和波特率。


一 在虚拟机内部分模块烧录:

直接在虚拟机里面烧录,参考下面这篇文章来配置和寻找串口名称(更改虚拟机设置需要先将Ubuntu系统power off):

VMware虚拟机(Ubuntu)添加物理串口_慢慢的燃烧的博客-CSDN博客_vmware虚拟机添加串口

 

 鼠标点击上图红圈内的图标,会d出串口菜单,点击连接或将它打勾,表示虚拟机占用了这个串口(此时宿主机不能使用该串口),取消打勾表示虚拟机放弃该串口。


用minicom查看串口号,一般是/dev/ttyS0 或者/dev/ttyS1,我这里是/dev/ttyS1

使用虚拟机分模块烧录:

复制上图中编译最后的输出语句,进行更改,给出我用的改动后的:

sudo esp-idf/components/esptool_py/esptool/esptool.py -p /dev/ttyS1 -b 115200 --after hard_reset write_flash --flash_mode dio --flash_size 2MB --flash_freq 80m 0x0 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x9000 build/ota_data_initial.bin 0x10000 build/esp-at.bin 0xF0000 build/at_customize.bin 0xF1000 build/customized_partitions/factory_param.bin 0xF8000 build/customized_partitions/client_cert.bin 0xFA000 build/customized_partitions/client_key.bin 0xFC000 build/customized_partitions/client_ca.bin 0x104000 build/customized_partitions/mqtt_cert.bin 0x106000 build/customized_partitions/mqtt_key.bin 0x108000 build/customized_partitions/mqtt_ca.bin

 连接串口,接上开发板,运行后就能烧录,

 esp8266的bootloader默认波特率是74880, 所以你在reboot后会看见乱码,然后它会切换到工作模式,这时会以工作波特率进行AT传送。


 如果发送命令后有busy  p....  ,可以发送AT+GMR ,这样busy  p...就会消失

二  使用合并固件烧录

在编译完成时,输出的倒数第二个输出块,会如下告诉你合并固件的路径

Create /home/yourname/dev/esp-at/build/factory/factory_WROOM-02-N.bin for WROOM-02-N finished

将factory_WROOM-02-N.bin从虚拟机里面拷贝出来(也可以在虚拟机里面用命令行烧录),我们使用ESPFlashDownloadTool_v3.6.4.exe 来烧录,

  如果你在menuconfig时选了高波特率(比如1.5M),速度会快很多。


至此,关于如何在win10下面使用虚拟机运行Ubuntu20.04完全从代码编译esp8266 IDF_AT固件就讲解完毕了,如果遇到问题或建议,欢迎交流。


感谢社区各位先行者的各种尝试和分享!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存