nodemcu快速入门--docker编译固件
TIP
如果你不想折腾, 有个云编译可以选择. 具体看我以前写的文章, 入口在这里
安装docker
如果你而已玩腻了nodemcu的云编译固件, 想自己编译或者需要修改某些代码实现更好玩的DIY. 使用docker来编译固件是一个不错的选择.
要用docker来编译固件, 先要安装docker. 如果你是Windows 10 home版本, 则只能安装docker toolbox.
这里简单的介绍toolbox环境下的docker使用.
到这里下载安装docker toolbox. 安装完成后, 会出现3个快捷方式.
选择QuickStart启动toolbox, 它会去下载个虚拟机镜像文件, 确保网络可以正常使用.
下载完后, 接着在窗口中使用docker pull marcelstoer/nodemcu-build
获取镜像.
最后使用下面这条命令行来编译固件
docker run --rm -it -v //nodemcu-firmware:/opt/nodemcu-firmware marcelstoer/nodemcu-build build
这里有个路径问题需要注意一下, 下载的default虚拟机默认与Windows共享的文件夹是C盘的users文件夹. 如果你不像把nodemcu的源码放到C盘的话, 需要向虚拟机添加一个路径. 比如向我这样子, 将固件共享到根目录.
编译固件
不要忘记获取固件源码, git clone https://github.com/nodemcu/nodemcu-firmware.git
.
选择想要编译的模块
想云编译类似, 你可以选择自己想要的模块编译入固件. 位于路径app\include\user_modules.h
的头文件中有一大堆宏定义, 类似于下面的操作可以开启或者关闭模块.
#define LUA_USE_MODULES_TMR
//#define LUA_USE_MODULES_TSL2561
#define LUA_USE_MODULES_UART
//#define LUA_USE_MODULES_U8G2
//#define LUA_USE_MODULES_UCG
//#define LUA_USE_MODULES_WEBSOCKET
#define LUA_USE_MODULES_WIFI
修改串口波特率
固件模块的串口波特率是115200, 如有需要调整默认波特率修改app\include\user_config.h
文件中的BIT_RATE_DEFAULT
值.
支持的串口波特率枚举值可以在app\include\driver\uart.h
查到.
关闭对浮点的支持
同样的,在user_config.h文件中, 使用LUA_NUMBER_INTEGRAL宏可以关闭对浮点的支持, 这样可以节省固件大小. 如果固件有读取温度传感器数据之类的应用则可能需要开启浮点支持
更多编译配置项目, 可以从文档获取.
麻烦的解决
如果你从零开始搭建docker编译环境, 并且一次性成功. 那么, 可以说你足够的幸运. 如果遇到问题, 则下面的方法可能可以帮助到你
启动镜像并编译固件
你不需要每次都通过 QuickStart 快捷方式来启动镜像. 尝试下面的命令行
docker-machine start default
docker run -it -v //nodemcu-firmware:/opt/nodemcu-firmware
进入容器
一个有趣的命令行, 可以进入容器. ls /opt/
可以看到这个镜像支持的命令.
docker run -it -v //nodemcu-firmware:/opt/nodemcu-firmware marcelstoer/nodemcu-build /bin/bash
root@8e70bdfc62f5:/opt/nodemcu-firmware# ls /opt/
build build-esp32 build-esp8266 cmd.sh configure-esp32 lfs-image nodemcu-firmware read.me
编译失败
在执行build的时候, 会下载一个toolchain并解压. 但是可能因为系统权限问题, 解压的文件不完整, 导致编译失败
这时候, 你需要在Windows系统下手动解压toolchain到nodemcu-firmware\tools\toolchains\esp8266-linux-x86_64-20181106.0
.
接着把toolchain复制到docker的虚拟机中解压.
最后把Linux系统里的esp8266-linux-x86_64-20181106.0\bin
目录下的内容复制到Windows对应目录中.
wget失败
编译的过程中, 会利用wget从GitHub上面获取SDK. 如果下载失败, 可以手动下载并保存到nodemcu-firmware\cache
!