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.

Существует множество способов работы с содержимым флеш-памяти. Перечисли некоторые из них:

  1. Средствами загрузчика U-Boot – пока не рассматривается (требует распайки интерфейса UART?).
  2. Средствами утилиты mtd (может быть как включена в образ, так и устанавливаться отдельно).
  3. Средствами утилиты dd (команды вида dd if=/dev/mtd7ro of=/tmp/firmware.dump для резервирования области и dd if=/tmp/firmware.dump of=/dev/mtd7 а для записи области).
  4. Средствами стандартной веб-морды (backup loader) обновления прошивки (интересно, где реализован ее код?): при включении маршрутизатора держим кнопку «ресет» до тех пор, пока светодиод питания не начнет равномерно мигать  – тогда и коннектимся к морде браузером до адресу 192.168.0.1, находясь в той же подсети … Собственно это основной (максимально удобный) способ обновления образа оси, без риска «загубить» что либо еще.

Перед началом конфигурирования сборки все компоненты (вне зависимости активированы они или нет) помечены как «(NEW)» — после первого изменения состояния пометка пропадает, таким образом можно контролировать: в отношении использования каких компонентов мы меняли свое решение.

 

Пока на этом закончим (совсем мало времени сейчас … — планирую статью расширить) …  Со временем также планируется создание темы с описанием компонентов и ссылками на образы прошивок, собранных мной в поисках оптимала.

 

Сентябрь 2010.

Продолжение и дополнение следует.