Почему размер моего приложения на сервере сборки yocto отличается от размера, установленного на цели? - PullRequest
1 голос
/ 05 марта 2020

Я использую Yocto для создания пользовательских linux изображений для встроенного проекта. Недавно я обнаружил что-то странное, и у меня возникли проблемы с обдумыванием этой проблемы. Одним из приложений, содержащихся в образе, является пользовательское программное обеспечение, назовем приложение foo . После успешной сборки на сервере сборки yocto встроенный кросс-скомпилированный исполняемый файл foo можно найти в tmp / work / armv7at2hf-neon-fsl c - linux -gnueabi /foo/1.0.0-r0/git каталог. Размер исполняемого файла foo (полученного с помощью ls -al) на сервере сборки составляет 40978880 байт.

Образ можно запустить на целевом оборудовании, перепрошив SD-карту с сгенерированным файл изображения tar.gz. После перепрошивки SD-карты и загрузки образа на цель я перехожу в каталог, в который был установлен foo . Что касается цели, я снова получаю размер исполняемого файла, используя ls -al, и обнаруживаю, что размер исполняемого файла foo сократился и составляет 38585152 байта. Несмотря на уменьшение размера исполняемого файла, приложение работает нормально.

Это изменение размера недопустимо, поскольку не позволяет мне выполнить проверку sha256 исполняемого файла foo во время запуска приложения , Проверка завершается неудачно, поскольку foo на сервере сборки не является байтом для байта, идентичного исполняемому файлу foo , установленному на цели. Разница в размере оставила меня в замешательстве. Тем более что все остальные файлы, которые мой слой устанавливает в rootfs, имеют одинаковый размер как на сервере сборки, так и на целевом сервере.

Что может быть причиной этой разницы в отношении размера foo исполняемый файл?

1 Ответ

2 голосов
/ 05 марта 2020

Вы не сравниваете развертываемые артефакты, развертываемые двоичные файлы находятся в каталоге packages-split/. Как только do_compile закончен, двоичный файл содержит отладочную информацию и символы, обычно необходимые для отладки, а не для запуска. Таким образом, существуют дополнительные шаги, которые необходимо выполнить, один из них - установить его в промежуточную область, которая будет image/ dir внутри рабочего рецепта. Затем задача do_package разделит файлы в image/ на выходные пакеты (ipks / rpms) в папке packages-split, после запуска операций strip, чтобы гарантировать, что отладочная информация и символы являются пакетами в пакеты отладки, тогда конечный двоичный файл находится внутри packages-split/<PN> и он будет находиться по тому же пути, что и на цели, как /usr/bin, он будет в packages-split/<name>/usr/bin, и это двоичный файл, который вы должны проверять *

...