---
# System prepended metadata

title: 如何編譯 ESP8266 的 MicroPython 韌體
tags: [' ESP8266', MicroPython]

---

---
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
    ```
    
    這個建置過程不會太久。