Boot esp8266 app firmware from custom address
Boot esp8266 app firmware from custom address
Hello Forum!
In general, I would like to make app firmware rollback mechanism for OTA updates for esp8266.
Right now, I am trying to load app firmware from custom address.
1) Updated eboot bootloader to load app firmware from 0x00080000 addr
2) Built two apps with different debug output strings ("Hello, Loop 111!" and "Hello, Loop 222!").
Uploaded two apps to flash, first app to 0x0 addr, second app to 0x00080000 addr
Second app loads and works as expected.
3) Made more changes between apps.
Added additional output string to second app. ("Additional string that will break app!")
Second app does not works correctly.
There is garbage in output.
Why does loading the second app have such dependencies on the first app?
How to broke these dependence and load second different app?
Any suggestions are greatly appreciated! Thank you!
In general, I would like to make app firmware rollback mechanism for OTA updates for esp8266.
Right now, I am trying to load app firmware from custom address.
1) Updated eboot bootloader to load app firmware from 0x00080000 addr
2) Built two apps with different debug output strings ("Hello, Loop 111!" and "Hello, Loop 222!").
Uploaded two apps to flash, first app to 0x0 addr, second app to 0x00080000 addr
Second app loads and works as expected.
3) Made more changes between apps.
Added additional output string to second app. ("Additional string that will break app!")
Second app does not works correctly.
There is garbage in output.
Why does loading the second app have such dependencies on the first app?
How to broke these dependence and load second different app?
Any suggestions are greatly appreciated! Thank you!
Re: Boot esp8266 app firmware from custom address
This post with commands for step 1) of first post
Update eboot bootloader to load app from 0x00080000
Build custom eboot.elf
Replace eboot.elf for sketch builds
Update eboot bootloader to load app from 0x00080000
Code: Select all
user@localhost:~/esp8266/bootloaders/eboot$ git diff
diff --git a/bootloaders/eboot/eboot.c b/bootloaders/eboot/eboot.c
index c3d0c278..ab3ff25c 100644
--- a/bootloaders/eboot/eboot.c
+++ b/bootloaders/eboot/eboot.c
@@ -301,6 +301,7 @@ int main()
if (cmd.action == ACTION_LOAD_APP) {
ets_printf("ld\n");
+ cmd.args[0] = 0x00080000;
res = load_app_from_flash_raw(cmd.args[0]);
// We will get to this only on load fail
ets_printf("e:%d\n", res);
diff --git a/bootloaders/eboot/eboot.elf b/bootloaders/eboot/eboot.elf
index 0e679ff4..69985ff5 100755
Code: Select all
user@localhost:~/esp8266/bootloaders/eboot$ make
Code: Select all
user@localhost:~/esp8266/bootloaders/eboot$ cp eboot.elf $HOME/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/bootloaders/eboot/
Re: Boot esp8266 app firmware from custom address
First app firmware for 0x0 address
Application for 0x0 address
Build application for 0x0 with custom eboot loader
Write application to 0x0
Application for 0x0 address
Code: Select all
user@localhost:~/esketch$ cat esketch.ino
void setup() {
Serial.begin(38400);
Serial.println("Hello, Setup!");
}
void loop() {
Serial.println("Hello, Loop 111!");
delay(1000);
}
Code: Select all
user@localhost:~/esketch$ ~/arduino-cli/bin/arduino-cli compile --log --verbose --output-dir ./build --fqbn esp8266:esp8266:nodemcuv2 .
Code: Select all
user@localhost:~/esketch$ $HOME/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/esptool/esptool.py --port /dev/ttyUSB0 write_flash 0x0 ./build/esketch.ino.bin
Re: Boot esp8266 app firmware from custom address
Second app firmware for 0x0008000 address
Application for 0x00080000 address
Build application for 0x00080000 with custom eboot loader
Write application to 0x00080000
Output
Application for 0x00080000 address
Code: Select all
user@localhost:~/esketch$ cat esketch.ino
void setup() {
Serial.begin(38400);
Serial.println("Hello, Setup!");
}
void loop() {
Serial.println("Hello, Loop 222!");
delay(1000);
}
Code: Select all
user@localhost:~/esketch$ ~/arduino-cli/bin/arduino-cli compile --log --verbose --output-dir ./build --fqbn esp8266:esp8266:nodemcuv2 .
Code: Select all
user@localhost:~/esketch$ $HOME/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/esptool/esptool.py --port /dev/ttyUSB0 write_flash 0x00080000 ./build/esketch.ino.bin
Code: Select all
21:32:36.975 -> �怢B��G�!�F!ĮC�))Hello, Setup!
21:32:36.975 -> Hello, Loop 222!
21:32:37.972 -> Hello, Loop 222!
21:32:38.968 -> Hello, Loop 222!
Re: Boot esp8266 app firmware from custom address
Second app firmware for 0x0008000 address with additional output string
Application for 0x00080000 address with additional output string
Build application for 0x00080000 with custom eboot loader
Write application to 0x00080000
Output is garbage
Application for 0x00080000 address with additional output string
Code: Select all
user@localhost:~/esketch$ cat esketch.ino
void setup() {
Serial.begin(38400);
Serial.println("Hello, Setup!");
}
void loop() {
Serial.println("Hello, Loop 222!");
Serial.println("Additional string that will break app!");
delay(1000);
}
Code: Select all
user@localhost:~/esketch$ ~/arduino-cli/bin/arduino-cli compile --log --verbose --output-dir ./build --fqbn esp8266:esp8266:nodemcuv2 .
Code: Select all
user@localhost:~/esketch$ $HOME/.arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/esptool/esptool.py --port /dev/ttyUSB0 write_flash 0x00080000 ./build/esketch.ino.bin
Code: Select all
21:43:47.653 -> L��g
21:43:47.653 -> J�J�Ʌ��叽ʑ�@�V(�E#��r�H�X̄ֈ����F�V(�)����ĤC��n����M���E���A�B̝�3����D��b�HJ
21:43:47.717 -> 긞���JJJ s)�����3�V3(�������(�����vV8ߟ��p's!���3��Ɔ����!�))))$6������ʉ��(����@'b��k�Ḟ=�(J�ʈ��ʊ����3�(�����3�F+(������������L'b7
21:43:47.749 -> �懆�D#�(���1���JJJJ 3�(�����3�V#(�������)))(&����#rC�'3�(���3��Ą����!��JJJJ s)���������(����B!����č�t$�}�(j���ʊ����#�(�����1�B))JJ����������L'b7
Who is online
Users browsing this forum: No registered users and 8 guests