Их создают профессиональные программисты, в идеале знакомые с принципом работы прошиваемых устройств. Имей ввиду, что если ты о программировании первый раз слышишь, то это непосильная задача и никакой "программы" для этого не существует, кроме языков программирования...
У производителя SoC получаешь SDK, долго изучаешь, затем пишешь нужную тебе прошивку. Иногда там идут уже некоторые готовые примеры. А вообще, довольно мало интересного.
смотря для каких.. .
В любом устройстве как правило есть процессор с определенной архитектурой, гора контроллеров, флэш под то что ты называешь прошивкой-EEPROM чаще всего.. .
Сейчас большинство "прошивок" создаются на ассемблере, откатывается на эмуляторе и только потом тестируется на устройстве.. . В устройстве всегда присутствует разьем или контрольные точки для общения с процессором напрямую, можно назвать debag или hyper, не важно, например на принтерах он работает по протоколу rs232, на мобильных мало чем отличается кроме кодировки... Вот по нему и смотришь как ведет себя загрузчик, как проц распаковывает прошивку, сверяет checksumm выходит в готовность, откатываешь в устройстве давая определенные команды.. .
На навесное железо тестят на заводе по jtag-так что программер пляшет от того что железо исправно и не заморачивается.. .
Если тебе интересен сам процесс или последовательность создания дампа для отдачи в boot dounload-то он для каждого проца свой, но есть единые принципы-это написание, запаковка, реверс, сверка, гоняние на эмуле, доработка, тест в устройстве...