繁体   English   中英

在启动时,ARM Linux内核如何将控制台输出映射到硬件设备?

[英]How does the ARM Linux kernel map console output to a hardware device on boot?

我目前正在努力确定如何通过QEMU获得仿真环境,以在命令行上正确显示输出。 我有一个环境,可以使用virt参考板, cortex-a9 CPU和为ARM交叉编译的4.1 Linux内核完美显示。 但是,如果我将4.1内核换成2.6或3.1,突然我将看不到控制台输出。

解决这个问题是我的主要目标,但我觉得我对Linux和硬件如何在通过引导脚本进行用户空间配置之前进行初始集成以及如何执行没有足够的了解。 我知道设备树,并对它的工作原理有一个松散的了解。 但是我遇到的一个问题是,另一个内核版本破坏了控制台的可用性,这完全使我感到困惑。 有人可以解释Linux最初如何将控制台输出映射到ARM体系结构上的硬件设备吗?

谢谢!

答案很大程度上取决于哪个内核版本,设置了哪些配置选项,什么硬件以及可能还取决于内核命令行参数。

对于现代内核,答案是它在设备树blob中查找以传递设备描述,其中一些将是串行端口,并对其进行初始化。 内核配置或命令行将指定将哪个控制台用于控制台。 对于较早的内核,尤其是如果您一直回到2.6,则使用设备树的通用性较差,对于某些硬件,引导加载程序只是说“这是一个通用的Express Board”(例如),并且内核已编译-数据结构告诉它所支持的每个板卡的设备位置。 随着向设备树的过渡,电路板被一个接一个地转换,有时一次被转换成几个设备,因此,对于任何特定内核版本,确切的情况取决于您使用的是哪个板。

我宁愿怀疑您遇到的另一件事是,如果内核在启动早期崩溃(即在根本找不到串行端口之前崩溃),那么它将永远不会输出任何东西。 因此,如果内核为时过早以至于不能完全正确地支持“ virt”板,或者内核配置缺少重要内容,那么很有可能在早期启动时崩溃而无法打印有用的消息。 (有时“ earlycon”或“ earlyprintk”内核参数可以在这里提供帮助,但并非总是如此。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM