Цитата(owl @ Sep 13 2013, 16:10)

..1. Куча разнообразного железа, имеющего по сути дела одинаковый загрузчик.2. Куча версий основных программ предназначенных для разных версий изделий, которые могут быть несовместимы с железом. (Более поздняя версия железа не подходит для старой прошивки и наоборот)...
1) Каждая железка = свой уникальный ID и ID партии (читай топологии платы).
2) Вы можете как угодно тусовать софт, но всё равно либо часть, либо весь софт _должен_ знать ID партии(топологии). И именно это соответствие где то должно храниться для генерации новых прошивок и при контроле заливки софта.
3) Ещё один нюанс. Если софт универсален, и подходит для множества ID партий железок, то тогда _обязательно_ софт должен нести свой _уникальный_ ID соответствующий данной партии железок. Более того, этот ID должен легко считываться сервисной службой и иметь возможность его лёгкого воспроизведения Вами. Обычно при компиляции иф-дефами удобно отключать-подключать различные обработчики нижнего уровня (драйвера - модное словечко), и именно эти-же дефайны включают-выключают биты в ID данного софта.
к слову о надёжности -
сейчас пришёл даже к такому варианту:
внутри МК содержится(может содержаться) несколько версий модулей, либо всей прошивки в целом. бутлодырь имеет возможность анализировать надёжность каждой комбинации загрузки, и в случае большого кол-ва сбоев какой-либо комбинации - перейти на предыдущий вариант сборки. Сама сборка может содержать как фулл, диференциальные, так и инкрементальные версии...
по поводу шифрования и идентификатора.
нет необходимости шифровать идентификатор прошивки. достаточно сделать открытый заголовок-трейлер, который будет нести так-же все необходимые идентификаторы. Внутри прошивки нужно продублировать данную инфу, на предмет достоверности. Тем самым Вы в большинстве случаев сэкономите время на загрузке.