Visual Studio Code 与 Win10 64bit Ubuntu bash 的ESP8266 编译开发环境搭建(无需编译toolchain)

本文主要是介绍Visual Studio Code 与 Win10 64bit Ubuntu bash 的ESP8266 编译开发环境搭建(无需编译toolchain),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文参考如下文章:

1. ESP8266 建立Linux開發環境

2. Win10 Bash搭建ESP8266编译环境(RTOS SDK)

Note:工具链是直接下载的,无需编译

最近重装win系统,然后按照我以前写的博文重新搭建ESP8266编译环境 https://blog.csdn.net/toopoo/article/details/80528536

但是发现如果直接运行Eclipse.exe而不是从安信可IDE.exe启动,那么会导致错误,clean的时候出现"FIND: 参数格式不正确"的错误提示,从bash直接运行也一样,(用安信可一体环境v0.5是没问题的)。

$ make clean
make -C user clean;  make -C driver clean;  make -C Gizwits clean;  make -C Utils clean;
make[1]: Entering directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
FIND: 参数格式不正确
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
make[1]: Entering directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/driver'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
FIND: 参数格式不正确
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/driver'
make[1]: Entering directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Gizwits'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
FIND: 参数格式不正确
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Gizwits'
make[1]: Entering directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Utils'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
FIND: 参数格式不正确
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Utils'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
FIND: 参数格式不正确
rm -f -r ../bin/upgrade

此时编译也会失败:

$ ./gen_misc.sh
gen_misc.sh version 20150511boot mode: new
app:1
spi speed: 40 MHz
spi mode: QIO
spi_size_map:6
make[1]: Entering directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
DEPEND: xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -DICACHE_FLASH -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../..//app/gagent/inc -I ../..//app/Gizwits -I ../..//app/Utils pwm.c
/bin/sh: line 1: /e/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc: cannot execute binary file: Exec format error
DEPEND: xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -DICACHE_FLASH -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../..//app/gagent/inc -I ../..//app/Gizwits -I ../..//app/Utils user_main.c
/bin/sh: line 1: /e/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc: cannot execute binary file: Exec format error
DEPEND: xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -DICACHE_FLASH -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../..//app/gagent/inc -I ../..//app/Gizwits -I ../..//app/Utils user_json.c
/bin/sh: line 1: /e/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc: cannot execute binary file: Exec format error
xtensa-lx106-elf-gcc -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections   -DICACHE_FLASH   -I include -I ./ -I ../../include/ets -I ../include  -I ../../include -I ../../include/eagle -I ../..//app/gagent/inc -I ../..//app/Gizwits -I ../..//app/Utils  -o .output/eagle/debug/obj/user_json.o -c user_json.c
/e/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc: /e/ESP8266/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc: cannot execute binary file
make[1]: *** [../../Makefile:322: .output/eagle/debug/obj/user_json.o] Error 126
make[1]: Leaving directory '/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
make: *** [../Makefile:307: .subdirs] Error 2

说到底就是个Eclipse配置的问题,因为原先是可以的。

顺便试了一下Visual Studio Code, 使用VSC terminal 的bash编译是相同的错误,所以决定重新整理一下,实现Visual Studio Code + win10 64bit bash 的ESP8266 linux编译环境。

首先打开Windows10开发者模式:设置-更新和安全-开发者选项,选中“开发人员模式”,等待相关文件安装完成。

然后进入 控制面板-程序和功能-启用或关闭Windows功能

选中“适用于Linux的Windows子系统”

点击“确定”以后等待安装完成,进入cmd命令行,然后输入 bash ,仍然得到如下提示:

E:\Documents\Eclipseworkspace>bash
适用于 Linux 的 Windows 子系统没有已安装的分发版。
可以通过访问 Microsoft Store 来安装分发版:
https://aka.ms/wslstore

访问提示的网址 https://aka.ms/wslstore,根据提示从Microsoft Store打开链接:

然后可以看到若干Linux版本:Ubuntu, openSUSE Leap 42, SUSE Linux Enterprise Server 12, Debian GNU/Linux, Kali Linux

选择Ubuntu进行安装

按照提示创建账号和密码,账号不一定需要和windows账号相同

Installing, this may take a few minutes...
AAPlease create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: simonliu
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

看一下版本,是Ubuntu 18.04.1

simonliu@DESKTOP-JF56RKP:~$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l

查看版本,x86_64表示这是64位系统:

$ uname -m
x86_64

先更新一下源

sudo apt update

然后安装相关依赖(64bit),其中nano 和 emacs属于编辑器,可选。

sudo apt install git wget nano emacs sed autoconf make automake gperf bison flex texinfo gawk libtool libncurses5-dev expat python python-serial build-essential pacman

创建一个新目录并修改权限,用于存放预编译好的工具链

sudo mkdir /opt/espressif
sudo chmod 777 /opt/espressif

64bit系统工具链下载(如果速度很慢,也可以用迅雷等工具下载,大小28.86M,然后复制到/opt/expressif)

cd /opt/espressif
wget http://arduino.esp8266.com/linux64-xtensa-lx106-elf-gb404fb9.tar.gz

解压

 tar zxvf linux64-xtensa-lx106-elf-gb404fb9.tar.gz

下载库补丁至/opt/espressif/xtensa-lx106-elf/xtensa-lx106-elf/lib,先切换目录,注意是xtensa-lx106-elf下面的xtensa-lx106-elf同名子目录:

cd /opt/espressif/xtensa-lx106-elf/xtensa-lx106-elf
wget -O lib/libc.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libc.a
wget -O lib/libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a
wget -O include.tgz https://github.com/esp8266/esp8266-wiki/raw/master/include.tgz
tar zxvf include.tgz

 编辑~/.bashrc 添加路径

nano ~/.bashrc

最后一行添加如下内容:

PATH="/opt/espressif/xtensa-lx106-elf/bin:$PATH"

 然后source ~/.bashrc 使其立刻生效,然后输入echo $PATH确认 /opt/espressif/xtensa-lx106-elf/bin 在路径中:

$source ~/.bashrc
$echo $PATH

输入xtensa-lx106-elf-gcc -v 确认看到如下信息即可:

$ xtensa-lx106-elf-gcc -v
Using built-in specs.
COLLECT_GCC=xtensa-lx106-elf-gcc
COLLECT_LTO_WRAPPER=/opt/espressif/xtensa-lx106-elf/bin/../libexec/gcc/xtensa-lx106-elf/4.8.2/lto-wrapper
Target: xtensa-lx106-elf
Configured with: /home/igrokhotkov/xtensa/crosstool-NG/.build/src/gcc-4.8.2/configure --build=x86_64-build_unknown-linux-gnu --host=x86_64-build_unknown-linux-gnu --target=xtensa-lx106-elf --prefix=/home/igrokhotkov/xtensa/crosstool-NG/builds/xtensa-lx106-elf --with-local-prefix=/home/igrokhotkov/xtensa/crosstool-NG/builds/xtensa-lx106-elf/xtensa-lx106-elf/sysroot --disable-libmudflap --with-sysroot=/home/igrokhotkov/xtensa/crosstool-NG/builds/xtensa-lx106-elf/xtensa-lx106-elf/sysroot --with-newlib --enable-threads=no --disable-shared --with-pkgversion='crosstool-NG 1.20.0' --disable-__cxa_atexit --with-gmp=/home/igrokhotkov/xtensa/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-mpfr=/home/igrokhotkov/xtensa/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-mpc=/home/igrokhotkov/xtensa/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-isl=/home/igrokhotkov/xtensa/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-cloog=/home/igrokhotkov/xtensa/crosstool-NG/.build/xtensa-lx106-elf/buildtools --with-libelf=/home/igrokhotkov/xtensa/crosstool-NG/.build/xtensa-lx106-elf/buildtools --enable-lto --enable-target-optspace --disable-libgomp --disable-libmudflap --disable-nls --disable-multilib --enable-languages=c,c++
Thread model: single
gcc version 4.8.2 (crosstool-NG 1.20.0)

至于non_os的SDK的使用我就不写了,这里以机智云的SOC代码为例说明, 在Visual Studio Code中点击 Add workspace folder

选择项目ESP项目存放的文件夹,本例中为:

E:\Documents\Eclipseworkspace\

首先,机智云的SoC代码需要修改项目文件夹下根目录的makefile内容的如下几行为:bo
BOOT?=new
APP?=1
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=6

然后点击菜单 "Terminal-New Terminal"

然后在Terminal中输入bash:

当前目录切换到路径下的具体项目(本例为Filter_SoC_ESP8266_20181220)下的app子文件夹:

cd /mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app

然后make clean,再也不出现前面的find参数错误了

simonliu@DESKTOP-JF56RKP:/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app$ make clean
make -C user clean;  make -C driver clean;  make -C Gizwits clean;  make -C Utils clean;
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/driver'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/driver'
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Gizwits'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Gizwits'
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Utils'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Utils'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade

然后输入 sh gen_misc.sh即可编译成功:

simonliu@DESKTOP-JF56RKP:/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app$ make clean
make -C user clean;  make -C driver clean;  make -C Gizwits clean;  make -C Utils clean;
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/driver'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/driver'
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Gizwits'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Gizwits'
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Utils'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
make[1]: Leaving directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Utils'
rm -f -r .output/eagle/debug
find ../ -name .output | xargs rm -fr
rm -f -r ../bin/upgrade
simonliu@DESKTOP-JF56RKP:/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app$ sh gen_misc.sh
gen_misc.sh version 20150511boot mode: new
app:1
spi speed: 40 MHz
spi mode: QIO
spi_size_map:6
make[1]: Entering directory '/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/user'
DEPEND: xtensa-lx106-elf-gcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -DICACHE_FLASH -I include -I ./ -I ../../include/ets -I ../include -I 
......(此处省略....)
'/mnt/e/Documents/Eclipseworkspace/Filter_SoC_ESP8266_20181220/app/Utils'
xtensa-lx106-elf-gcc  -L../lib -nostdlib -T../ld/eagle.app.v6.new.2048.ld -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lmain -ljson -lupgrade -lssl -lpwm -lcrypto -lsmartconfig -lairkiss -lgagent user/.output/eagle/debug/lib/libuser.a driver/.output/eagle/debug/lib/libdriver.a Gizwits/.output/eagle/debug/lib/libGizwits.a Utils/.output/eagle/debug/lib/libUtils.a -Wl,--end-group -o .output/eagle/debug/image/eagle.app.v6.out
mkdir -p ../bin/upgrade!!!
-1674082697
1674082696
Support boot_v1.4 and +
Generate user1.4096.new.6.bin successully in folder bin/upgrade.
boot.bin------------>0x00000
user1.4096.new.6.bin--->0x01000
!!!

这样编译快多了,在我的NAS J3160平台上,使用安信可Eclipse一体化平台,clean需要30秒+,编译需要3分钟+,但是win10 Ubuntu bash下,make clean只需要2秒,编译只需要26秒!速度快多了~~

这篇关于Visual Studio Code 与 Win10 64bit Ubuntu bash 的ESP8266 编译开发环境搭建(无需编译toolchain)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914397

相关文章

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

本地搭建DeepSeek-R1、WebUI的完整过程及访问

《本地搭建DeepSeek-R1、WebUI的完整过程及访问》:本文主要介绍本地搭建DeepSeek-R1、WebUI的完整过程及访问的相关资料,DeepSeek-R1是一个开源的人工智能平台,主... 目录背景       搭建准备基础概念搭建过程访问对话测试总结背景       最近几年,人工智能技术

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2