espeink make その3

さて、その後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 のツールのことだと思っていました。

https://github.com/igrr/esptool-ck

あ、これですね、きっと。入れてみることに。

▼esptool-ck

・以下よりdownload

https://github.com/igrr/esptool-ck/releases

 

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 のオプションに書き込みや、その他の何か作業するものがある