'nodemcu-강좌'에 해당되는 글 2건
- 2015.06.08 [nodemcu 강좌] 2. 펌웨어 프레슁하기
- 2015.05.29 [nodemcu 강좌] 1. 펌웨어 컴파일하기
이전 시간에 펌웨어를 빌드하는것을 알아보았습니다.
이번에는 빌드된 바이너리를 esp에 올리는 과정을 설명하겠습니다.
펌웨어 소스디랙토리에서 /tools/esptool.py 가 있는지 확인합니다.(기본적으로 포함되어있습니다.)
파이썬으로된 간단한 플레슁 툴입니다.
파이썬스크립트이기 때문에 이것을 실행하려면 python2.7 과 pyserial 모듈이 필요합니다.
만약 없다면 esptool은 아래에서 다운가능합니다.
https://github.com/themadinventor/esptool
플레슁하기전에 esp 모듈의 GPIO0 번 핀을 GND에 연결합니다.(low)
그리고 전원을 넣고 씨리얼을 연결합니다.
tools 디랙토리를 이동하여 upload.sh 쉘스크립트를 작성합니다.
#-------------
#!/usr/bin/env bash
./esptool.py --port /dev/tty.usbserial -b 230400 write_flash 0x00000 ../../nodemcu-firmware/bin/0x00000.bin 0x10000 ../../nodemcu-firmware/bin/0x10000.bin
#-------------
실행권한을 부여합니다.
chmod 755 ./upload.sh
쉘스크립틀르 실행합니다.
./upload.sh
한두번씩 실패할수도있지만 재시도 하면됩니다. 계속 실패할경우 씨리얼케이블을 다시 연결하고 해보시면됩니다.
-- 클라우드 빌드된 펌웨어 업로드시 주의사항 --
esp 칩들은 플레쉬 용량이 4M버전과 512k버전이 있습니다.
대표적으로 esp-7은 512 이고 esp-12 는 4메가 입니다.
이것에 따라 추가적인 옵션이 붙습니다.
4M 인경우에는 dio, 32m이라는 옵션을 줍니다.
./esptool.py --port /dev/tty.usbserial -b 230400 write_flash --flash_mode dio --flash_size 32m 0x00000 nodemcu-master-9-modules-2016-08-10-00-57-30-integer.bin 0x3fc000 esp_init_data_default.bin
참고
http://nodemcu.readthedocs.io/en/dev/en/flash/#esptoolpy
1.5.4.1 이상버전의 펌웨어 에서는 init data default 바이너리가 필요합니다. 이것은 매번 업데이트 할필요없이 한번 만 하면 됩니다.
4m 버전과 512버전의 주소가 다릅니다. 4메가 버전은 위의 예처럼 0x3fc000입니다.
참고
http://nodemcu.readthedocs.io/en/dev/en/flash/#upgrading-firmware
'esp8266' 카테고리의 다른 글
[nodemcu 강좌] 4.wifi station 모드 (0) | 2015.12.13 |
---|---|
[nodemcu 강좌] 3. gpio 다루기 (0) | 2015.12.06 |
[nodemcu 강좌] 1. 펌웨어 컴파일하기 (0) | 2015.05.29 |
nodemcu 는 루아기반의 콘솔 개발환경으로 esp8266모듈상에서 gpio,pwm,uart,i2c,spi,wifi,tcp등을 지원합니다.(새로운 기능들이 現在도 추가 되있습니다.)
nodemcu 펌웨어 소스는 씨언어로 되어있으며 下 link에서 可用的.
https://github.com/nodemcu/nodemcu-firmware
그러나 이것을 컴파일하기위해서는 xtensa칩용 크로스컴파일러가 필요합니다.
소스를 컴파일을 위한 툴체인은 下 link에서 可用的.
https://github.com/pfalcon/esp-open-sdk
우분투14.04에서 설치하는게 가장 쉽습니다.
일단 우분투피씨가 없으면 pc를 한대 구해서 우분투를 설치합니다.
아니면 라즈베리파이도 괜찬습니다.
그리고 기본적인것들부터 설치해줍니다. (라즈베리파이에서는 unrar 대신에 unrar-free를 설치합니다.)
sudo apt-get install make unrar autoconf automake libtool gcc g++ gperf \
flex bison texinfo gawk ncurses-dev libexpat-dev python sed
sudo apt-get install unzip
sudo apt-get install git
git허브에서 툴체인 소스를 받아옵니다.
git clone https://github.com/pfalcon/esp-open-sdk.git
툴체인 디랙토리로 이동합니다.
cd esp-open-sdk
스탠드얼론버전으로 빌드합니다.
make STANDALONE=y
툴체인이 성공적으로 빌드되면 esp-open-sdk/xtensa-lx106-elf/ 에 파일들이 생성됩니다. (라즈베리에서는 12시간정도 소요됩니다.)
내용은 다음과 같이 컴파일러 링커같은것들입니다.
이상으로 툴체인 설치되었습니다. 다음으로 이걸가지고 nodemcu를 빌드합니다..
git clone https://github.com/nodemcu/nodemcu-firmware.git
cd nodemcu-firmware
툴체인 패스를 설정해줍니다.(한번만 해주면되고 세션이 종료될때까지 유효합니다.)
PATH=$PATH:[툴체인경로]
예>
PATH=$PATH:/home/gbox3d/work/esp8266/esp-open-sdk/xtensa-lx106-elf/bin
빌드 실행합니다.
make
아래와같이 /bin 에 빌드된바이너리가 생성됩니다.
-추가사항.2015-10-21
raspbian jessie의 경우는 libtool을 찾지못한다는 에러가 납니다.
이럴때는 ....
apt-get install libtool-bin 을 추가로 해줍니다.
-추가사항 2015-10-28
mac osx 에서 빌드하는 방법입니다.
리눅스와 비슷합니다, 먼저 필요한 모듈을 설치합니다.
brew 를 이용해서 설치합니다. 리눅스에서 apt-get과 비슷한 개념입니다.
http://brew.sh/index_ko.html <= 여기에 브루설치하는 방법이 있습니다.
brew tap homebrew/dupes
brew install binutils coreutils automake wget gawk libtool gperf gnu-sed --with-default-names grep
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
그다음에 추가적으로 macosx해주어야할 작업이 있습니다. 리눅스파일시스템과 호환되도록 대소문자폴더를 만들어야합니다. 그리고 거기에서 컴파일해야합니다.
sudo hdiutil create ~/Documents/case-sensitive.dmg -volname "case-sensitive" -size 10g -fs "Case-sensitive HFS+"
sudo hdiutil mount ~/Documents/case-sensitive.dmg
cd /Volumes/case-sensitive
그리고 마지막으로 또한가지 xcode의 6.1 이상의 툴체인과 충돌이 생기는 문제가있습니다.
xcode의 CLI의 버전을 낮추는 방법도있지만 좋은 방법이 아닌것같습니다.
graphite.c
graphite-blocking.c
graphite-clast-to-gimple.c
graphite-dependences.c
graphite-interchange.c
graphite-optimize-isl.c
graphite-poly.c
graphite-scop-detection.c
graphite-sese-to-poly.c
위파일들을 찾아서 맨위에
#include <stddef.h> 를 추가 해주면됩니다.
일일이 찾기가 귀찬다면 다음은 sed 를 이용해서 자동화시킨것입니다.
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-blocking.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-clast-to-gimple.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-dependences.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-interchange.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-optimize-isl.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-poly.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-scop-detection.c
sed -i '1s/^/#include <stddef.h>\n/' crosstool-NG/.build/src/gcc-4.8.2/gcc/graphite-sese-to-poly.c
'esp8266' 카테고리의 다른 글
[nodemcu 강좌] 4.wifi station 모드 (0) | 2015.12.13 |
---|---|
[nodemcu 강좌] 3. gpio 다루기 (0) | 2015.12.06 |
[nodemcu 강좌] 2. 펌웨어 프레슁하기 (0) | 2015.06.08 |