Формат прошивок
В данном разделе описаны форматы файлов прошивок. Данная информация может быть полезна тем, кто захочет создать собственную модификацию прошивки или портировать прошивки от других маршрутизаторов.
В общем случае все прошивки содержат 2 области: Kernel и RootFS. Kernel - ядро ОС 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, склеенные вместе. Никаких заголовков и контрольных сумм.
- Подробности
- Дата публикации 02.01.2015 07:36