工具与软件:
使用 OSPI 作为引导介质时、我无法使用 OSPI 中加载的 uEnv.txt。 它始终使用默认 操作、我应该怎么做才能使用 OSPI 中加载的 uEnv.txt?
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.
工具与软件:
使用 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 提示符、并在其上运行以下命令。
现在、您的 OSPI 中将有 uEnv.txt、它将在下次启动时执行。
您现在可以更新 uEnv.txt 以改变您的环境。 在 uEnv.txt 中、可以指定附加环境变量或更新现有环境变量。 例如、要应用器件树叠加层、只需在 uEnv.txt 中提及以下行:
要在引导时执行某些脚本、您可以将其附加到"uenvcmd"变量的末尾。 这将在每次启动时执行它。 例如、打印"Hello World!" 在引导时、您可以向 uEnv.txt 添加以下命令
只是要小心,因为"uenvcmd"已经加载了一些脚本以进行一些检查。 请确保在末尾添加此命令、而不要覆盖它。
更新完 uEnv.txt 后、请使用上面给出的步骤再次将其刷写到 OSPI、以使更改生效。
此致、
Tanmay