gpt4 book ai didi

bare-metal - 树莓派2如何在裸机下启动额外的内核?

转载 作者:行者123 更新时间:2023-12-02 15:29:29 30 4
gpt4 key购买 nike

这个问题相当广泛,但我什至无法在 ARMv7 ARM、MPCore TRM、GIC 架构手册中找到起点,...所以请原谅我的含糊不清。

我有一个用于 Raspberry Pi 2 的简单裸机内核,用于初始化事件 LED、UART0、MMU 和缓存,一切正常。我可以眨眼,我可以输出文本,我可以将物理页面映射到虚拟地址并访问它们。到目前为止一切顺利。

现在我想启动额外的核心,但我遇到了真空。目前还没有关于如何在 linux 内核之外执行此操作的示例,这相当复杂,因为它支持如此多的板。查看规范,我似乎找不到任何好的起点。所以我没有在黑暗中四处走动,而是来到了这里。 :)

那么有没有其他人研究过这个并弄清楚核心在启动和重置时的状态?什么引导协议(protocol)/机制用于启动附加内核?我发现的一个信息是,这是特定于 SOC 的,所以请不要举例说明如何在 Cortex-A9 或其他非 RPi 2 上执行此操作。

最佳答案

在树莓派 2 上,所有内核都在开机时由固件启动,然后等待将起始地址写入邮箱。发生这种情况时,它们会跳转到刚刚写入的地址。所以启动额外的内核非常容易:

// wakeup stub in asm (sets up stack and calls core_main())
extern void core_wakeup(void);
typedef void (*fn)(void);
void wakeup(int num) {
*(volatile fn *)(0x4000008C + 0x10 * num) = core_wakeup;
}

应该在所有内核上禁用缓存或在所有内核上启用它们。缓存监听仅适用于缓存启用,因此启用/禁用缓存的任何组合都会出现不一致。

关于bare-metal - 树莓派2如何在裸机下启动额外的内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28610045/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com