This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] [参考译文] [常见问题解答] TDA4VM:使用 OSPI 作为引导介质时、如何使用 uEnv.txt 来配置 u-boot env。

Guru**** 2457760 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1400212/faq-tda4vm-how-to-use-uenv-txt-to-configure-u-boot-env-when-using-ospi-as-boot-media

器件型号:TDA4VM

工具与软件:

使用 OSPI 作为引导介质时、我无法使用 OSPI 中加载的 uEnv.txt。 它始终使用默认 操作、我应该怎么做才能使用 OSPI 中加载的 uEnv.txt?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    默认情况下、uEnv.txt 来自环境变量、是从 MMCSD 中获取的。 等 SDK 9.0及更高版本 、无法从 u-boot 提示符更新这些环境变量。 因此、要更改 OSPI 闪存中 uEnv.txt 的源代码、我们必须更改 u-boot 源代码并重新编译 u-boot。

    源代码位于" [PSDK-Linux-Install-Directory]/board-support/ti-u-boot-[commit-hash]/ "、应用以下修补程序:

    diff --git a/include/environment/ti/mmc.env b/include/environment/ti/mmc.env
    index 1e62bf85..b16e9bc9 100644
    --- a/include/environment/ti/mmc.env
    +++ b/include/environment/ti/mmc.env
    @@ -9,27 +9,23 @@ loadbootscript=load mmc ${mmcdev} ${loadaddr} boot.scr
     bootscript=echo Running bootscript from mmc${mmcdev} ...;
     	source ${loadaddr}
     bootenvfile=uEnv.txt
    -importbootenv=echo Importing environment from mmc${mmcdev} ...;
    -	env import -t ${loadaddr} ${filesize}
    -loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenvfile}
    +importbootenv=echo Importing environment from ospi ...;
    +	env import -t ${loadaddr} 0x20000
    +loadbootenv=
    +	if sf probe; then
    +		sf read ${loadaddr} 0x680000 0x20000;
    +	fi
     loadimage=load ${devtype} ${bootpart} ${loadaddr} ${bootdir}/${bootfile}
     loadfdt=load ${devtype} ${bootpart} ${fdtaddr} ${bootdir}/dtb/${fdtfile}
     get_fdt_mmc=load mmc ${bootpart} ${fdtaddr} ${bootdir}/dtb/${name_fdt}
    -envboot=mmc dev ${mmcdev};
    -	if mmc rescan; then
    -		echo SD/MMC found on device ${mmcdev};
    -		if run loadbootscript; then
    -			run bootscript;
    -		else
    -			if run loadbootenv; then
    -				echo Loaded env from ${bootenvfile};
    -				run importbootenv;
    -			fi;
    -			if test -n $uenvcmd; then
    -				echo Running uenvcmd ...;
    -				run uenvcmd;
    -			fi;
    -		fi;
    +envboot=
    +	if run loadbootenv; then
    +		echo Loaded env from ${bootenvfile};
    +		run importbootenv;
    +	fi;
    +	if test -n $uenvcmd; then
    +		echo Running uenvcmd ...;
    +		run uenvcmd;
     	fi;
     mmcloados=
     	if test ${boot_fdt} = yes || test ${boot_fdt} = try; then
    

    访问 " [PSDK-Linux-安装目录] 并运行"make u-boot"以构建 u-boot 二进制文件。

    您可以在以下位置找到内置的 u-boot 二进制文件: " [PSDK-Linux-Install-Directory]/board-support/ti-u-boot-[commit-hash]/build/a72/u-boot.img "。 将 此二进制文件复制到 u-boot 处的 OSPI。

    接下来、您必须在 OSPI 中以0x680000偏移刷写 uEnv.txt 文件。 为此、您可以从备用引导介质(如 SD 卡或 eMMC)或通过网络使用 TFTP 获取文件。 在本例中、我将展示如何使用 SD 卡启动分区。 对于 TFTP、请确保主机上有可用的 TFTP 服务器、并且 uEnv.txt 位于相应的文件夹中。

    引导至 u-boot 提示符、并在其上运行以下命令。

    • fatload MMC 1 $loadaddr uEnv.txt
    • SF 探针
    • SF 擦除0x680000 0x20000
    • SF 更新$loadaddr 0x680000 $filesize

    现在、您的 OSPI 中将有 uEnv.txt、它将在下次启动时执行。

    您现在可以更新 uEnv.txt 以改变您的环境。 在 uEnv.txt 中、可以指定附加环境变量或更新现有环境变量。 例如、要应用器件树叠加层、只需在 uEnv.txt 中提及以下行:

    • name_overles=k3-j721e-evm-virt-mac-client.dtbo

    要在引导时执行某些脚本、您可以将其附加到"uenvcmd"变量的末尾。 这将在每次启动时执行它。 例如、打印"Hello World!" 在引导时、您可以向 uEnv.txt 添加以下命令

    • uenvcmd=echo "hello World!!"

    只是要小心,因为"uenvcmd"已经加载了一些脚本以进行一些检查。 请确保在末尾添加此命令、而不要覆盖它。

    更新完 uEnv.txt 后、请使用上面给出的步骤再次将其刷写到 OSPI、以使更改生效。

    此致、
    Tanmay