DIR825. Сборка образа ОСи.
DIR825. Сборка образа ОСи.
Используя один из образов (сборок, прошивок), скачанных с сайта openwrt.org — мы используем предоставленную нам «базу», на которую уже впоследствии можем дополнительно установить те или иные пакеты, а также проконфигурировать всё необходимым образом. Случаются случаи, когда операционку приходится «переустанавливать» («прошиваться» с нуля), и тогда приходится «накатывать» все желаемые пакеты заново, а также конфигурировать все хозяйство (разумеется предварительно нужно где-то создавать и хранить перечень того чего нужно установить и как это сконфигурить). Так же возможен и такой поворот событий — некую функцию (скажем поддержку файловой системы ext3) хочется иметь в ядре системы, а не установленную как отдельный модуль; или, например, функциональность командного интерпретатора busybox недостаточна (а собран он в базовой прошивке не со всеми возможными модулями) … примеры можно привести и еще. Все это к тому, что в ряде случаев (если не в большинстве) целесообразно (или необходимо) «собирать» образ прошивки из исходников самому.
С чего начать?
Много раз я пытался подойти к процессу сборки с разных сторон, копал даже на предмет сборки прошивки в самом маршрутизаторе. Но все оказалось намного проще. Пробел в недостающей информации был заполнен из статьи http://dipcore.com/?p=117 (рекомендую к прочтению и не буду повторять инфу, описанную в ней). Для всего этого нам потребуется виртуальная машина, на которую мы ставим линукс (например Ubuntu), хард под виртуалкой – 20гиг. Руководствуемся вышеуказанной статьей (единственно, что в ней не указано, что придется доустановить необходимые пакеты, на отсутствие которых будут ругаться вызываемые нами утилиты – сделать это не сложно – в графическом интерфейсе установщика пакетов ищем похожий по названию с запрашиваемым пакет, ставим его, проверяем что на его отсутствие больше никто не ругается – и так со всеми). Планируется позднее описать некоторые нюансы создания с виртуальной машины …
Ух-ты – как всего много – ВСЕ ХОЧУ!!!
Подобные эмоции возникают при взгляде на конфигурационное меню образа прошивки. Но стоит помнить о невозможности объять необъятное – у нас всего шесть метров доступной встроенной флеш-памяти под образ, поэтому ничего лишнего… Большинство требуемых и полезных вещей можно установить и потом (как обычно) на внешний подмонтированный накопитель (см. здесь). В образ же следует включать только те вещи, которые действительно должны быть там и в некоторых случаях те, которые вы непременно установите сразу после инсталляции образа в устройство. Считаю излишним рассматривать, а тем более объяснять и доказывать целесообразность включения тех или иных компонентов в образ – раз уж вы «дошли» до понимания необходимости самостоятельной сборки образа, ты вы знаете, что вам нужно, не буду лишать вас удовольствия сконфигурить образ самому, а тем более права выбора ;-)) Одновременно с этим хочу добавить, что с одной стороны нет смысла компилировать компоненты как «пакеты» (модули —
Чуточку подсказок.
Хочу акцентировать внимание на некоторые нюансы процесса сборки и использования своего образа, а также вопросы, возникающие по ходу.
Встроенная флеш-память логически поделена на несколько блоков (областей), в которых хранится различная информация – обновление образа (смена прошивки) не затрагивает (и не должна затрагивать!) большинство блоков. Подробнее:
dev ** |
Size* |
erasesize |
name |
description |
mtd0 |
00040000 (256K) |
00010000 |
"uboot" |
Начальный загрузчик (критическая область – восстанавливается только через JTAG) |
mtd1 |
00010000 (64K) |
00010000 |
"config" |
Блок конфигурации оригинальной прошивки D-Link, хранит в текстовом виде многие настройки – в OpenWrt не используется! |
mtd2 |
00100000 (1M) |
00010000 |
"kernel" |
Ядро системы OpenWrt (linux-kernel) |
mtd3 |
00510000 (5M+64K) |
00010000 |
"rootfs" |
Файловые системы squashfs + jffs2 (предустановленные компоненты и пр.) |
mtd4 |
003d0000 (3M+832K) |
00010000 |
"rootfs_data" |
Зеркало на часть предыдущей области (файловая система jffs2) — размер варьируется в зависимости от заполнения данными файловой системы образа (squashfs) |
mtd5 |
00010000 (64K) |
00010000 |
"caldata" |
Калибровочные данные для Wi-Fi карт именно конкретного экземпляра устройства (критическая область – уникальна для каждого устройства, лучше сразу сделать и хранить резервную копию) |
mtd6 |
00190000 (1600K) |
00010000 |
"unknown" |
Функционал «науке не известен» … (кто знает, прошу сообщить ;-) |
mtd7 |
00610000 (6M+64K) |
00010000 |
"firmware" |
Зеркало — «Сумма» блоков 2 и 3 – собственно и составляют «образ» («прошивка») |
* Размерность, указанная в скобках, не боле чем для наглядного представления и понимания шестнадцатеричного значения. Знак «+» носит условный (чисто математический) характер и не означает разделения области на несколько частей.
** Подобную табличку можно получить командой cat /proc/mtd.
Существует множество способов работы с содержимым флеш-памяти. Перечисли некоторые из них:
- Средствами загрузчика U-Boot – пока не рассматривается (требует распайки интерфейса UART?).
- Средствами утилиты mtd (может быть как включена в образ, так и устанавливаться отдельно).
- Средствами утилиты dd (команды вида dd if=/dev/mtd7ro of=/tmp/firmware.dump для резервирования области и dd if=/tmp/firmware.dump of=/dev/mtd7 а для записи области).
- Средствами стандартной веб-морды (backup loader) обновления прошивки (интересно, где реализован ее код?): при включении маршрутизатора держим кнопку «ресет» до тех пор, пока светодиод питания не начнет равномерно мигать – тогда и коннектимся к морде браузером до адресу 192.168.0.1, находясь в той же подсети … Собственно это основной (максимально удобный) способ обновления образа оси, без риска «загубить» что либо еще.
Перед началом конфигурирования сборки все компоненты (вне зависимости активированы они или нет) помечены как «(NEW)» — после первого изменения состояния пометка пропадает, таким образом можно контролировать: в отношении использования каких компонентов мы меняли свое решение.
Пока на этом закончим (совсем мало времени сейчас … — планирую статью расширить) … Со временем также планируется создание темы с описанием компонентов и ссылками на образы прошивок, собранных мной в поисках оптимала.
Сентябрь 2010.
Продолжение и дополнение следует.