- Русские Блоги
- Подробная стратегия процесса компиляции Yocto и практический метод bitbake
- Каталог статей
- Один, йокто
- (1): Где находится файл после компиляции Yocto? Расположение выходного файла
- (2): Где находится каталог компиляции ядра Yocto Linux?
- (3): Как Yocto перекомпилирует ядро Linux и dtb и помещает их в каталог развертывания?
- (4): Как Yocto определяет (находит) имя пакета
- (5): Как Yocto изменяет адрес загрузки исходного кода и git clone
- (6): Как поделиться загруженными файлами в Yocto
- (7): Разница между чистотой и чистотой в Yocto Bitbake и чистым состоянием
- (8): Как ускорить загрузку пакетов программного обеспечения с помощью Yocto Как загрузить все необходимые пакеты без компиляции
- (9): Где находится адрес загрузки пакета Yocto
- (10): Yocto hellworld добавить пакет
- (11): Как Yocto добавляет программное обеспечение в окончательный rootfs
- (12): Используйте Yocto, чтобы помочь нам найти труднодоступные прошивки и пути их размещения.
- (13): Yocto view зависимости пакетов
- (14): Изменения конфигурации цепочки компиляции в Yocto (настройка)
- (15): Менеджер пакетов в Yocto
- (16): Yocto сделал SDK для распространения Toolchain и разработал его из среды Yocto.
- (17): Проблема с лицензией Yocto: ограниченная лицензия не внесена в белый список LICENSE_FLAGS_WHITELIST
- (18): Добавить статическую библиотеку в Yocto SDK Toolchian.
- (19): Использование Yocto SDK Toolchian
Русские Блоги
Подробная стратегия процесса компиляции Yocto и практический метод bitbake
Часть этой статьи, посвященная yocto, перенесена с https://www.kancloud.cn/digest/yocto. Она организована и удобна для чтения. Она намного проще и понятнее, чем официальный документ yocto, и при этом значительно экономит перевод боль.
Каталог статей
Один, йокто
(1): Где находится файл после компиляции Yocto? Расположение выходного файла
После завершения компиляции ядро и rootfs, kernel, uboot и dtb будут помещены в tmp / deploy / images / MACHINE / относительно каталога сборки, где MACHINE может быть пустым (для старой версии poky / yocto), или это может быть вы Имя доски, например sabresd.
Для набора инструментов поместите его в mp / deploy / sdk / MACHINE /.
После завершения компиляции ядро, rootfs и dtb будут помещены в tmp / deploy / images / imx6qsabresd / относительно каталога сборки.
Каждый файл имеет программную ссылку, указывающую на файл, созданный последней компиляцией, поэтому, если вам нужно увидеть последний файл, вы можете использовать программную ссылку напрямую:
(2): Где находится каталог компиляции ядра Yocto Linux?
Где ядро? Он находится в следующей позиции, мы можем использовать следующую команду для подтверждения:
Значок:
(3): Как Yocto перекомпилирует ядро Linux и dtb и помещает их в каталог развертывания?
Скомпилируйте ядро и сгенерируйте uImage + dtb. Скомпилированная команда выглядит следующим образом:
Обратите внимание, что C в -C — это верхний регистр, который отличается от нижнего регистра c.
Обратите внимание, что здесь linux-imx для ядра imx, и имя вашего ядра может быть другим.
(4): Как Yocto определяет (находит) имя пакета
Чтобы убедиться, используйте следующую команду:
Где XXX — ключевое слово пакета, например linux или uboot, поэтому вы можете видеть все пакеты с ключевыми словами, как показано на рисунке ниже, просто чтобы найти ядро:
(5): Как Yocto изменяет адрес загрузки исходного кода и git clone
явление
В Yocto при загрузке некоторых пакетов программного обеспечения часто оказывается, что они не могут быть загружены в течение дня. Такая ситуация является огромной тратой нашего времени.
Например, следующие три пакета не были загружены через день:
Решение
Подтвердите адрес загрузки, загрузите вручную
Сначала определите адрес загрузки программного пакета, например, для пакетов программного обеспечения opencv и opencv-samples:
Вы можете видеть, что их адреса git совпадают, поэтому мы можем вручную git clone:
Видно, что мы использовали его всего несколько десятков минут. После клонирования мы можем позволить программному пакету использовать наше локальное репо вместо того, чтобы переходить к удаленному репо для клонирования.
Разрешить использовать локальный git при клонировании пакета
Найдите файл bb, соответствующий пакету
Мы можем использовать команду find, чтобы найти
изменить файл BB
Обратите внимание, что было добавлено обозначение протокола.
Получить снова
Результаты приведены ниже:
сообщает, что ветвь не может быть найдена, поэтому мы вырезаем эту ветку в нашем локальном репо или превращаем ее в чистое репо:
, а затем снова получить:
похож на другое программное обеспечение.
(6): Как поделиться загруженными файлами в Yocto
Время загрузки Yocto может превышать время компиляции, поэтому все надеются, что после однократной загрузки все поделятся загруженным файлом, а не загружают его снова.
Все загруженные и клонированные файлы git в Yocto помещаются в каталог, указанный в переменной среды DL_DIR, которая по умолчанию находится в каталоге сборки компьютера.
Следовательно, чтобы поделиться загруженным файлом, вам нужно только указать эту переменную для загруженного каталога, который можно указать в local.conf:
(7): Разница между чистотой и чистотой в Yocto Bitbake и чистым состоянием
В Yocto для разных пакетов есть разные задачи, то есть могут выполняться разные операции, некоторые из которых являются общими для всех пакетов, например очистка, сборка и т. Д.
Мы можем использовать следующую команду, чтобы узнать, какие исполняемые задачи есть в пакете:
Значок:
Мы видим разницу между clean, cleanall и cleansstate.
(8): Как ускорить загрузку пакетов программного обеспечения с помощью Yocto Как загрузить все необходимые пакеты без компиляции
Ускорить загрузку
Загрузка Yocto занимает больше всего времени, поэтому мы можем включить как можно больше параллелей.
Для этого мы можем увеличить количество параллелей в local.conf, например, мой процессор E3-1230 v2, 8 ядер, поэтому я могу открыть 16 потоков для загрузки, потому что скорость нашей сети низкая, поэтому на самом деле эти загрузки Эта операция не требует интенсивного использования ЦП, и многие пакеты также очень малы, поэтому в то же время ввод-вывод не является интенсивным, поэтому вы можете настроить его соответствующим образом:
Эффект следующий:
Загрузить все необходимые пакеты без компиляции
Иногда нам может потребоваться сначала загрузить все необходимые пакеты программного обеспечения, а затем скомпилировать их, когда мы выйдем домой в автономном режиме или в другое время. Для этого мы можем использовать следующие команды для завершения:
Для разных целей вам нужно заменить fsl-image-qt5 другими, например core-image-minimal, мы можем увидеть значение fetchall:
(9): Где находится адрес загрузки пакета Yocto
Вообще говоря, вы можете использовать советы Yocto (5): Как Yocto изменяет загрузку исходного кода и адрес клонирования git, упомянутые в методе, но иногда некоторые адреса находятся во включаемых файлах файла bb, а файл inc может быть многоуровневым Layer содержит, поиск более громоздкий, поэтому его быстрее искать прямо в env.
Например, чтобы найти адрес получения imx kenrel, вы можете использовать следующую команду:
Эффект такой:
(10): Yocto hellworld добавить пакет
Пакет программного обеспечения в Yocto помещается в файл bb, а затем многие файлы bb объединяют рецепт (рецепт), а затем многие рецепты образуют мета-уровень. Таким образом, добавить пакет на самом деле означает добавить bb (файл конфигурации bitbake) . В качестве примера возьмем helloworld.
клонировать BB-файл
Сначала нужно ввести каталог рецептов, например, следующее — recipes-graphics:
Затем клонируйте конфигурацию пакета и репозиторий в исходный каталог:
Проверьте, есть ли пакет уже в Yocto
После подтверждения вы можете выполнять такие задачи, как компиляция. При необходимости вы также можете выполнить развертывание в rootfs. Для этих операций вы можете обратиться к некоторым из моих предыдущих блогов.
Структура программного комплекса
Используя tree, вы можете увидеть, что у него есть bb-файл, а также есть каталог, в котором находятся Makefile и исходный код:
Содержимое файла bb выглядит следующим образом:
Как видите, в файле bb указаны значения следующих переменных:
SRC_URI
LIC_FILES_CHKSUM: это контрольная сумма, если это источник, основанный на управлении версиями, то он не нужен, например git и svn.
FILES _ $ (PN): PN — это номер пакета, который относится к комбинации PV и PR, используемой версией программного обеспечения, которая представляет собой 3-r0, замеченное в предыдущем bitbake -s.
Есть еще два метода, эти два метода перегружают метод по умолчанию в bitbake:
do_compile
do_install
Эти два метода соответствуют задачам компиляции и установки в Package.
(11): Как Yocto добавляет программное обеспечение в окончательный rootfs
В Yocto, если мы планируем добавить какое-то программное обеспечение в rootfs, например, это может быть bash, lsusb и т. Д., Тогда у нас может быть два метода:
1. Добавляйте и копируйте файлы вручную по одному.
Добавьте элемент установки в файл bb, и пусть Yocto автоматически поможет нам добавить
Первый метод требует ручного добавления всех файлов и зависимостей программного пакета по одному, что требует много времени, трудозатратно и подвержено ошибкам, поэтому второй метод более удобен. подходящее.
2. Шаги по добавлению программного пакета в Rootfs в Yocto
Найдите последний rootfs в пакете bb
Если мы воспользуемся следующей командой:
Затем мы можем найти пакет (задачу) fsl-image-qt5 следующим образом, какой файл bb используется:
добавить пакеты, которые необходимо установить в rootfs
Затем откройте его и добавьте пакеты, которые нужно добавить, например, ниже добавляется linux-firmware:
Сохраните, а затем снова воспользуемся bitbake для построения системы, и тогда мы увидим, что в rootfs есть соответствующие файлы:
(12): Используйте Yocto, чтобы помочь нам найти труднодоступные прошивки и пути их размещения.
Существует много оборудования, для работы которого требуется прошивка, и эти прошивки нужно не только найти, но и разместить в правильном месте. Обычно это место находится в / lib / firmware, но многие из них не всегда так.
Чтобы найти эти прошивки вручную, их легко пропустить или запутать, или это может быть прошивка, которая давно не подходит. Например, в моем предыдущем блоге: Yocto i.MX6 (TQIMX6) (02): USB Wi-Fi (TP-Link WN821N и др.) Оборудование) AR9170 Поддержка ядра Linux и использование прошивки, оказалось, что я следил за вики и помогал найти прошивку, но это заняло много времени и не решило эту проблему. -программный пакет в Yocto нелегально и быстро решил эту проблему.
Путь, установленный микропрограммой, аналогичен. Например, путь, установленный некоторыми драйверами, является нестандартным путем. Например, следующие файлы помещаются в соответствующие каталоги:
Следовательно, добавьте напрямую linux-firmware в упаковку rootfs или напрямую просмотрите папку образа в linux-firmware, чтобы узнать путь, например, предыдущий ar9170:
(13): Yocto view зависимости пакетов
Чтобы просмотреть зависимости файлового пакета, мы можем просмотреть его графически. Вот некоторые официальные инструкции:
Например, мы хотим проверить зависимости Weston:
Здесь будут перечислены различные зависимости, например, на что нужно полагаться во время компиляции, результат будет следующим:
(14): Изменения конфигурации цепочки компиляции в Yocto (настройка)
Это больше используется, когда мы сами компилируем цепочку инструментов и настраиваем цепочку инструментов для другого оборудования. Способ смены тоже очень простой, достаточно найти подходящий в соответствующей конфигурации poky.
Например, для armv7 мы можем перейти к следующему файлу, чтобы найти подходящий для использования:
Запишите свой выбор в local.conf:
(15): Менеджер пакетов в Yocto
Используйте менеджер пакетов
Просто включите его в local.conf:
После компиляции будет пакет rpm:
Настроить файловый сервер
Вы можете использовать ngix и apache, но мы также можем просто использовать python:
Откройте браузер и вы увидите:
Просмотр статуса пакета на машине
Настроить канал на машине
Для интеллектуального инструмента, используемого rpm, добавьте канал:
После добавления параметров вы можете обновить:
Правильный случай — это следующая команда:
Если параметры конфигурации неверны, возникнет ошибка. Если есть ошибка, проверьте правильность IP-адреса и формата. Например, в следующем http отсутствует два / /:
Если вы допустили ошибку, сначала удалите ее:
Затем добавьте еще раз.
Глядя на количество пакетов, можно увидеть, что оно увеличилось:
Если вы используете bitbake для компиляции программы на своем ПК, вам необходимо использовать следующую команду для перестроения индекса, иначе служба поддержки не сможет найти новый пакет программного обеспечения:
(16): Yocto сделал SDK для распространения Toolchain и разработал его из среды Yocto.
В Yocto есть два типа SDK:
Только Toolchain или Toolchain + определенные типы функций графического интерфейса
Для определенного дистрибутива существует SDK, который включает Toolchian и этот специальный файл Distrbutition.
объясняются отдельно ниже.
первый сорт
Вот такие пакеты:
на самом деле бывает двух типов:
meta-toolchain
meta-toolchain-qt/qte/qt5
Последний содержит вещи, связанные с qt, а qte ориентирован на встраивание. Если вам нужно разработать приложения, связанные с qt, то подходящим выбором будет то, которое включает qt, в противном случае просто разработайте обычные приложения, то просто используйте meta-toolchian.
Вторая категория
Этот тип SDK рекомендуется. В задаче распространения, которая используется для создания этого SDK, есть специальная задача, называемая populate_sdk. Например, вам нужно создать fsl-image- Распределение (также называемое изображением) цели qt5 может быть таким:
После того, как два типа производства будут завершены, вы можете увидеть в развертывании:
XML-файл — это список файлов, включенных в SDK.
Установка SDK
Поскольку файл SDK состоит из сценария sh + сжатого содержимого файла, его можно запустить напрямую, например:
В командной строке введите путь для установки.
(17): Проблема с лицензией Yocto: ограниченная лицензия не внесена в белый список LICENSE_FLAGS_WHITELIST
Yocto может настроить лицензию Distrobution, и затем все программные пакеты должны соответствовать этой лицензии, прежде чем они могут быть отправлены в образ.Если нам нужно использовать программный пакет, который нарушает эту лицензию, требуется дополнительная настройка.
Например, следующий журнал ошибок появляется, когда bitbake компилирует vlc:
Тогда это потому, что vlc зависит от libav, но лицензия libav не соответствует лицензии распространения и не может быть скомпилирована. В конфигурации файла bb в libav вы можете видеть, что его лицензионный флаг является коммерческим:
Открыт для принятия всех пакетов коммерческих лицензий
Поэтому, если нам нужно добавить несколько коммерческих пакетов Lincense, нам нужно добавить поддержку коммерческих, просто добавьте строку в local.conf:
Принимайте только определенные пакеты коммерческих лицензий
Но если мы ожидаем только, что некоторые специальные коммерческие пакеты могут быть скомпилированы в rootfs, тогда нам нужно указать один за другим, например, указать, что пакеты, такие как libav, могут быть скомпилированы:
(18): Добавить статическую библиотеку в Yocto SDK Toolchian.
Добавить статическую библиотеку в Toolchian
Без статической библиотеки невозможно статически скомпилировать приложение, поэтому для удобства в SDK необходимо добавить статическую библиотеку, такую как libc.
Эту функцию нужно только включить, добавьте строку в local.conf:
Проверка статической библиотеки в Toolchian
Затем перестройте SDK, и после установки SDK мы сможем проверить его существование.
Первый исходный env и импорт различных переменных bash:
Затем подтвердите, существует ли libgcc.a:
Если выход существует, то есть, например:
(19): Использование Yocto SDK Toolchian
Перед его использованием вам необходимо получить исходный env и импортировать различные переменные среды (обратите внимание, чтобы изменить путь на свой собственный):
Затем мы можем проверить env bash. Вот несколько дополнительных env, которые можно увидеть, напрямую введя export в bash:
будь осторожен
Среди них нам нужно сосредоточить внимание на переменных, связанных с компиляцией:
Компиляция, относящаяся к CC / LD и т. Д.
ARCH / CROSS_COMPILE и другие, связанные с компиляцией Croos
Вы можете видеть, что CC был переопределен как кросс-инструментальная цепочка, а ARCH и CROSS_COMPILE также помогли нам настроить соответствующие.
Таким образом, если нам потребуется кросс-компиляция приложения, то многие переменные больше не нужно будет устанавливать вручную.
В то же время из-за различных спецификаций настройки мы должны уделять внимание согласованию с оборудованием. Например, здесь указана оптимизация для cortex-a9.
как пользоваться
Лучше всего использовать переменную для использования Toolchian, например, использовать $ CC вместо arm-poky-XXX-gcc, потому что мы видим, что CC на самом деле против arm-xxx -gcc Добавлены некоторые конфигурации:
Самым важным из них является опция sysroot. Эта опция сообщит toolchian, где искать библиотеки и файлы заголовков. Если это не указано, возникнут проблемы. Например, мы напрямую используем arm-poky-gnueabi-gcc для компиляции:
Вы можете увидеть подсказку о том, что некоторые стандартные файлы заголовков не могут быть найдены. Фактически, это потому, что мы не добавили некоторые указанные параметры, чтобы указать ему использовать stubs-hard.h, поэтому мы ищем stubs-soft.h с помощью дефолт.
Например, если мы компилируем helloworld, мы можем скомпилировать следующим образом:
Это сэкономит ручное уточнение многих опций, и проблем не возникнет.
Источник