基于linux4.19内核翻译理解

为了启动ARM Linux,您需要一个引导加载程序,它是在主内核之前运行的小程序。 引导加载程序被期望初始化各种设备,并最终调用Linux内核,向内核传递信息。

基本上,引导加载程序应该提供(至少)以下内容:

1.设置和初始化RAM。
2.初始化一个串口。
3.检测机器类型。
4.设置内核标记列表。
5.加载initramfs。
6.调用内核映像。

1.设置和初始化RAM

现有的引导加载程序:
强制要求
新的引导加载程序:
强制要求
引导加载程序应该找到并初始化内核在系统中用于易失性数据存储的所有RAM。它以与机器相关的方式执行此操作。(它可以使用内部算法自动定位和调整所有RAM的大小,也可以使用对机器中RAM的了解,或者任何其他引导加载程序设计者认为合适的方法。)

2.初始化一个串口

现有的引导加载程序:
可选的,推荐的
新的引导加载程序:
可选的,推荐的
引导加载程序应该初始化和启用目标设备上的一个串口。这允许内核串口驱动程序自动检测应该用于内核控制台的串口(通常用于调试目的或与目标设备通信)。

作为替代方案,引导加载程序可以通过标记列表向内核传递相关的“console=”选项,指定端口和串行格式选项,如
Documentation/admin-guide/kernel-parameters.rst.

3.检测机器类型

现有的引导加载程序:
可选的
新的引导加载程序:
除DT-only平台外,强制要求
引导加载程序应该通过某种方法检测正在运行的机器类型。无论这是硬编码的值还是查看连接的硬件的某种算法都超出了本文档的范围。引导加载程序最终必须能够向内核提供一个MACH_TYPE_xxx值(请参见 linux/arch/arm/tools/mach-types)。这应该在寄存器r1中传递给内核。

对于DT-only平台,机器类型将由设备树确定。将机器类型设置为全部为1(~0)。这不是严格必要的,但确保它不会与任何现有类型匹配。

--- a/linux-4.19.125/arch/arm/configs/xxx_defconfig+++ b/linux-4.19.125/arch/arm/configs/xxx_defconfig+CONFIG_MACH_XXX=y diff --git a/linux-4.19.125/arch/arm/mach-xxx/Kconfig b/linux-4.19.125/arch/arm/mach-axera