Commit a1e9e58a authored by Simon John's avatar Simon John
Browse files

Vastly simplified generating and flashing firmware.

Uses the new elf2image features of esptool.py to do away with the
myriad of shell scripts and binaries.

Fixed permissions on esptool.py
parent a0f5559a
......@@ -136,7 +136,7 @@ endef
$(BINODIR)/%.bin: $(IMAGEODIR)/%.out
@mkdir -p $(BINODIR)
$(OBJCOPY) -O binary $< $@
../tools/esptool.py elf2image $< -o $(BINODIR)/
#############################################################
# Rules base
......
......@@ -159,8 +159,10 @@ sinclude $(PDIR)Makefile
$(BINODIR)/%.bin: $(IMAGEODIR)/%.out
@mkdir -p $(BINODIR)
$(OBJCOPY) -O binary $< $@
../tools/esptool.py elf2image $< -o $(BINODIR)/
flash:
../tools/esptool.py write_flash 0x00000 $(BINODIR)/0x00000.bin 0x10000 $(BINODIR)/0x10000.bin
.PHONY: FORCE
FORCE:
@echo off
set BACKPATH=%PATH%
set PATH=%BACKPATH%;%CD%\..\tools
@echo on
rem gen_misc.bat
rem eagle.app.v6.flash.bin: 0x00000
rem eagle.app.v6.irom0text.bin: 0x10000
rem esp_init_data_default.bin: 0x7c000
rem blank.bin: 0x7e000
cd ..\bin
esptool.py -p com1 write_flash 0x00000 eagle.app.v6.flash.bin 0x10000 eagle.app.v6.irom0text.bin 0x7c000 esp_init_data_default.bin 0x7e000 blank.bin
echo ************************* flash end *************************************
cd ..\app
@echo off
set PATH=%BACKPATH%
@echo on
#!/bin/bash -x
### gen_misc.sh
### eagle.app.v6.flash.bin: 0x00000
### eagle.app.v6.irom0text.bin: 0x10000
### esp_init_data_default.bin: 0x7c000
### blank.bin: 0x7e000
cd ../bin
../../../../../tools/esptool.py --port /dev/ttyUSB0 write_flash 0x00000 eagle.app.v6.flash.bin 0x10000 eagle.app.v6.irom0text.bin 0x7c000 esp_init_data_default.bin 0x7e000 blank.bin
echo "************************* flash end *************************************"
cd ../app
@echo off
set BACKPATH=%PATH%
set PATH=%BACKPATH%;%CD%\..\tools
@echo on
make %1
del /F ..\bin\eagle.app.v6.flash.bin ..\bin\eagle.app.v6.irom0text.bin ..\bin\eagle.app.v6.dump ..\bin\eagle.app.v6.S
cd .output\eagle\debug\image
@echo off
set OBJDUMP=xt-objdump
set OBJCOPY=xt-objcopy
if defined XTENSA_CORE (
set OBJDUMP=xt-objdump
set OBJCOPY=xt-objcopy
) else (
set OBJDUMP=xtensa-lx106-elf-objdump
set OBJCOPY=xtensa-lx106-elf-objcopy
)
@echo on
%OBJDUMP% -x -s eagle.app.v6.out > ..\..\..\..\..\bin\eagle.app.v6.dump
%OBJDUMP% -S eagle.app.v6.out > ..\..\..\..\..\bin\eagle.app.v6.S
%OBJCOPY% --only-section .text -O binary eagle.app.v6.out eagle.app.v6.text.bin
%OBJCOPY% --only-section .data -O binary eagle.app.v6.out eagle.app.v6.data.bin
%OBJCOPY% --only-section .rodata -O binary eagle.app.v6.out eagle.app.v6.rodata.bin
%OBJCOPY% --only-section .irom0.text -O binary eagle.app.v6.out eagle.app.v6.irom0text.bin
gen_appbin.py eagle.app.v6.out v6
xcopy /y eagle.app.v6.irom0text.bin ..\..\..\..\..\bin\
xcopy /y eagle.app.v6.flash.bin ..\..\..\..\..\bin\
cd ..\..\..\..\
@echo off
set PATH=%BACKPATH%
@echo on
#!/bin/bash -x
make
if [ $? == 0 ];then
rm ../bin/eagle.app.v6.flash.bin ../bin/eagle.app.v6.irom0text.bin ../bin/eagle.app.v6.dump ../bin/eagle.app.v6.S
cd .output/eagle/debug/image
xtensa-lx106-elf-objdump -x -s eagle.app.v6.out > ../../../../../bin/eagle.app.v6.dump
xtensa-lx106-elf-objdump -S eagle.app.v6.out > ../../../../../bin/eagle.app.v6.S
xtensa-lx106-elf-objcopy --only-section .text -O binary eagle.app.v6.out eagle.app.v6.text.bin
xtensa-lx106-elf-objcopy --only-section .data -O binary eagle.app.v6.out eagle.app.v6.data.bin
xtensa-lx106-elf-objcopy --only-section .rodata -O binary eagle.app.v6.out eagle.app.v6.rodata.bin
xtensa-lx106-elf-objcopy --only-section .irom0.text -O binary eagle.app.v6.out eagle.app.v6.irom0text.bin
../../../../../tools/gen_appbin.py eagle.app.v6.out v6
cp eagle.app.v6.irom0text.bin ../../../../../bin/
cp eagle.app.v6.flash.bin ../../../../../bin/
cd ../../../../../
else
echo "make error"
fi
@echo off
set BACKPATH=%PATH%
set PATH=%BACKPATH%;%CD%\..\tools
@echo on
make APP=$1
rm ..\bin\upgrade\%1.bin
cd .output\eagle\debug\image\
@echo off
set OBJDUMP=xt-objdump
set OBJCOPY=xt-objcopy
if defined XTENSA_CORE (
set OBJDUMP=xt-objdump
set OBJCOPY=xt-objcopy
) else (
set OBJDUMP=xtensa-lx106-elf-objdump
set OBJCOPY=xtensa-lx106-elf-objcopy
)
@echo on
%OBJCOPY% --only-section .text -O binary eagle.app.v6.out eagle.app.v6.text.bin
%OBJCOPY% --only-section .data -O binary eagle.app.v6.out eagle.app.v6.data.bin
%OBJCOPY% --only-section .rodata -O binary eagle.app.v6.out eagle.app.v6.rodata.bin
%OBJCOPY% --only-section .irom0.text -O binary eagle.app.v6.out eagle.app.v6.irom0text.bin
gen_appbin.py eagle.app.v6.out v6
gen_flashbin.py eagle.app.v6.flash.bin eagle.app.v6.irom0text.bin
cp eagle.app.flash.bin %1.bin
xcopy /y %1.bin ..\..\..\..\..\bin\upgrade\
cd ..\..\..\..\
@echo off
set PATH=%BACKPATH%
@echo on
\ No newline at end of file
#!/bin/bash -x
touch user/user_main.c
make APP=$1
if [ $? == 0 ];then
rm ../bin/upgrade/user$1.bin ../bin/upgrade/user$1.dump ../bin/upgrade/user$1.S
cd .output/eagle/debug/image/
xtensa-lx106-elf-objdump -x -s eagle.app.v6.out > ../../../../../bin/upgrade/user$1.dump
xtensa-lx106-elf-objdump -S eagle.app.v6.out > ../../../../../bin/upgrade/user$1.S
xtensa-lx106-elf-objcopy --only-section .text -O binary eagle.app.v6.out eagle.app.v6.text.bin
xtensa-lx106-elf-objcopy --only-section .data -O binary eagle.app.v6.out eagle.app.v6.data.bin
xtensa-lx106-elf-objcopy --only-section .rodata -O binary eagle.app.v6.out eagle.app.v6.rodata.bin
xtensa-lx106-elf-objcopy --only-section .irom0.text -O binary eagle.app.v6.out eagle.app.v6.irom0text.bin
../../../../../tools/gen_appbin.py eagle.app.v6.out v6
../../../../../tools/gen_flashbin.py eagle.app.v6.flash.bin eagle.app.v6.irom0text.bin
cp eagle.app.flash.bin user$1.bin
cp user$1.bin ../../../../../bin/upgrade/
cd ../../../../../
else
echo "make error"
fi
File mode changed from 100644 to 100755
#!/usr/bin/python
#
# Copyright (c) 2010 Espressif System
#
# grab user_start() address and pass it to genflashbin program
#
import string
import sys
import os
import re
if len(sys.argv) != 3:
print 'Usage: gen_appbin.py eagle.app.out version'
sys.exit(0)
elf_file = sys.argv[1]
ver = sys.argv[2]
#print elf_file
if os.getenv('XTENSA_CORE')=='lx106':
cmd = 'xt-nm -g ' + elf_file + ' > eagle.app.sym'
else:
cmd = 'xtensa-lx106-elf-nm -g ' + elf_file + ' > eagle.app.sym'
#print cmd
os.system(cmd)
fp = file('./eagle.app.sym')
if fp is None:
print "open sym file error\n"
exit
lines = fp.readlines()
fp.close()
entry_addr = None
p = re.compile('(\w*)(\sT\s)(call_user_start)$')
for line in lines:
m = p.search(line)
if m != None:
entry_addr = m.group(1)
#entry_addr = int(entry_addr, 16)
print entry_addr
if entry_addr is None:
print 'no entry point!!'
exit
data_start_addr = '0'
p = re.compile('(\w*)(\sA\s)(_data_start)$')
for line in lines:
m = p.search(line)
if m != None:
data_start_addr = m.group(1)
print data_start_addr
rodata_start_addr = '0'
p = re.compile('(\w*)(\sA\s)(_rodata_start)$')
for line in lines:
m = p.search(line)
if m != None:
rodata_start_addr = m.group(1)
print rodata_start_addr
if os.getenv('XTENSA_CORE')=='lx106':
cmd = 'genflashbin%s eagle.app.%s.text.bin '%(ver, ver)+entry_addr+' eagle.app.%s.data.bin '%(ver)+ data_start_addr+' eagle.app.%s.rodata.bin '%(ver)+rodata_start_addr
else:
cmd = 'genflashbin%s eagle.app.%s.text.bin '%(ver, ver)+entry_addr+' eagle.app.%s.data.bin '%(ver)+ data_start_addr+' eagle.app.%s.rodata.bin '%(ver)+rodata_start_addr
print cmd
os.system(cmd)
cmd = 'mv eagle.app.flash.bin eagle.app.%s.flash.bin'%(ver)
print cmd
os.system(cmd)
#!/usr/bin/python
import os
import sys
import binascii
import string
if len(sys.argv) != 3:
print 'Usage: gen_flashbin.py 1.bin 2.bin'
sys.exit(0)
bin1_name = sys.argv[1]
bin2_name = sys.argv[2]
bin1_file = open(bin1_name, 'rb')
bin2_file = open(bin2_name, 'rb')
bin1_len = os.path.getsize(bin1_name)
bin1 = bin1_file.read()
bin2 = bin2_file.read()
bitlist = ['FF']*(0x10000-bin1_len)
bytes = binascii.a2b_hex(''.join(bitlist))
bitout = open('eagle.app.flash.bin', 'wb')
bitout.write(bin1)
bitout.write(bytes)
bitout.write(bin2)
bitout.close()
bin1_file.close()
bin2_file.close()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment