通过设备树中的选择节点传递Bootargs对于Beaglebone Black不起作用

E V*_*avi 5 linux-device-driver embedded-linux u-boot device-tree beagleboneblack

根据我的理解,选择的节点用于将引导参数发送到内核。以下是现有设备代码(am335x-bone-common.dtsi)的选定节点。

chosen {
  stdout-path = &uart0;
  };
Run Code Online (Sandbox Code Playgroud)

因此,我修改了选择的节点以传递内核参数。

chosen {
        bootargs = "console=ttyO0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rw rootwait";
        stdout-path = &uart0;
    };
Run Code Online (Sandbox Code Playgroud)

在提起董事会时,我遇到了KERNEL PANIC,这是日志{ https://pastebin.com/XHyrsmfG }

仅供参考:这些是在串行控制台(minicom)上发出的u-boot命令,以便使用SDcard移植内核和设备树。

fatload mmc 0:1 0x81000000 zImage
fatload mmc 0:1 0x82000000 am335x-boneblack.dtb
bootz 0x81000000 - 0x82000000 
Run Code Online (Sandbox Code Playgroud)

saw*_*ust 5

根据我的理解,选择的节点用于将引导参数发送到内核。

您的理解是不完整的。
正如在另一个答案中已经提到的那样,引导程序(即U-Boot)提供的内核命令行是引导板时当前使用的实际参数列表。

对于ARM Linux,默认内核配置将引导加载程序的命令行优先于默认内核命令字符串和设备树中所选节点中的bootargs。
根据U-Boot的作者/维护者沃尔夫冈DENK理由似乎是任何硬编码,内置bootargs是劣于可以很容易地定制并通过引导加载程序供给bootargs。这正是您所看到的。

实际上,存在三种可能的ARM内核启动配置选择:

Kernel command line type:
  (X) Use bootloader kernel arguments if available  
  ( ) Extend bootloader kernel arguments
  ( ) Always use the default kernel command string
Run Code Online (Sandbox Code Playgroud)

如果您想始终忽略U-Boot的bootargs变量中的命令行(以及DT中的命令行),而仅使用CONFIG_CMDLINE中定义的默认内核命令字符串,则应为第三种选择配置内核(CONFIG_CMDLINE_FORCE )。
请注意,只有在启用CONFIG_ATAGS时,此选项列表才可用(“ 支持传统的ATAGS引导数据传递 ”)。

选择DT bootargs的方案是使用现有的内核配置,而只需删除该U-Boot环境变量(即setenv bootargs)。
如果将U-Boot的bootargs变量更改为空字符串(如另一个答案所述),则内核将使用其默认内核命令字符串(CONFIG_CMDLINE)而不是DT。


Pra*_*Lad 3

\n

根据我的理解,所选节点用于将启动参数发送到内核。以下是现有设备代码 (am335x-bone-common.dtsi) 的所选节点。

\n
\n\n
chosen {\n        bootargs = "console=ttyO0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rw rootwait";\n        stdout-path = &uart0;\n    };\n
Run Code Online (Sandbox Code Playgroud)\n\n

看着你的馅饼,启动日志显示命令行如下:

\n\n
\n

内核命令行:console=ttyO0,115200\n ip=10.0.0.111:10.0.0.4::255.255。255.0 rw root=/dev/nfs\n nfsroot=10.0.0.4:/home/dileep/beaglebone/rootfs,

\n
\n\n

由于您还设置了 bootargs “bootargs = "console=ttyO0,115200 root=/dev/mmcblk0p2 rootfstype=ext3 rw rootwait"; ”,因此不会影响,因为 uboot 已经设置了这些参数,即,如果在设备树和标签(uboot)中设置了相同的参数,则将选择 uboot 标签中的参数。

\n\n

所以你必须清除 u-boot 设置的 bootargs。

\n\n
1] setenv bootargs "";\n2] saveenv\n3] fatload mmc 0:1 0x81000000 zImage\n4] fatload mmc 0:1 0x82000000 am335x-boneblack.dtb\n5 bootz 0x81000000 - 0x82000000 \n
Run Code Online (Sandbox Code Playgroud)\n\n

对于新构建的 uboot,其中板尚未编程,但请确保在 u-boot 配置中您没有定义 bootargs 变量。

\n