Конец данных, обычно это и есть последнее что записывается в прошивку, вот классический пример :
........... .data : AT (_etext) { __data_start = . ; *(.data) *(.data.*) SORT(CONSTRUCTORS) . = ALIGN(4); *(.fastrun) /* "RAM-Functions" */ /* added by mthomas */
} > DATA
. = ALIGN(4);
_edata = . ; PROVIDE (edata = .); ..........................................
Если нет своих или каких либо специальных секций, то содержимое прошивки представляет собой две секции : .text и .data, длины которых известны на этапе линковки и могут быть доступны для вычисления изнутри программы непосредственно по меткам линкера. Это как-бы азы работы с ld - описано по многу раз, как в инете, так и тут на форуме. В данном случае разбивают проект на crypto bootloader и приложение (app), выделяем 1 страницу флеш для хранения app crc и ее параметров (serial number, version и т.д.), размещаем их в памяти последовательно (bootloader + param page + app):
- шьем бутлодер - шьем с помощью бутлодера app (в этом месте бутлодер уже знает длину app) - бутлодер вычисляет app crc и вместе с переданными параметрами записывает все это дело в param page - при старте бутлодер проверяет себя, проверяет приложение, и если все пучком - стартует его - если нет - переходит в режим ожидания/программирования с соответствующей индикацией/сообщением
|