我是学习 Linux 内核的新手。我知道 Linux 使用/开发/控制台用于打印启动消息的设备文件/驱动程序打印kLinux 启动时。正如这里所回答的: https://unix.stackexchange.com/a/485198/590780
“在 Linux 上,/dev/console 用于在启动(和关闭)期间显示消息。”
然而,有几个方面这让我很困惑。
其一是:如果控制台是来自 Linux 的设备驱动程序,为了能够使用控制台,Linux 内核应该已经加载或正在加载到内存中,对吧?
在Linux启动之初甚至在启动控制台驱动程序之前,如何打印检测CPU等日志?如何在内核加载开始时使用控制台?它被缓冲或类似的东西,然后被刷新?
第二个:完成内核启动后,另一件事让我感到困惑。当内核初始化时,如果没有/sbin/初始化程序然后内核将恐慌!此时,控制台仍然打开,因为我仍然可以看到控制台输出。所以根据我看到的定义(https://www.qnx.com/developers/docs/6.4.0/neutrino/user_guide/cmdline.html):
“显示适配器、屏幕和系统键盘统称为物理控制台,由控制台驱动程序控制。”
据我了解,控制台驱动程序也听键盘! (如果我错了请纠正我)
为什么即使打开控制台,内核发生恐慌后也无法写入/打印?是否开张于O_RDONLY模式还是其他什么?
第三个:第二个引我到第三个。如果我没有记错的话,我是从历史的角度来看这个的,早期的虚拟控制台由键盘和显示器组成。当您按下某个键时,该键会显示在屏幕上/显示该字符对吗?或者像电传打字机。
如果我已经打开了 /dev/console,为什么还需要写入控制台。我举个例子来更好地表达。
假设我使用一些系统调用打开了 /dev/console:
sys_open(SYS_open, "/dev/console", O_RDWR, ...);
如果控制台驱动程序监听键盘,为什么我要写入控制台?
sys_write(SYS_write, "/dev/console", ...);
有人可以解释一下这些要点吗?我愿意接受任何类型的阅读建议。