皮质a9启动和记忆

时间:2011-07-16 07:36:34

标签: embedded cortex-a

我是微控制器编程的新手。这里感兴趣的芯片是cortex-a9。在复位或上电时,我的读数必须是0x0000000处的代码。我的问题虽然听起来有点过于微不足道,但这些问题有助于我提出一些概念。

内存地址0x0000000是否驻留在ROM中? 从该地址读取代码后会发生什么? 是否应该有某种启动加载器存在&如果是这样,那么这个地址应该是什么?它是否也应该驻留在ROM中? 最后,内核在什么时候启动&内核代码在哪里?

2 个答案:

答案 0 :(得分:9)

答案 1 :(得分:6)

您必须在硬件开始执行的地址处提供引导代码。

这通常是通过让硬件将某种闪存或引导ROM映射到引导地址并从那里开始运行来实现的。

请注意,在微控制器中,在启动时开始运行的代码具有相当艰难的生命 - 没有硬件初始化,并且没有硬件我的意思是即使控制RAM访问的DDR控制器也不能正常工作..所以你的代码需要在没有RAM的情况下运行。

在初始引导代码设置了足够的硬件(例如设置RAM芯片,设置TLB等,程序MAC等)后,您就可以运行引导加载程序。

在某些系统中,初始启动代码只是启动加载程序的第一部分。在某些系统中,专用的引导代码会设置,然后从闪存中读取引导加载程序并运行它。

引导加载程序的工作是将内核/操作系统的映像带入RAM,通常来自闪存或网络(但也可以是与另一个板,PCI总线等共享内存,尽管这种情况更为罕见)。一旦引导加载程序在RAM中具有内核/ OS二进制文件的映像,它可以选择解压缩它,并将控制(调用)移交给内核/操作系统映像的起始地址。

有时,内核/操作系统映像实际上是一个小型解压缩器和压缩内核blob。

无论如何,最终结果是内核/操作系统在RAM中可用,并且引导加载程序(可选地通过背负式解压缩程序)已将控制权传递给它。

然后内核/操作系统开始运行,操作系统启动。