【问题标题】:Access u-boot variable from kernel userspace从内核用户空间访问 u-boot 变量
【发布时间】:2019-12-27 12:09:01
【问题描述】:

我试图从 logo.c(/drivers/video/logo/logo.c) 中获取一个 u-boot 变量。请让我知道如何从 logo.c 文件中访问变量。我想获得控制台的价值。如果我使用“fw_printenv 控制台”命令,输出为 console=ttys0。我想从 logo.c 中获取 u-boot 变量(fw_printenv 控制台)的输出值。

【问题讨论】:

  • drivers/video/logo/logo.c 在当前 U-Boot 中不存在。你和哪个版本有关? |内核用户空间是什么意思?来自 Linux 程序?在 U-Boot 代码里面? |可以通过 env_get() 访问 U-Boot 代码内部的环境变量。
  • @Xypron,它是一个 Linux 内核源代码。
  • 查看fw_printenv 的工作原理。我敢打赌它会从文件系统中读取文件。这对内核来说不是一件容易的事,尤其是在许多子系统尚未初始化的早期阶段。你不能改用内核命令行吗?

标签: linux-kernel yocto u-boot


【解决方案1】:

在 u-boot 中:将 console=ttys0 添加到 bootargs

setenv bootargs console=ttys0

在内核文件中:kernel_source/init/main.c

添加 early_param:

char MyConsole[32]={0};
static int __init myconsole(char *str)
{
    printk("%s\n", str);
    memcpy(MyConsole, str, strlen(str));
}
early_param("myconsole", myconsole);

在 logo.c 中,访问这个变量。

extern char MyConsole[];

【讨论】:

  • 感谢您的建议。您能否告诉我哪个日志或如何查看“ printk("%s\n", str) 的输出。我试图查看输出。我在打开设备时登录了设备,但是它只显示内核消息。
  • 我应该调用“early_param("console", myconsole)" 吗?或 early_param("myconsole", myconsole)" 是正确的;
  • 这个是正确的:early_param("console", myconsole)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2018-05-22
  • 1970-01-01
  • 2012-05-17
相关资源
最近更新 更多