我知道在Linux内核编译开始时,KConfig可以对C预处理器进行调优。并且,设备树用于在运行时为编译后的内核提供有关硬件的描述。
这两个可配置特性是如何重叠的?
例如,两者都提供了有关内部CPU细节和外部外设驱动程序的信息。我想,设备树中提到的任何外围设备都必须得到先前在.config文件中声明的驱动程序。我也可以猜到,如果一个驱动程序被编译为内置的,它将不再作为一个模块加载.但是还有什么更好的细节呢?
发布于 2019-12-12 23:56:04
编译时内核配置可以指定是否包括内核源代码树中包含的每个标准驱动程序,如何将这些驱动程序包括在内(作为内置或作为可加载模块),以及许多其他参数,例如在编译内核时将使用什么样的优化和其他选择(例如,对特定CPU模型进行优化,还是尽可能通用,或者是否默认启用谱/熔毁安全缓解等功能)。
如果编译时内核配置设置为足够通用的,同一内核可以用于同一处理器体系结构中的大量不同系统。
另一方面,设备树是关于内核当前运行的实际硬件的。对于没有自动可移植技术的嵌入式系统和其他系统,如ACPI或PCI(e),设备树将指定特定硬件组件的确切I/O或内存地址,以便驱动程序能够查找和使用这些硬件组件。
即使设备树描述了特定硬件组件的存在以及如何访问它,如果在编译时禁用了它所需的驱动程序,那么除非稍后单独添加驱动程序模块,否则内核将无法使用它。或者,如果内核是用完全单块配置编译的,没有可加载的模块支持,那么除非内核的驱动程序包含在内核编译中,否则内核根本无法使用特定的设备。
如果硬件组件的驱动程序包含在内核配置中(无论是内置的还是可加载的模块),但是设备树中没有它的信息(硬件体系结构不包括标准检测机制),那么内核将不知道硬件组件的存在。例如,如果设备树错误地将显示控制器的帧缓冲区指定为常规可用RAM,则可能会得到存储在显示控制器的默认帧缓冲区中的任何字节的随机显示,作为像素“噪声”的混乱。或者,如果显示控制器需要特定的初始化才能开始工作,则可能根本没有输出。
换句话说,设备树的目的是告诉内核系统的各种硬件特性位于处理器的地址空间(S)中,既可以让内核指出正确的驱动程序来纠正物理硬件,也可以告诉内核它不应该尝试用作常规RAM的地址空间的哪一部分。
https://unix.stackexchange.com/questions/556957
复制相似问题