如何将 C 中的全局变量值设置为 shell 环境变量?



在特定硬件上移植U-Boot时,
函数必须解析标头以获取操作系统入口点以跳入其中。

比如说,该函数将操作系统入口点获取到全局"C"变量uint32_t osentry

如何将此值设置为 U-Boot shell 命令'go'

我看到U-Boot go(shell)命令,必须设置为go $entry在一些示例中,我看到条目是固定地址设置为shell环境值。

然而,对我来说,它位于全局"C"变量中。

如何将 C 中的全局变量值设置为 shell 环境变量?

使用env_set_addr()函数设置环境变量,以用作普通程序变量的地址。
include/common.h

/**
* env_set_addr - Set an environment variable to an address in hex
*
* @varname:    Environment variable to set
* @addr:   Value to set it to
* @return 0 if ok, 1 on error
*/

补遗

由于某种原因,我在我使用的代码库中找不到这个函数。

您忽略了提及您正在使用的U-Boot版本。
env_set()及其好友显然是在 2017.09 版本中引入的,以取代setenv()及其好友。

在使用 sprintf 格式化后,我使用了类似的 setenv()。

从版本 2011.12 开始,简单的setenv() 已通过 setenv_addr()和/或 setenv_hex()进行了增强,这会将无符号的长整数转换为十六进制数字的字符串。
如果您仍在使用早于 2011.12 的 U-Boot 版本,则必须执行您所描述的操作。

最新更新