• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Модификация бинарника

AlexeyGR

New member
После редактирования бинарника прошивки в секции данных (замена 2-ух символов не влияющаю на выполнение кода) и заливки в модуль, последний отказывается работать.
С чем это связано?, неужели считается контрольная сумма (типа защиты)?
 

pvvx

Активный участник сообщества
После редактирования бинарника прошивки в секции данных (замена 2-ух символов не влияющаю на выполнение кода) и заливки в модуль, последний отказывается работать.
С чем это связано?, неужели считается контрольная сумма (типа защиты)?
Никакой контрольки там нет.
 

pvvx

Активный участник сообщества
Бинарник ESP_8266_v0.9.2.2 AT Firmware, заменил три символа ESP_%02X%02X%02X на AAA_%02X%02X%02X в итоге не отвечает на АТ команды.
Эта надпись находится в сегменте данных и грузится отдельно. Проверка есть только у первых, обычно 3-х кусков:
Segment 1: offset: 0x40100000, size: 26236
Segment 2: offset: 0x3ffe8000, size: 2744
Segment 3: offset: 0x3ffe8ac0, size: 5692

У них проверяется chksum:
load 0x40100000, len 26236, room 16
tail 12

chksum 0xa3
ho 0 tail 12 room 4
load 0x3ffe8000, len 2744, room 12
tail 12

chksum 0x18
ho 0 tail 12 room 4
load 0x3ffe8ac0, len 5692, room 12
tail 0

chksum 0x9d
csum 0x9d
Остальная, большая часть - код и данные кешируемых сегментов flash, проверок не имеют.
Вам повезло, что решили изменить имя WiFi, устанавливаемое по умолчанию и оно находиться в блоке, загружаемым 3-тим, как константы в RAM. :)

Самый простой метод, если меняете что-то в "ESP_8266_v0.9.2.2 AT Firmware.bin" до адреса 0x87ff - изменить и прошить. Потом запустить и посмотреть что напишет загрузчик (78400 baud) в последней строке "chksum 0xe6" - это значение и прописать в байт по адресу 0x87ff.
"chksum 0xe6" - это как раз "AAA_" и после загрузки наблюдаем:
AT+CWSAP?
+CWSAP:"AAA_9FC0BF","",1,0
OK
На другие прошивки это может не распространятся - там могут быть другие начальные загрузчики. Такие как boot_v1.1.bin или boot_v1.2.bin...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Корректное замечание), именно в сегменте (это не плоская модель памяти flat), большое спасибо за исчерпывающий ответ!
В SDK 0.9.5 такие переменные переехали в другую часть (в конец второго блока кодов, после них, ближе к концу flash) и там нет контрольки.
Все эти flat и сегменты чисто условно. Сегментами (кусками) грузит встроенный загрузчик в чипе (BootROM): ESP8266 Формат данных прошивки, протокол обмена
 
Последнее редактирование:
Сверху Снизу