| → вернуться обратно к Получить прошивку или читать →OpenWrt Buildroot – Описание |
| | 1. Делайте все под обычным пользователем (не под суперпользователем, non-root) 2. Выполняйте все команды в каталоге <buildroot dir>, например ~/openwrt/trunk/ |
Скачайте исходные коды: Свежая версия (trunk)
git clone https://github.com/openwrt/openwrt.git
(Последний) релиз Chaos Calmer 15.05.1
git clone https://github.com/openwrt/openwrt.git -b v15.05.1
Последняя версия в ветке Chaos Calmer
git clone https://github.com/openwrt/openwrt.git -b chaos_calmer
Обновите исходные коды :
git pull
Обновите репозиторий:
./scripts/feeds update -a
“Установите” загруженные пакеты (не обязательно, но требуется, если вы хотите , к примеру, собрать прошивку с LuCI).
Эта процедура создаст символьные ссылки на подкаталоги пакетов в основном “дереве” исходных текстов.
Для установки индивидуальных пакетов:
./scripts/feeds install <PACKAGENAME>
Чтобы собрать всё дерево пакетов:
./scripts/feeds install -a
** ПРЕДУПРЕЖДЕНИЕ ** Это может занять много времени и не требуется, если вы не планируете развертывание репозитория пакетов для своей сборки.
Типичные действия по сборке:
make menuconfig, настраиваем платформу (Target System, Subtarget, Target Profile) и сохраняем конфигурацию в файл .config;make defconfig (применяем стандартные параметры для профиля);make menuconfig, модифицируем набор пакетов и сохраняем конфигурацию (в файл .config);scripts/diffconfig.sh >mydiffconfig (сохраняем свои изменения конфигурации в файл mydiffconfig на будущее);make либо make V=w либо make V=s.
Запустите 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. |
выберите вашу платформу перед использованием defconfig
make defconfig
будет произведено основное конфигурирование системы сборки, включая проверку зависимостей и условий для окружения сборки и т.п.
будет проводится проверка для зависимостей. Установите отсутствующие компоненты и запустите снова.
Menuconfig имеет ТПИ, который предназначен для выбора платформы, пакетов для компиляции, пакетов для включения в файл прошивки, некоторые параметры ядра и т.д.
make menuconfig
В результате автоматически обновятся зависимости в существующей конфигурации и вы сможете приступить к сборке образа.
С самого начала было намерение разработать 'menuconfig', чтобы создать простую, но мощную среду для конфигурирования индивидуальных образов OpenWrt. Menuconfig более или менее понятен, поэтому даже самые специфические задачи конфигурирования могут быть решены с его помощью. В зависимости от конкретной платформы, необходимых пакетов и модулей ядра стандартный процесс конфигурирования будет включать в себя изменение следующих пунктов:
Платформа выбирается из обширного списка поддерживаемых платформ с многочисленными профилями - начиная от конкретных устройств и заканчивая общими профилями, все зависит от имеющегося устройства. Выбор пакетов имеет несколько вариантов: либо выбрать все пакеты ('selecting all package'), которые могут быть просто не практичны в конкретной ситуации, либо будет достаточно использовать стандартный набор пакетов, либо сделать индивидуальную подборку. Здесь необходимо отметить, что некоторые комбинации пакетов могут нарушить процесс сборки, так что возможно понадобится поэкспериментировать, прежде чем ожидаемый результат будет достигнут. В дополнение к этому, сами разработчики OpenWrt поддерживают лишь небольшой набор пакетов - который включает в себя все стандартные пакеты - но скрипт репозитория позволяет очень просто обработать локальный поддерживаемый набор пакетов и интегрировать их в процессе сборке.
Существуют 3 значения:
/buildsystem/bla/bla/bla, но ImageGenerator не включит его в образ прошивки!Последний шаг перед началом компиляции образа(ов) - выход из 'menuconfig' - здесь можно сохранить определенную конфигурацию или загрузить уже существующую и предварительно настроенную.
Выйти из ТПИ и выбрать save - сохранить ваши настройки.
Обычно это не требуется, но вы можете это сделать:
make kernel_menuconfig
Обратите внимание, что make kernel_menuconfig изменяет конфигурационные шаблоны ядра дерева сборки и очистка build_dir не вернет их.
Изменения могут быть просмотрены с помощью команды svn diff target/linux/ и отменены командой svn revert -R target/linux/.
Смотрите: настройка параметров ядра
'Настройки системы сборки' включают в себя несколько эффективных опций для изменения расположения пакетов, которые позволяют легко управлять локальным набором пакетов:
В первом случае можно просто ввести полный URL-адрес на WEB или FTP-сервер, на котором размещается источник пакетов. Каталог загрузки - такой же путь, только к локальному каталогу системы сборки (или сети). Если у вас есть WEB/FTP-сервер c архивами, система сборки OpenWrt проверит их перед тем как скачать с адресов, указанных в Make-файлах. Также и локальный каталог загрузки, размещенный в системе сборки будет проверен.
Опция 'модули ядра' нужна если требуются специфические (не стандартные) драйвера и т.д. – это, как правило, могут быть такие вещи, как модули для USB или драйвера конкретного сетевого интерфейса и т.д.
Во многих случаях, может потребоваться иметь предварительно настроенный образ. Если так, то поместите свои файлы в:
<buildroot dir>/files/
Например, предположим что вы хотите собрать образ с предварительно настроенным /etc/config/firewall, тогда поместите ваш измененный конфигурационный файл firewall сюда:
<buildroot dir>/files/etc/config/
Теперь все готово для сборки образа(ов), которая осуществляется с помощью одной команды:
make
или (то же самое)
make world
Эта простая команда вызовет последовательность событий. Как уже говорилось, произойдет:
Команда make world сама выполняет следующую последовательность команд:
make target/compile
make package/cleanup
make package/compile
make package/install
make package/preconfig
make target/install
make package/index
Вы можете выполнить каждую из них отдельно. Например, если процесс компиляции какого-либо пакета прервался с ошибкой, после устранения ошибки можно продолжить сборку (без удаления уже сделанного):
make package/compile
make package/install
make package/preconfig
make target/install
make package/index
Параметр V=xx указывает уровень выдачи сообщений в процессе сборки.
Значением V можно указать:
1 или w - выводить путь к каталогу при входе в него и после выхода из него;99 или s - выводить полную информацию о сборке, обычные сообщения жёлтым, ошибки красным, отладочные чёрным.Примеры:
make V=w
Трассировка каталогов (путей).
make V=s
make V=99
Трассировка с полной информацией о сборке.
make V=sw
Тоже полная трассировка. (Если указать два значения, работает более полный вывод.)
Процесс сборки можно ускорить запустив несколько параллельных задания с использованием параметра -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 подходят для этой цели:
make clean
удаляет содержимое каталогов bin и build_dir.
make dirclean
удаляет содержимое каталогов /bin и /build_dir, а также дополнительно /staging_dir и /toolchain (инструментарий кросс-компиляции). 'Dirclean' - основная команда для полной очистки.
make distclean
удаляет все что вы собрали или настроили, а также удаляет все загруженное из репозитория и исходные коды пакетов.
** ВНИМАНИЕ : Кроме всего прочего будет **стерта ваша конфигурация сборки (.config), ваш набор инструментов (toolchain) и все прочие исходные коды. Используйте с осторожностью!
Есть множество других функций в системе сборки OpenWrt, но выше рассмотрены некоторые из основных.
В начале получите больше информации о проблеме используя параметр make - “make V=99”.
Сначала проверьте, если URL-путь в make-файле содержит обратный слэш, то поэкспериментируйте с его удаленем (помогло несколько раз). В противном случае попробуйте загрузить исходный код вручную и поместить его в каталог “dl”
http://wiki.openwrt.org/doc/howto/buildroot.exigence#examples.of.package.installations
bash: неизвестная команда hg #например
Решение (ubuntu 12.04LTS): Вводим в теминале команду hg (например). Вывод терминала:
Программа 'hg' на данный момент не установлена. Вы можете установить её, выполнив: sudo apt-get install mercurial
Выполняем что просят: sudo apt-get install mercurial
Запускаем сборку (make) снова.
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 прежде чем сообщать об ошибке.
GREP_OPTIONS не должен иметь --initial-tab или другие параметры, влияющие на его выводSED не должен быть установлен. Если это так, запустите `unset SED` перед компиляцией. (Смотрите Ticket 10612.)