OpenWrt Buildroot – Использование

→ вернуться обратно к Получить прошивку или читать →OpenWrt Buildroot – Описание

Условия

  1. Установите OpenWrt Buildroot с необходимыми параметрами на вашу ОС.

Методика

1. Делайте все не под суперпользователем (non-root)
2. Выполняйте все команды в каталоге <buildroot dir>, например ~/openwrt/trunk/
  1. Скачать исходные коды OpenWrt.
  2. Обновить исходные коды OpenWrt(если требуется).
  3. Обновить и установить пакеты из репозитория.
  4. Настроить параметры сборки.
  5. Запустить сборку. Будет произведена автоматическая компиляция набора инструментов (toolchain), кросс-компиляция исходных кодов, пакетов, и в конце будет сгенерирован образ готовый к прошивке.
  6. Приступить к установке OpenWrt

Скачивание исходных кодов

Скачайте исходные коды:

svn co svn://svn.openwrt.org/openwrt/trunk/

Если необходимо скачать определенную редакцию, то добавляем параметр -r

 svn co -r 39251 svn://svn.openwrt.org/openwrt/trunk/

Обновление исходных кодов

Обновите исходные коды :

svn update

  • Исходные коды OpenWrt часто изменяются. Рекомендуется использовать исходные коды последней редакции.

Обновление репозитория

Обновите репозиторий:

./scripts/feeds update -a

Установите загруженные пакеты: (не обязательно)

Для установки индивидуальных пакетов:

./scripts/feeds install <PACKAGENAME>

Чтобы собрать все дерево пакетов:

./scripts/feeds install -a
ПРЕДУПРЕЖДЕНИЕ Это займет очень много времени и не требуется, если вы планируете развертывание репозитория пакетов для своей сборки.

Настройка параметров сборки

Запустите OpenWrt Buildroot's ncurses - текстовый интерфейс настройки:

make menuconfig

Как и в конфигурации ядра Linux, почти каждая опция имеет 3 значения: y / m / n ,которые представлены следующим образом:
* (нажав `y`) Этот пакет будет включен в образ прошивки
* (нажав `m`) Этот пакет будет скомпилирован (и может быть установлен с помощью opkg после прошивки OpenWrt), но не будет включен в образ прошивки
* (нажав `n`) Этот пакет не будет скомпилирован

Когда вы сохраняете конфигурацию создается файл ~/openwrt/trunk/.config содержащий параметры сборки.

Разработчики предлагают такой файл для OpenWrt 'Backfire' 10.03.1-RC5,
например для ar71xx.
  • Это меню позволяет выбрать платформу, версию набора инструментов (toolchain), которую вы хотите использовать для сборки и пакеты, которые вы хотите включить в образ прошивки.
  • Запустите этот конфигурационный интерфейс после обновления исходных кодов и репозитория для того, чтобы последние пакеты были включены в вашу конфигурацию.

Defconfig

выберите вашу платформу перед использованием defconfig

make defconfig
будет произведено основное конфигурирование системы сборки, включая проверку зависимостей и условий для окружения сборки и т.п.

будет проводится проверка для зависимостей. Установите отсутствующие компоненты и запустите снова.

Общая настройка

Menuconfig имеет ТПИ, который предназначен для выбора платформы, пакетов для компиляции, пакетов для включения в файл прошивки, некоторые параметры ядра и т.д.

make menuconfig

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

С самого начала было намерение разработать 'menuconfig', чтобы создать простую, но мощную среду для конфигурирования индивидуальных образов OpenWrt. Menuconfig более или менее понятен, поэтому даже самые специфические задачи конфигурирования могут быть решены с его помощью. В зависимости от конкретной платформы, необходимых пакетов и модулей ядра стандартный процесс конфигурирования будет включать в себя изменение следующих пунктов:

  1. Платформа системы
  2. Выбор пакетов
  3. Настройки системы сборки
  4. Модули ядра

Платформа выбирается из обширного списка поддерживаемых платформ с многочисленными профилями - начиная от конкретных устройств и заканчивая общими профилями, все зависит от имеющегося устройства. Выбор пакетов имеет несколько вариантов: либо выбрать все пакеты ('selecting all package'), которые могут быть просто не практичны в конкретной ситуации, либо будет достаточно использовать стандартный набор пакетов, либо сделать индивидуальную подборку. Здесь необходимо отметить, что некоторые комбинации пакетов могут нарушить процесс сборки, так что возможно понадобится поэкспериментировать, прежде чем ожидаемый результат будет достигнут. В дополнение к этому, сами разработчики OpenWrt поддерживают лишь небольшой набор пакетов - который включает в себя все стандартные пакеты - но скрипт репозитория позволяет очень просто обработать локальный поддерживаемый набор пакетов и интегрировать их в процессе сборке.

Существуют 3 значения:

  • < > исходный код не будет обрабатываться
  • <M> исходный код пакета будет кросс-скомпилирован в бинарный файл и opkg пакет будет собран и помещен в /buildsystem/bla/bla/bla, но ImageGenerator не включит его в образ прошивки!
  • <*> пакет будет включен в прошивку (в SqashFS раздел)

Последний шаг перед началом компиляции образа(ов) - выход из 'menuconfig' - здесь можно сохранить определенную конфигурацию или загрузить уже существующую и предварительно настроенную.

Выйти из ТПИ и выбрать save - сохранить ваши настройки.

Настройка ядра

Обычно это не требуется, но вы можете это сделать:

make kernel_menuconfig

Обратите внимание, что make kernel_menuconfig изменяет конфигурационные шаблоны ядра дерева сборки и очистка build_dir не вернет их. Изменения могут быть просмотрены с помощью команды svn diff target/linux/ и отменены командой svn revert -R target/linux/.

Смотрите: настройка параметров ядра

Зеркала источников

'Настройки системы сборки' включают в себя несколько эффективных опций для изменения расположения пакетов, которые позволяют легко управлять локальным набором пакетов:

  1. Локальное зеркало для источника пакетов
  2. Каталог загрузки

В первом случае можно просто ввести полный URL-адрес на WEB или FTP-сервер, на котором размещается источник пакетов. Каталог загрузки - такой же путь, только к локальному каталогу системы сборки (или сети). Если у вас есть WEB/FTP-сервер c архивами, система сборки OpenWrt проверит их перед тем как скачать с адресов, указанных в Make-файлах. Также и локальный каталог загрузки, размещенный в системе сборки будет проверен.

Опция 'модули ядра' нужна если требуются специфические (не стандартные) драйвера и т.д. – это, как правило, могут быть такие вещи, как модули для USB или драйвера конкретного сетевого интерфейса и т.д.

Пользовательские файлы

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

<buildroot dir>/files/

Например, предположим что вы хотите собрать образ с предварительно настроенным /etc/config/firewall, тогда поместите ваш измененный конфигурационный файл firewall сюда:

<buildroot dir>/files/etc/config/

Сборка образа

Теперь все готово для сборки образа(ов), которая осуществляется с помощью одной команды:

make

Эта простая команда вызовет последовательность событий. Как уже говорилось, произойдет:

  1. компиляция набора инструментов (toolchain)
  2. потом кросс-компиляция исходных кодов с этим инструментарием
  3. создание opkg-пакетов
  4. создание образа прошивки, готового к прошивке.

Параметры Make

Сборка на многоядерном процессоре

Процесс сборки можно ускорить запустив несколько параллельных задания с использованием параметра -j:

make -j 3

  • Используйте стандартную формулу <количество процессоров + 1>
  • Если это приводит к случайным ошибкам сборки запустите компиляцию еще раз, но без параметра -j

Фоновая сборка

Если вы собираетесь использовать вашу систему во время процесса сборки, вы можете выполнять сборку используя только простой ввода/вывода и мощности процессора, например так (двухъядерный процессор):

ionice -c 3 nice -n 20 make -j 2

Сборка одиночных пакетов

При разработке или создании пакетов для OpenWrt удобно иметь возможность сборки только нужного пакета (пример с пакетом cups):

make package/cups/compile V=99

Обнаружение ошибок сборки

Если по какой-то причине сборка не удается, то самый простой способ определить ошибки это:

make V=99 2>&1 | tee build.log | grep -i error

Команда сохраняет полную подробную копию вывода сборки (с stdout переданный в stderr) в /openwrt/trunk/build.log и показывает на экране только ошибки.

Другой пример:

ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 | tee build.log | egrep -i '(warn|error)'

еще один:

somthing something screen

Команда сохраняет полную подробную копию вывода сборки (с stdout переданный в stderr) в build.log и показывает только предупреждения и ошибки в процессе сборки используя только фоновые ресурсы двухъядерного процессора.

Включение звуковых уведомлений

В зависимости от вашего процессора этот процесс займет некоторое время или дольше. Если вы хотите включить звуковые уведомления можете использовать echo -e '\a':

make V=99 ; echo -e '\a'

Размещение образов

После успешной сборки созданный образ(ы) можно найти в созданном каталоге <buildroot dir>/bin. Скомпилированные файлы дополнительно классифицированы по платформе, так что, например, прошивка собранная для устройтв ar71xx будет находиться в каталоге <buildroot dir>/bin/ar71xx.

Например, если ваш <buildroot dir> это /openwrt/trunk, файлы находятся в /openwrt/trunk/bin/ar71xx.

Очистка

Время от времени вам может понадобиться очистить среду сборки. Следующие параметры make подходят для этой цели:

Clean

make clean

удаляет содержимое каталогов bin и build_dir.

Dirclean

make dirclean

удаляет содержимое каталогов /bin и /build_dir, а также дополнительно /staging_dir и /toolchain (инструментарий кросс-компиляции). 'Dirclean' - основная команда для полной очистки.

Distclean

make distclean

удаляет все что вы собрали или настроили, а также удаляет все загруженное из репозитория и исходные коды пакетов.

ВНИМАНИЕ : Кроме всего прочего будет стерта ваша конфигурация сборки (.config), ваш набор инструментов (toolchain) и все прочие исходные коды. Используйте с осторожностью!

Есть множество других функций в системе сборки OpenWrt, но выше рассмотрены некоторые из основных.

Примеры

Устранение неполадок

В начале получите больше информации о проблеме используя параметр make - "make V=99".

  • Missing source code file, due to download problems.

Сначала проверьте, если URL-путь в make-файле содержит обратный слэш, то поэкспериментируйте с его удаленем (помогло несколько раз). В противном случае попробуйте загрузить исходный код вручную и поместить его в каталог "dl"

  • Compilation errors.
  • Не забудьте установить все необходимые пакеты для сборки:

http://wiki.openwrt.org/doc/howto/buildroot.exigence#examples.of.package.installations

  • В процессе компиляции возможно будет не доставать какого-то пакета. Ищите в выводе (make V=s) строку типа:

bash: неизвестная команда hg #например
Решение (ubuntu 12.04LTS): Вводим в теминале команду hg (например). Вывод терминала:
 Программа 'hg' на данный момент не установлена.  Вы можете установить её, выполнив:
sudo apt-get install mercurial 
Выполняем что просят: sudo apt-get install mercurial

Запускаем сборку (make) снова.

  • Проблема со сборкой cmus:

 checking for header <sys/soundcard.h>... no configure failed 
http://patchwork.openwrt.org/patch/2713/

Решение (ubuntu 12.04LTS):

#от root
cd /usr/include
ln -s linux/soundcard.h #возможно это лишнее
mkdir sys
cd sys
ln -s ../linux/soundcard.h


Попробуйте обновить основной исходный код и все репозитории (Внимание! Может привести к другим проблемам). Поищите похожие ошибки в (TRAC), используйте фильтры, чтобы найти их. В противном случае сообщите об этой проблеме там, указав пакет, выходные данные (процессор, образ и т.п.) и код ревизии (main & package). Компиляция с make -j … иногда дает случайные ошибки. Попробуйте компиляцию без -j прежде чем сообщать об ошибке.

  • Bad environment variables.
    • GREP_OPTIONS не должен иметь –initial-tab или другие параметры, влияющие на его вывод
    • SED не должен быть установлен. Если это так, запустите `unset SED` перед компиляцией. (Смотрите Ticket 10612.)

Примечания

Back to top

ru/doc/howto/build.txt · Last modified: 2014/04/22 19:13 by karlp · Currently locked by: karlp