首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >臂裸金属多芯芯选择

臂裸金属多芯芯选择
EN

Stack Overflow用户
提问于 2018-08-15 16:18:06
回答 2查看 1.9K关注 0票数 2

用于多核ARM平台的(4cpu的Cortex-A53集群):

--我们如何分配一个特定的核心来运行某个函数,作为编写一个简单的裸调度程序的基础?

是如何在ARM上实现这些功能的?

EN

回答 2

Stack Overflow用户

发布于 2019-02-25 14:37:37

那么,将一个核分配给一个软件或者多个核分配给一个软件并不是一个可以改变的硬件配置。这一切都取决于用例和软件流程的运行方式。让我们举个例子。

让我们以4个核心的CortexA53集群为例。通常在开始时,一个板初始化固件运行。与xilinx的第一阶段引导加载程序( zcu102 )类似,它还具有4个cortexA53内核。之后运行ATF (arm可信固件),然后运行uboot。所有这些都运行在核心0上。

重要:现在当我们使用u引导启动任何二进制文件时,它都是在core0上启动的。假设我们推出了linux。现在,经过几个初始化之后,linux将使用一些特定于Soc的寄存器启动其他内核。通常情况下,两个寄存器很重要。当一个核心上的软件想要启动另一个核心时,它将在内存中加载它想要在core1上执行的软件,它将用它的启动地址编写一个特殊寄存器,并使用另一个特殊寄存器,它将使它脱离重置,core1将开始执行该软件。

所以你看,这一切都取决于它是否想使用其他核心的软件。

所以,写你的代码时,不要担心它会被其他内核自动执行,一切都会发生变化!

这里的一个更正是,为了简单起见,我前面已经说过,linux直接使用寄存器来启动其他内核。手臂上的情况并非如此。我们用特殊的电话叫SMC。这些调用进入安全世界,ATF将查看为SMC传递哪些参数并执行适当的服务。

额外内容:用于快速入门,使用供应商提供的启动文件,编写一个简单的hello应用程序,访问它的串行程序,然后使用uboot命令加载它

代码语言:javascript
复制
fatload mmc 0:1 0x0 app.bin; go 0x0

它将从sd卡加载应用程序,并在地址0x0的core0上启动它。显然,您必须将地址更改为应用程序链接到的地址,以及mmc之后给出的分区号。

票数 3
EN

Stack Overflow用户

发布于 2018-08-15 17:36:07

首先,您需要了解芯片供应商是如何管理这些核心的。分为两大类,一种是芯片厂商同时在所有核心上重新设置版本,另一种是芯片厂商在一个核心上重新设置版本,然后该核心可以通过CSR在其他核心上释放复位。树莓pi家族是前者的一个例子,基于allwinner的东西是后者的一个例子。

尽管如此,内核仍然是很容易管理的,它们都将在内存中相同的位置输入,即重置异常地址,所以您可以放置从一开始就对核心进行排序的代码,或者在释放每个核心时更改重置处理程序,以便将每个新核心路由到一个新的位置。如果您查看raspberry pi裸金属论坛,您将看到这样做的简单代码和/或只是转储GPU引导加载程序在arm ram开头放置的代码来对核心进行排序(启动时没有一个config.txt,它可以存放三个核心并让core0运行,然后在其中放一些代码,这样core0就可以通过uart打印出前几十个单词的内容,然后分解,这样您就可以看到它们是如何实现的)。基本上,每个核心都有一个唯一的id,您可以使用它将核心执行路由到自己的代码。

移植的操作系统应该为您完成所有这些工作。

早期的多核非常明显,并在技术参考手册中显示,每个核心都有自己的时钟启用和重置,由芯片供应商决定如何处理这些时钟。更新的核心和文档都有这个黑匣子,所以我不知道它是如何工作的,但我知道我们在芯片供应商中看到了这两种解决方案。我发现broadcom/pi方法更好,只是因为没有隐藏/无文档的CSR来查找或找出allwinner,您必须等待有人破解才能找到它。这并不意味着所有的广播公司和所有的赢家都是一样的,每个公司都可以自由地设计他们喜欢的每个部分,并且很可能有不同的解决方案。如果broadcom的pi相关部件有一个控制寄存器,GPU就会摆弄它,如果我们能找到它,我们可能会篡改自己,我不会感到奇怪。

一旦你让核心运行,那就是简单地把一个特定核心的程序计数器指向一个特定的地址。无论是通过重置控制核心所在的位置,还是通过中断或该核心的异常,您都可以将控制返回到不同的地址。与对单个核心处理器的控制没有区别。这里没有魔法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51862529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档