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