U-Boot 如何与 Linux 内核通信?
How does U-Boot communicate with Linux kernel?
我正在看这本书,它说:
After U-Boot loads Linux kernel, the kernel will claim all the resources of U-Boot
这是什么意思?是不是意味着U-Boot中分配的所有数据结构都会被丢弃?
例如:U-Boot时会初始化PCIE和Network Device。
启动Linux内核后,PCIE和Network Device数据结构会被丢弃吗? Linux 内核会再次初始化 PCIE 和 NEtwork 吗?或者 U-Boot 会传输一些数据给内核?
这取决于您的 CPU 架构如何进行通信,但通常是通过 RAM、闪存或文件系统中的特殊位置。没有数据结构被传输,它们对内核没有意义,并且两者之间的内存 space 是不同的。 Uboot 通常会传递引导参数,例如存在的硬件类型、用于某事的内存或用于特定驱动程序的模式类型。所以是的,内核将重新初始化硬件。异常可能是内核可能希望 uboot 或 BIOS 已经设置的一些低级别 CPU 细节。
根据您的架构,u-boot 与 Linux 内核通信的机制可能不同。
实际上可能有一些由 u-boot 定义的结构被传输到内核并由内核使用 ATAGS。传递这些结构的地址存储在 ARM 上的 r2 寄存器中。它们传达可用 RAM 大小和位置、内核命令行等信息,...
请注意,在某些体系结构上(再次像 ARM)我们支持设备树,它旨在定义内核将在其中 运行 的硬件以及内核命令行、内存和其他事情。这种描述通常在内核编译时创建,由u-boot加载到内存中,在ARM架构的情况下,其地址通过r2寄存器传输。
有趣的是(关于你的问题)u-boot 可以在通过设备树覆盖机制将它传递给内核之前改变这个设备树结构。所以这是一种(相对)新的 u-boot/kernel 交流方式。请注意,某些体系结构不支持设备树。
最后,是的,硬件被内核重新初始化,即使它们已经被 u-boot 初始化,除了内存控制器和一些其他非常低级别的初始化,AFAIK。
我正在看这本书,它说:
After U-Boot loads Linux kernel, the kernel will claim all the resources of U-Boot
这是什么意思?是不是意味着U-Boot中分配的所有数据结构都会被丢弃?
例如:U-Boot时会初始化PCIE和Network Device。 启动Linux内核后,PCIE和Network Device数据结构会被丢弃吗? Linux 内核会再次初始化 PCIE 和 NEtwork 吗?或者 U-Boot 会传输一些数据给内核?
这取决于您的 CPU 架构如何进行通信,但通常是通过 RAM、闪存或文件系统中的特殊位置。没有数据结构被传输,它们对内核没有意义,并且两者之间的内存 space 是不同的。 Uboot 通常会传递引导参数,例如存在的硬件类型、用于某事的内存或用于特定驱动程序的模式类型。所以是的,内核将重新初始化硬件。异常可能是内核可能希望 uboot 或 BIOS 已经设置的一些低级别 CPU 细节。
根据您的架构,u-boot 与 Linux 内核通信的机制可能不同。 实际上可能有一些由 u-boot 定义的结构被传输到内核并由内核使用 ATAGS。传递这些结构的地址存储在 ARM 上的 r2 寄存器中。它们传达可用 RAM 大小和位置、内核命令行等信息,...
请注意,在某些体系结构上(再次像 ARM)我们支持设备树,它旨在定义内核将在其中 运行 的硬件以及内核命令行、内存和其他事情。这种描述通常在内核编译时创建,由u-boot加载到内存中,在ARM架构的情况下,其地址通过r2寄存器传输。
有趣的是(关于你的问题)u-boot 可以在通过设备树覆盖机制将它传递给内核之前改变这个设备树结构。所以这是一种(相对)新的 u-boot/kernel 交流方式。请注意,某些体系结构不支持设备树。
最后,是的,硬件被内核重新初始化,即使它们已经被 u-boot 初始化,除了内存控制器和一些其他非常低级别的初始化,AFAIK。