我们可以看到这样的内核命令行:
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机箱特别感兴趣。
有时会出现同样的问题。因此,这是深潜的时刻。
而86使用专用协议用于引导的Linux,在的情况下arm64 使用不同的方案。为了与内核进行通信,引导加载程序仅将单个地址加载的扁平化设备树(FDT)放入x0
寄存器中。
这是摘自Linux和设备树,运行时配置:
在大多数情况下,DT是将数据从固件传递到内核的唯一方法,因此也习惯于传递运行时和配置数据,例如内核参数字符串和initrd映像的位置。
这些数据大部分包含在/ chosen节点中,并且在引导Linux时将如下所示:
chosen { bootargs = "console=ttyS0,115200 loglevel=8"; initrd-start = <0xc8000000>; initrd-end = <0xc8200000>; };
接下来,在内核早期启动期间,OF / FDT模块解析传递的设备树并填充boot_command_line
变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句