Вопросы о функции перемещения U-boot - PullRequest
0 голосов
/ 23 февраля 2012

Я использую u-boot-2011.12 для моей цели OMAP3, перекрестная цепочка инструментов CodeSourcery arm-none-linux-gnueabi, я скомпилировал u-boot, загрузил ее в цель и загрузил ее, все прошло нормально, но у меня есть несколько вопросов Что касается функции перемещения u-boot, мы знаем, что эта функция основана на PIC (позиционно-независимый код), позиционно-независимый код генерируется путем установки флага -fpic на gcc, но я не нахожу fpic в флагах компиляции. Без PIC, как u-boot может реализовать функцию перемещения?

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Помните, что когда u-boot работает, ОС еще нет. Для этого не требуется функция «pic», используемая в большинстве пользовательских приложений. Ниже я опишу архитектуру PowerPC.

u-boot изначально работает в памяти NV (NAND или NOR). После того как u-boot инициализирует большинство периферийных устройств (особенно ОЗУ), он находит верхнюю часть ОЗУ, резервирует некоторую область для глобальных данных, а затем копирует себя в ОЗУ. Затем u-boot ответит на код в оперативной памяти и изменит исправления. U-boot теперь перемещен в RAM.

Посмотрите файл start.S для своей архитектуры и найдите функцию relocate_code (). Тогда учитесь, учитесь, учитесь ...

1 голос
/ 14 февраля 2014

Я тоже нашел это беспокойство и несколько часов бился в голове вокруг этого вопроса.

К счастью, я наткнулся на следующую ветку в списке рассылки u-boot:

http://lists.denx.de/pipermail/u-boot/2010-October/078297.html

Это говорит о том, что по крайней мере в ARM использование -fPIC / -fPIE в COMPILE TIME необязательно для генерирования независимых от позиции двоичных файлов.Это облегчает задачу загрузчика среды выполнения, выполняя как можно больше работы заранее, но это все.

Независимо от того, используете вы fPIC или нет, вы всегда можете использовать -pic / -pie в LINK TIME, чтопереместит все зависящие от позиции ссылки в раздел перемещения.Поскольку во время COMPILE TIME не было выполнено никакой обработки для добавления помощников, ожидайте, что этот раздел будет больше, чем при использовании -fPIC.

Они пришли к выводу, что для своих целей использование -fPIC не имеет какого-либо существенного преимущества перед временем соединенияединственное решение.

[править] См. commit u-boot 92d5ecba для справки

arm: реализовать перемещения ELF http://git.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=commit;h=92d5ecba47feb9961c3b7525e947866c5f0d2de5

...