uboot: Что такое DECLARE_GLOBAL_DATA_PTR?

В некоторых файлах uboot я видел это объявление:

DECLARE_GLOBAL_DATA_PTR

прямо под включает.... кто-нибудь знает, что / почему это сделано?

Спасибо, VJ

1 ответ

Это объявление макроса, что ресурс (например, регистр ЦП) будет зарезервирован для указания на struct global_data. Для ARM макрос определен в arch/arm/include/asm/global_data.h, и он резервирует регистр CPU r8.

Смотрите README l. 4602+, которые описывают ограничения ресурсов при ранней загрузке. Глобальный указатель данных обеспечивает легкий доступ к элементам данных, которые наиболее полезны на этом этапе загрузки.

Глобальный означает, что эти данные обычно доступны. Исходные файлы C используют это объявление перед любым скомпилированным кодом, чтобы сказать компилятору не использовать этот регистр (например, ARM CPU r8) для чего-либо еще.

К концу загрузки, например, в common/main.c main_loop(), я вижу, что DECLARE_GLOBAL_DATA_PTR используется только в нескольких конкретных конфигурациях. Поэтому, возможно, другому коду для действий, управляемых консольными командами (например), не нужно резервировать этот ресурс. Похоже, что 25% из исходных файлов C используют его, 75% не используют его.

~/u-boot-2012.10$ find . -name "*.c" | wc -l
2824
~/u-boot-2012.10$ find . -name "*.c" | xargs grep DECLARE_GLOBAL_DATA_PTR | wc -l
745
Другие вопросы по тегам