Я использую 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 исполняемый файл?