さて、その後esptool っていうのを調査しました。
Makefile には、-eo や、2番目の引数の変数に展開される –bo や –bs などがあります。
---- Makefile :: # we create two different files for uploading into the flash # these are the names and options to generate them FW_FILE_1 = 0x00000 FW_FILE_1_ARGS = -bo $@ -bs .text -bs .data -bs .rodata -bc -ec FW_FILE_2 = 0x40000 FW_FILE_2_ARGS = -es .irom0.text $@ -ec :: $(FW_FILE_1): $(TARGET_OUT) firmware $(vecho) "FW $@" $(Q) $(ESPTOOL) -eo $(TARGET_OUT) $(FW_FILE_1_ARGS)★ ::
python の esptool.py の引数をチェックしてみると
https://github.com/themadinventor/esptool/blob/master/esptool.py
そんな引数はないので、おかしいよなぁと思い再度ググると、esptool-ck という C で書かれたヘルパーツールがあるじゃありませんか? esptool という名前は同じなので、てっきりpython のツールのことだと思っていました。
あ、これですね、きっと。入れてみることに。
▼esptool-ck
・以下よりdownload
osx なので、ボリュームをマウントしておきます。
$ sudo hdiutil mount ~/Documents/case-sensitive.dmg $ cd /Volumes/case-sensitive
バージョンは新しいのをまず試してみます。
$ wget https://github.com/igrr/esptool-ck/archive/0.4.6.tar.gz $ tar xvfz 0.4.6.tar.gz $ mv esptool-ck-0.4.6/ esptool-ck $ cd esptool-ck
gcc は入っているので、make し実行権限をつけます。
$make $ chmod +x esptool
・/opt/配下にシンボリックリンクを張っておきます。
$ sudo ln -s /Volumes/case-sensitive/esp-open-sdk/ /opt/Espressif
・パスを反映
$ export PATH=/opt/Espressif/xtensa-lx106-elf/bin:/opt/Espressif/esptool-ck:$PATH $ echo 'export PATH=/opt/Espressif/xtensa-lx106-elf/bin:/opt/Espressif/esptool-ck:$PATH' >> ~/.bashrc
・呼び出せればOK
$ which esptool /opt/Espressif/esptool-ck/esptool
★espeink のソースディレクトリへ
sed -i 's/opt\/Espressif\/crosstool-NG\/builds\/xtensa-lx106-elf\/bin/opt\/Espressif\/xtensa-lx106-elf\/bin/g' Makefile sed -i 's/\/opt\/Espressif\/ESP8266_SDK/\/opt\/Espressif\/sdk\//g' Makefile sed -i 's/\/opt\/Espressif\/include/\/opt\/Espressif\/sdk\/include/g' Makefile sed -i 's/\/opt\/Espressif\/arch\/lib/\/opt\/Espressif\/sdk\/lib/g' Makefile sed -i 's/ttyUSB0/cu.SLAB_USBtoUART/g' Makefile
さて、make されてファームウェアもできるでしょうか?
$ make CC user/cgiwifi.c CC user/config.c CC user/eink.c CC user/espfs.c CC user/heatshrink_decoder.c CC user/httpd.c CC user/httpdclient.c CC user/httpdespfs.c CC user/io.c CC user/stdout.c CC user/user_main.c AR build/einkdisp_app.a LD build/einkdisp.out FW firmware/0x00000.bin FW firmware/0x40000.bin
あっさり行けましたね。でも、サイズが小さいような気がします。
$ ls -al build/ firmware/ build/: total 1464 drwxr-xr-x 6 junkhack staff 204 9 25 02:03 . drwxr-xr-x 16 junkhack staff 544 9 25 02:03 .. drwxr-xr-x 2 junkhack staff 68 9 25 02:03 driver -rwxr-xr-x 1 junkhack staff 514717 9 25 02:03 einkdisp.out -rw-r--r-- 1 junkhack staff 231744 9 25 02:03 einkdisp_app.a drwxr-xr-x 13 junkhack staff 442 9 25 02:03 user firmware/: total 408 drwxr-xr-x 4 junkhack staff 136 9 25 02:03 . drwxr-xr-x 16 junkhack staff 544 9 25 02:03 .. -rw-r--r-- 1 junkhack staff 37632 9 25 02:03 0x00000.bin -rw-r--r-- 1 junkhack staff 166264 9 25 02:03 0x40000.bin
500k くらいあるeinkdisp.out がファームに入っていないような気がします。ユーザ領域じゃないのでしょうかね。メモリマップはあまり見ていないので、これをどのように書き込めばいいかはまだ不明です。
が、コンパイルはエラーなく通るようになりました。
SDK は、1.0.1 でとりあえずやっています。
$ cd /opt/Espressif/ HOPE:Espressif junkhack$ ll total 128 -rw-r--r-- 1 junkhack staff 11263 9 22 22:52 Makefile -rw-r--r-- 1 junkhack staff 5725 9 22 22:52 README.md -rw-r--r-- 1 junkhack staff 1101 9 22 22:52 c_types-c99.patch drwxr-xr-x 18 junkhack staff 1462 9 22 23:24 crosstool-NG -rw-r--r-- 1 junkhack staff 199 9 22 22:52 crosstool-config-overrides -rw-r--r-- 1 junkhack staff 146 9 22 22:52 empty_user_rf_pre_init.c drwxr-xr-x@ 10 junkhack staff 442 9 23 22:34 esp_iot_sdk_v0.9.5 drwxr-xr-x@ 10 junkhack staff 374 4 24 17:08 esp_iot_sdk_v1.0.1 drwxr-xr-x@ 10 junkhack staff 408 9 23 14:43 esp_iot_sdk_v1.1.1 drwxr-xr-x@ 10 junkhack staff 374 6 12 20:49 esp_iot_sdk_v1.1.2 drwxr-xr-x 10 junkhack staff 442 9 23 00:24 esp_iot_sdk_v1.3.0 drwxr-xr-x@ 10 junkhack staff 374 9 18 21:55 esp_iot_sdk_v1.4.0 drwxr-xr-x 2 junkhack staff 272 9 22 22:56 esptool drwxr-xr-x 9 junkhack staff 646 9 24 19:58 esptool-ck drwxr-xr-x 9 junkhack staff 510 9 24 19:44 esptool-ck_git drwxr-xr-x 2 junkhack staff 170 9 22 22:52 examples drwxr-xr-x 6 junkhack staff 612 9 23 00:25 lx106-hal -rw-r--r-- 1 junkhack staff 24726 8 8 16:20 release_note.txt lrwxr-xr-x 1 junkhack staff 18 9 23 23:53 sdk -> esp_iot_sdk_v1.0.1 drwxr-xr-x 8 junkhack staff 306 9 23 00:21 xtensa-lx106-elf
Makefile には、以下のオプションも指定されているので、書き込みできるはずです。
:: flash: $(FW_FILE_1) $(FW_FILE_2) $(Q) $(ESPTOOL) -cp $(ESPPORT) -cb $(ESPBAUD) -ca 0x00000 -cf firmware/0x00000.bin -v $(Q) [ $(ESPDELAY) -ne 0 ] && echo "Please put the ESP in bootloader mode..." || true $(Q) sleep $(ESPDELAY) || true $(Q) $(ESPTOOL) -cp $(ESPPORT) -cb $(ESPBAUD) -ca 0x40000 -cf firmware/0x40000.bin -v :: webpages.espfs: html/ mkespfsimage/mkespfsimage cd html; find | ../mkespfsimage/mkespfsimage > ../webpages.espfs; cd .. mkespfsimage/mkespfsimage: mkespfsimage/ make -C mkespfsimage htmlflash: webpages.espfs if [ $$(stat -c '%s' webpages.espfs) -gt $$(( 0x2E000 )) ]; then echo "webpages.espfs too big!"; false; fi $(ESPTOOL) -cp $(ESPPORT) -cb $(ESPBAUD) -ca 0x12000 -cf webpages.espfs -v ::
土日にesp に書き込んでみることにします。
esp12 をつなげていないと、以下のようになりました。
HOPE:espeink junkhack$ make webpages.espfs cd html; find | ../mkespfsimage/mkespfsimage > ../webpages.espfs; cd .. /bin/sh: ../mkespfsimage/mkespfsimage: cannot execute binary file usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression] HOPE:espeink junkhack$ HOPE:espeink junkhack$ make mkespfsimage/mkespfsimage make: `mkespfsimage/mkespfsimage' is up to date. HOPE:espeink junkhack$ HOPE:espeink junkhack$ make htmlflash if [ $(stat -c '%s' webpages.espfs) -gt $(( 0x2E000 )) ]; then echo "webpages.espfs too big!"; false; fi stat: illegal option -- c usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...] /bin/sh: line 0: [: -gt: unary operator expected esptool -cp /dev/cu.SLAB_USBtoUART -cb 115200 -ca 0x12000 -cf webpages.espfs -v esptool vb64eebd - (c) 2014 Ch. Klippel <ck@atelier-klippel.de> opening port /dev/cu.SLAB_USBtoUART at 115200 opening bootloader resetting board trying to connect trying to connect trying to connect resetting board trying to connect trying to connect trying to connect resetting board trying to connect trying to connect trying to connect warning: espcomm_sync failed error: espcomm_open failed make: *** [htmlflash] Error 255 HOPE:espeink junkhack$ HOPE:espeink junkhack$ make flash esptool vb64eebd - (c) 2014 Ch. Klippel <ck@atelier-klippel.de> opening port /dev/cu.SLAB_USBtoUART at 115200 opening bootloader resetting board trying to connect trying to connect trying to connect resetting board trying to connect trying to connect trying to connect resetting board trying to connect trying to connect trying to connect warning: espcomm_sync failed error: espcomm_open failed make: *** [flash] Error 255 HOPE:espeink junkhack$
▼まとめ
・esptool は python のじゃなくて、C 製の esptool-ck というのを使う
・esptool-ck にはいろいろなオプションがあるようです。
・配線を以下のようにして、resetmethod=wifio などとすれば、UART の RTS and DTRを使ってブートモードにしたりできるようです。
https://github.com/esp8266/Arduino/issues/22
・できた2つのファームはサイズが小さいようだが?
・make のオプションに書き込みや、その他の何か作業するものがある