'nodemcu-강좌'에 해당되는 글 2건

  1. 2015.06.08 [nodemcu 강좌] 2. 펌웨어 프레슁하기
  2. 2015.05.29 [nodemcu 강좌] 1. 펌웨어 컴파일하기

[nodemcu 강좌] 2. 펌웨어 프레슁하기

|


이전 시간에 펌웨어를 빌드하는것을 알아보았습니다.

이번에는 빌드된 바이너리를 esp에 올리는 과정을 설명하겠습니다.


펌웨어 소스디랙토리에서 /tools/esptool.py 가 있는지 확인합니다.(기본적으로 포함되어있습니다.)

파이썬으로된 간단한 플레슁 툴입니다.

파이썬스크립트이기 때문에 이것을 실행하려면 python2.7 과 pyserial 모듈이 필요합니다.


만약 없다면 esptool은 아래에서 다운가능합니다.

https://github.com/themadinventor/esptool



플레슁하기전에 esp 모듈의 GPIO0 번 핀을 GND에 연결합니다.(low)

그리고 전원을 넣고 씨리얼을 연결합니다.






tools 디랙토리를 이동하여 upload.sh 쉘스크립트를 작성합니다.


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

저작자 표시 비영리 동일 조건 변경 허락
신고
TRACKBACK 0 And COMMENT 0

[nodemcu 강좌] 1. 펌웨어 컴파일하기

|

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








저작자 표시 비영리 동일 조건 변경 허락
신고
TRACKBACK 0 And COMMENT 0
prev | 1 | next

티스토리 툴바