Формат прошивок

В данном разделе описаны форматы файлов прошивок. Данная информация может быть полезна тем, кто захочет создать собственную модификацию прошивки или портировать прошивки от других маршрутизаторов.

В общем случае все прошивки содержат 2 области: Kernel и RootFSKernel - ядро ОС Linux, RootFS - упакованная файловая система роутера. В разметке флеш-памяти DIR-620 и dd-wrt также присутствуют область Linux. Данная область представляет собой "склеенные" области Kernel и RootFS.

Формат файла прошивки DIR-620
Формат файла прошивки dd-wrt
Формат файла прошивки ZyXEL Keenetic
Формат файла прошивки для загрузки через uboot

Формат файла прошивки DIR-620

Стандартный файл прошивки DIR-620 имеет расширение.fwz, представляет собой.tar.gz архив с расположенными в нём образами областей Kernel и RootFS, списком прошиваемых областей и скриптом прошивки:


./runme - скрипт прошивки. Запускается после успешной распаковки архива на роутере, освобождает память роутера выгрузкой запущенных процессов, производит запуск процедуры прошивки областей, указанных в файле list;
./img/list - список областей прошивки. Содержит имена файлов, соответствующие именам прошиваемых областей флеш-памяти роутера. В стандартной прошивке содержит строки "Kernel", "RootFS";
./img/Kernel - ядро ОС Linux роутера;
./img/RootFS - файловая система роутера.

При создании данного архива необходимо учитывать размеры областей. Файл Kernel должен размером быть не более 917504 байт (0xE0000), RootFS - не более 7143424 байт (0x6D0000). Целостность прошивки DIR-620 проверяется при распаковке архива на роутере.

Формат файла прошивки dd-wrt

Файл прошивки dd-wrt имеет расширение.bin. Состоит из заголовка и областей kernel, rootfs:

адресразмер области в байтахописание области
1 0x00000000 4 Сигнатура заголовка "HDR0"
2 0x00000004 4 Размер файла прошивки вместе с заголовком
3 0x00000008 4 Инвертированная CRC32, рассчитанная начиная с адреса 0x0000000c до конца файла
4 0x0000000C 4 Версия прошивки (0:15 - флаги, 16:31 - версия)
5 0x00000010 4 Адрес начала прошивки относительно начала заголовка (обычно 0x0000001C)
6 0x0000001C - Области kernel и rootfs

Размеры областей kernel и rootfs в сумме не должны превышать 7995392 байт (0x7A0000).

Формат файла прошивки ZyXEL Keenetic

Файл прошивки ZyXEL Keenetic имеет расширение.bin, состоит из образов областей Kernel и RootFS, названия прошивки и контрольной суммы:

адресразмер области в байтахописание области
1 0x00000000 1245184 (0x130000) Ядро Linux
2 0x00130000 до 4653056 (0x470000) Файловая система роутера
3 - 56 Название прошивки
4 - 4 Инвертированная CRC32, рассчитанная начиная с адреса 0x00000000 до начала названия прошивки

В роутере с прошивкой Keenetic, при загрузке новой прошивки через веб-интерфейс кроме контрольной суммы проверяется наличие сигнатуры начала RootFS "hsqs" по адресу 0x130000. Если данной сигнатуры роутер не находит - прошивка считается поврежденной. Вот почему мне не удалось сделать откат DIR-620 из Keenetic на родную прошивку через веб-интерфейс.

Формат файла прошивки для загрузки через uboot

Файл прошивки для загрузки через uboot представляет собой образы Kernel и RootFS, склеенные вместе. Никаких заголовков и контрольных сумм.

Вы должны зарегистрироваться или авторизоваться для комментария