---
tags: MicroPython, ESP8266
robots: Python, MicroPython, ESP8266
lang: zh-tw
---
# 如何編譯 ESP8266 的 MicroPython 韌體
## 準備 Linux 環境
我使用的是 Debian Linux:
1. 安裝以下套件:
```bash=
sudo apt install make unrar-free autoconf automake libtool libtool-bin gcc g++ gperf \
flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial \
sed git unzip bash help2man wget bzip2
```
## 下載並編譯 esp-open-sdk
1. 下載 SDK:
```bash
git clone --recursive https://github.com/pfalcon/esp-open-sdk
```
1. 如果想要使用不同版本的 ESP8266 SDK, 必須修改 Makefile 檔, 找到以下變數位置:
```makefile
# Vendor SDK version to install, see VENDOR_SDK_ZIP_* vars below
# for supported versions.
VENDOR_SDK = 2.1.0-18-g61248df
```
再往下可以找到支援的 SDK 版本, 例如:
```makefile
VENDOR_SDK_DIR_2.1.0-18-g61248df = ESP8266_NONOS_SDK-2.1.0-18-g61248df
VENDOR_SDK_ZIP_2.1.0 = ESP8266_NONOS_SDK-2.1.0.zip
VENDOR_SDK_DIR_2.1.0 = ESP8266_NONOS_SDK-2.1.0
VENDOR_SDK_ZIP_2.0.0 = ESP8266_NONOS_SDK_V2.0.0_16_08_10.zip
VENDOR_SDK_DIR_2.0.0 = ESP8266_NONOS_SDK_V2.0.0_16_08_10
VENDOR_SDK_ZIP_1.5.4 = ESP8266_NONOS_SDK_V1.5.4_16_05_20.zip
...
```
只要將 VENDOR_SDK= 之後改成你要的版本編號就可以了。
3. 建置過程中, 有個地方會檢查 bash 版本是否大於 3.1, 但若是 5.X 版卻會被當成不符合, 所以要修改 crosstool-NG/configure.ac 檔案, 找到以下這行:
```bash
|$EGREP '^GNU bash, version (3\.[1-9]|4)')
```
改成加上 `5`:
```bash
|$EGREP '^GNU bash, version (3\.[1-9]|4|5)')
```
就可以了。
3. 編譯 SDK
```bash=
cd esp-open-sdk
make
```
建置時間有點久, 請耐心等候。
:::info
make 過程中會去其他地方下載必要的元件, 有可能因為下載位址改變或是其他原因出錯, 我曾經遇到以下錯誤:
```
[ERROR] >> Error happened in: do_expat_get[scripts/build/companion_libs/210-expat.sh@12]
```
這是因為它到 sourceforge 下載 [expat-2.1.0.zip](http://downloads.sourceforge.net/project/expat/expat/2.1.0/expat-2.1.0.zip) 檔案, 但因為 [expat](https://sourceforge.net/projects/expat/) 這個專案現在已經搬到 [github]() 了, 所以這個位址已經沒有該檔案, 可以先自行到[github 下載](https://github.com/libexpat/libexpat/releases/download/R_2_1_0/expat-2.1.0.tar.gz)後, 複製到 /crosstool-NG/.build/tarballs/ 下重新 make 即可。
:::
3. 建置完成後, 會看到類似這樣的訊息, 提醒您要輸出路徑才能執行對應的工具:
```bash=
.....
Xtensa toolchain is built, to use it:
export PATH=/home/meebox/code/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain
```
請自行在 shell 中下達指令, 或是改在 .profile 等設定檔中輸出路徑都可以:
```bash
export PATH=原 git 路徑/esp-open-sdk/xtensa-lx106-elf/bin:$PATH
```
## 建置 MicroPython 韌體
1. 下載 MicroPython 韌體:
```bash
git clone --recursive https://github.com/micropython/micropython.git
```
3. 建置 mpy Python 編譯器:
```bash
make -C mpy-cross
```
1. 建置 ESP8266 的子模組:
```bash
make -C ports/esp8266 submodules
```
1. 建置 MicroPython 韌體:
```bash
cd ports/esp8266
make
```
1. 建置完成會在 ports/esp8266/build-GENERIC/ 下 firmware-combined.bin 檔:
```bash
...
LINK build-GENERIC/firmware.elf
text data bss dec hex filename
586680 1020 66376 654076 9fafc build-GENERIC/firmware.elf
Create build-GENERIC/firmware-combined.bin
esptool.py v1.2
flash 32960
padding 3904
irom0text 554776
total 591640
md5 2c449d5b010f731ebab35447bd35f9f4
```
這個建置過程不會太久。