gpt4 book ai didi

linux-kernel - 引导加载程序如何将内核命令行传递给内核?

转载 作者:行者123 更新时间:2023-12-04 08:34:12 24 4
gpt4 key购买 nike

我们可以看到这样的内核命令行:

ckim@chan-ubuntu:~/$ cat /proc/cmdline  
BOOT_IMAGE=/boot/vmlinuz-4.15.0-122-generic root=UUID=99c66a0a-39c1-451c-9f72-ad1576aafb41 ro quiet splash

这个命令行好像是grub传给内核启动的。这个命令行实际上是如何传递给内核程序的?我想也许命令行作为字符串加载到内存中,并且处理器的寄存器(如 x1,如果是 arm64 处理器)设置为该字符串地址?我对 arm64 案例特别感兴趣。

最佳答案

同样的问题有时会突然出现在我面前。因此,这是深入研究的时刻。

虽然 x86 使用 special protocol for booting Linux ,对于arm64 a different scheme is used .为了与内核通信,引导加载程序仅将单个地址 - 加载的展平设备树 (FDT) 放入x0 寄存器。

此处摘录自 Linux and the Device Tree, Runtime configuration :

In most cases, a DT will be the sole method of communicating data fromfirmware to the kernel, so also gets used to pass in runtime andconfiguration data like the kernel parameters string and the locationof an initrd image.

Most of this data is contained in the /chosen node, and when bootingLinux it will look something like this:

chosen {
bootargs = "console=ttyS0,115200 loglevel=8";
initrd-start = <0xc8000000>;
initrd-end = <0xc8200000>;
};

Here is another example of DT .

接下来,在内核早期启动期间,OF/FDT 模块解析传递的设备树fill in boot_command_line variable .

关于linux-kernel - 引导加载程序如何将内核命令行传递给内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64877292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com