пятница, 14 июля 2017 г.

Знакомство с buildroot

Сегодня на мой рабочий комп попал buildroot. Вот это событие! Кривая корзинка со скриптами и исходниками, торчащими во все стороны. Запускаю makeall, страшно, но оно даже начало компилироваться. Чтобы унять тревогу утыкаюсь в какой то мануал. Читаю: "buildroot, в основном, используется людьми", обнадеживает, успокаивает.
Почитав мануал понял, не такая уж и кривая штука это билдрут, там оказывается все продумано и ориентировано на встраиваемые системы. Облегченная Ulibc вместо тяжелой gnulibc, busybox который позволяет настраивать набор стандартных инструментов. Все можно настроить через отдельные менюшки, а на весь билдрут целиком есть своя менюшка. Сам же билдрут аккуратно структурирован. Отдельные папки для makefile, для исходников, для билда и для тулчейна. Хорошо, тут тоже есть свой порядок. Потыкал палкой терминал, компиляция продолжается, ошибки не вылетают. Вполне даже адекватная штуковина, напоследок скопирую сюда инфу о структуре билдрута с найденного мануала.

Копипаста:

Как работает Buildroot.

Как сказано выше, Buildroot это в основном набор Makefiles, которые закачивают, конфигурируют и компилируют программы, задавая правильные параметры. Buildroot также включает некоторые patches (корректировки) для различных программ, преимущественно включенных в cross-compilation toolchain (цепочку инструментов кросс-компиляции) (gcc, binutils и uClibc).

В основном один Makefile на программу и расширением названий этих Makefiles является .mk. Makefiles разделены на три секции:

package (в package/ директории) содержит Makefiles и соответствующие файлы для всех программ пользователя, которые Buildroot может скомпилировать и добавить в целевую корневую файловую систему. Здесь одна поддиректория на программу.
toolchain (в toolchain/ директории) содержит Makefiles и соответствующие файлы для всех программ, относящихся к набору инструментов кросс-компиляции: binutils, ccache, gcc, gdb, kernel-headers и uClibc.
target (в target директории) содержит Makefiles и соответствующие файлы для всех программ, относящихся к генерации образа целевой корневой файловой системы. Поддерживаются четыре типа файловых систем: ext2, jffs2, cramfs и squashfs. Для каждой из них, здесь есть поддиректория с необходимыми файлами. Здесь также generic/ директория, которая содержит каркас целевой файловой системы.
Каждая из директорий содержит, по крайней мере 2 файла:

something.mk это Makefile, который закачивает, конфигурирует, компилирует и устанавливает something (некоторую) программу.
Config.in это часть файла описания для инструмента конфигурации. В нем указываются параметры, относящиеся к текущей программе.
Основной Makefile выполняет работу посредством следующих шагов (после того, как выполнена конфигурация):

Создает директорию загрузки (dl/ по умолчанию). Это то место, куда будут загружены tarballs. Интересно отметить, что нахождение tarballs в этой директории удобнее сохранения их где-либо еще, для избегания последующих закачек.
Создает строительную директорию (build_ARCH/ по умолчанию, где ARCH, указанная Вами архитектура). Это место, где будут скомпилированы все программы пользователя.
Создает директорию сборки набора инструментов (toolchain_build_ARCH/ по умолчанию, где ARCH, указанная Вами архитектура). Это место, где будет скомпилирован набор инструментов кросс-компиляции.
Устанавливает директорию перемещения (build_ARCH/staging_dir/ по умолчанию). Это место, где будет установлен набор инструментов кросс-компиляции. Если Вы захотите использовать тот же набор инструментов кросс-компиляции для других целей, таких, как компиляция приложения третьего уровня, Вы можете добавить build_ARCH/staging_dir/bin к Вашей PATH и затем использовать arch-linux-gcc для компиляции Ваших приложений. В порядке установки этой директории перемещения, buildroot вначале очищает ее, а затем создает несколько поддиректорий и взаимосвязей внутри нее.
Создает целевую директорию (build_ARCH/root/ по умолчанию) и каркас целевой файловой системы в ней. Эта директория будет содержать финальную целевую файловую систему. Для ее установки, buildroot вначале удаляет ее, а затем расжимает target/default/skel.tar.gz файл для создания основных поддиректорий и взаимосвязей, копирует каркас доступный по target/default/target_skeleton, а затем убирает ненужные директории
И зависимости TARGETS. Обычно должно быть проверено, если конфигурационный параметр для пакета включен и если это так, пакету "предписывается" быть скомпилированным, посредством его указания в глобальной переменной TARGETS.

Комментариев нет :

Отправить комментарий