Из https://github.com/s-matyukevich/raspberry-pi-os/blob/master/docs/lesson01/rpi-os.md Я нашел такое утверждение:
The Raspberry Pi 3 has four core processors, and after the device is powered on, each core begins to
execute the same code.
Это означает, что как только контроль над ядром перейдет, все 4 ядра начнут его выполнять, как если бы они были основными процессорами, правильно ли это?
Мне интересно Загрузка вторичных ядер ARM Cortex-A с Linux, но я понятия не имею, о каком boot_reg
они говорят
Знаете ли вы какую-либо документацию, в которой документирована процедура загрузки основных/вторичных процессоров для ARMv8 (aarch64) в целом и особенно для RPi4 (BCM2711)? Заранее спасибо!
Как загрузить дополнительные процессоры в процессоре Cortex-A72?
P.S.: Те, кто хочет закрыть вопрос, не хотите ли указать причину в комментариях, чтобы я мог изменить вопрос и добавить больше деталей, если вам нужно?
@KenWhite: Этот вопрос косвенно касается того, как писать код, а именно, загрузочный код для конкретного устройства. Программирование низкого уровня находится в теме.
@NateEldredge: Нет, это не так. Это был запрос документации, которая является сторонним ресурсом, и в вопросе вообще не было ничего конкретного по написанию кода.
Все верно, все ядра начинают выполнять один и тот же код. Поскольку обычно вы хотите, чтобы они в конечном итоге делали разные вещи, вы должны написать этот общий код так, чтобы он заставлял ядро получать свой собственный идентификационный номер (из системного регистра mpidr_el1
) и делать все, что подходит для этого ядра.
Код, который вы связали, представляет собой простой игрушечный пример, в котором только ядро № 0 продолжает делать что-то интересное (печатать приветственное сообщение). Остальные переходят к proc_hang
, который представляет собой бесконечный цикл, поэтому они никогда не делают ничего, кроме траты электроэнергии. С этого момента мы можем просто игнорировать их, как будто их вообще не существует.
В настоящей многопроцессорной операционной системе хотелось бы, чтобы другие ядра в конечном итоге сделали что-то полезное. Обычно у вас есть ядро № 0, которое выполняет необходимую инициализацию и отправляет остальные в цикл, где они ждут (желательно в состоянии с низким энергопотреблением), чтобы получить уведомление о пробуждении от ядра № 0. Механизмы межпроцессорной связи для этого существуют вне самих ядер ЦП, как часть периферийного оборудования SoC или платформы платы, поэтому вы не найдете их обсуждения в документации Cortex A-72.
спасибо большое за объяснение! That's correct, all cores start executing the same code
, есть ли какой-нибудь документ ARM, в котором это говорится, или это своего рода эмпирическое правило?
Это не будет документ ARM, поскольку процесс загрузки настраивается SoC, а не ядром. Способ загрузки аппаратного обеспечения BCM2711 будет описан в документе Broadcom, но здесь мы говорим о том, как вы получаете управление от загрузчика — это специальное программное обеспечение RPi, поэтому вам следует обратиться к документации Raspberry Pi.
SO предназначен исключительно для вопросов, связанных с программированием (кодом) или использованием инструментов программиста (IDE, компилятор и т. д.). Ваш вопрос не касается ни одной из этих вещей, поэтому здесь он не по теме. Вместо этого вы, вероятно, захотите Raspberry Pi.