0

我正在尝试在 uboot 中引入网络控制台。为此,我首先在“uboot-imx/include/configs/imx8mm_evk.h”中添加了“ncip”,如下所示。稍后,在CONFIG_EXTRA_ENV_SETTINGS结束时调用 DFMC_SWUG

#define DFMC_SWUG \
"setenv ncip 192.168.100.98 \0" \
"ethaddr=00:80:A3:CA:B5:77 \0" \
"swugip=192.168.100.16 \0" \
"ipaddr=192.168.100.2 \0" \
"serverip=192.168.100.16 \0" \
"bootdelay=3\0" \

#define CONFIG_EXTRA_ENV_SETTINGS       \
CONFIG_MFG_ENV_SETTINGS \
JAILHOUSE_ENV \
"script=boot.scr\0" \
--
    --
    --
    "fi;\0" \
    DFMC_SWUG

有趣的是,我能够设置“ethaddr”、“swugip”和除“ncip”之外的其他变量。我想,我在行中做了一些格式错误 --> "setenv ncip 192.168.100.98 \0" \

后来我尝试设置一些名为 dummy_var_1、dummy_var_2、dummy_var_3 的虚拟变量。即使他们没有得到设置。

试图设置一些 dummy_variables

有人可以在这里指导我吗?

4

2 回答 2

0

U-Boot 环境由格式为<env_var>=<string value><null>(并以 CRC32 字开头)的字符串组成。因此,环境变量的字符串在使用CONFIG_EXTRA_ENV_SETTINGS
在代码中预定义它们时必须符合该模板。 这也意味着您不能在环境中安装原始命令,例如.
"setenv ncip 192.168.100.98 \0"


U-Boot 文档对此主题很清楚。
注意警告的最后一句话。

- Default Environment:
    CONFIG_EXTRA_ENV_SETTINGS

    Define this to contain any number of null terminated
    strings (variable = value pairs) that will be part of
    the default environment compiled into the boot image.

    For example, place something like this in your
    board's config file:

    #define CONFIG_EXTRA_ENV_SETTINGS \
        "myvar1=value1\0" \
        "myvar2=value2\0"

    Warning: This method is based on knowledge about the
    internal format how the environment is stored by the
    U-Boot code. This is NOT an official, exported
    interface! Although it is unlikely that this format
    will change soon, there is no guarantee either.
    You better know what you are doing here.

我确实尝试过“ncip=192.168.100.98”...

这看起来几乎是正确的,但需要明确的空终止符。


有趣的是,我能够设置“ethaddr”、“swugip”和除“ncip”之外的其他变量。
...
后来我尝试设置一些名为 dummy_var_1、dummy_var_2、dummy_var_3 的虚拟变量。即使他们没有得到设置。

您只提供了对实际结果的模糊总结。

您是否检查了任何.o目标文件以检查存储了哪些文本字符串?
您是否strings u-boot.bin | less对 U-Boot 映像文件执行了检查以查看映像中嵌入的默认环境?



请注意,您可能会犯另一个错误。

CONFIG_EXTRA_ENV_SETTINGS中定义的环境变量将仅(最初)存在于U-Boot的默认环境中。
你对细节非常吝啬,忽略了你的设置。如果非易失性引导介质中存在现有且有效的存储环境,则需要执行特定过程来抑制现有 存储环境,以便恢复到具有“新”环境变量的默认环境。

在安装新/不同版本的u-boot.bin时未能禁用/删除现有存储环境将隐藏新/不同默认环境以及其中的所有新/不同变量。如果 U-Boot发出类似于以下内容的消息:

Loading Environment from xxx... *** Warning - bad CRC, using default environment  

那么您可以放心,您的新/不同环境变量不在当前运行时环境中。
IOW 您希望在(初始)启动时看到此警告消息。

于 2021-12-09T23:20:18.423 回答
0

如果希望使用 netconsole 编译 u-boot,则必须对 uboot-imx/include/configs/imx8mm_evk.h 中的文件进行以下更改

  1. 添加“ncip”,即拥有网络控制台以及其他网络设置的计算机/设备的 IP 地址。请注意,u-boot 中的每个变量都是以空字符结尾的字符串。

  2. 还添加一个变量(在以下情况下为 dfmcswug),它将通过 netconsole 设置标准输入、输出和错误报告。稍后将调用此变量。

    在此处输入图像描述

  3. 在 CONFIG_EXTRA_ENV_SETTINGS 宏中包含 DFMC_SWUG 宏,以便我们的新设置与其他环境设置一起添加。

  4. 在 CONFIG_BOOTCOMMAND 中添加 dfmcswug 变量,以便在运行时由工具链执行。

    在此处输入图像描述

通过上述步骤,u-boot 应该通过 netconsole 输出其控制台。

在客户端使用 或类似。

nc -u -l -p 6666 <ip_address_of_uboot_host>
于 2021-12-11T16:28:10.030 回答