【问题标题】:How to set the SoC's register values in Linux kernel and U-boot?如何在 Linux 内核和 U-boot 中设置 SoC 的寄存器值?
【发布时间】:2014-03-28 06:26:37
【问题描述】:

我已获得所有寄存器值,例如 SRAM Window 0 控制寄存器、PCI Express 配置地址寄存器和 Armada 370 SoC 的许多其他寄存器值。
现在,为了开发板,我必须在 U-boot 和 Linux 内核中设置所有这些寄存器值。
有没有办法轻松做到这一点?
例如,如果我想设置 PCI Express 配置地址寄存器,我该如何开始?
任何指向良好资源的方向都会有所帮助。谢谢。

【问题讨论】:

  • 您实际上必须从引导加载程序设置它们,在您的情况下是 u-boot。大多数设置都是很早就编写的,可能是通过汇编编写的。其中一些值可能已经由引导加载程序设置,您需要检查是否有任何不同的设置。设置这些寄存器没有什么特别的,只是要注意依赖关系。

标签: linux-kernel embedded arm u-boot


【解决方案1】:

1) 在 u-boot 中,查看 /board 子目录:应该找到你的板特定文件。提供了几个 Marvell 平台,但没有 armada 370,所以看起来你应该自己添加它。也许,你已经有适当的分布? 检查现有代码,我猜您应该使用 GT_REG_WRITE 宏(在 /board/Marvell/common/core.h 中定义)。但对于 armada 370 来说可能会有所不同。

2) 在 linux 内核中,也有一个特定于板的代码的位置:在 /arch 子目录中查找。 Armada 370 是基于 ARM 的,所以应该放在 /arch/arm 中。所有 ARM 平台都有一个通用代码块,以及名为“mach-”和“plat-”的特定子目录。您的代码应该像那里一样排列。在 "mach-" 子目录中查找 "board-" 文件,它们包含在 linux 内核启动时执行的代码。

【讨论】:

    【解决方案2】:

    你应该看看 arch/arm/mach-mvebu ! (我指的是3.16内核)。

    Free-Electrons 在这个 SoC 系列上也做了很多工作。你可以在这里查看他们的 git: https://github.com/MISL-EBU-System-SW/mainline-public/commits/3.16/cpuidle-v3

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 2015-10-20
      • 2018-09-27
      • 2012-04-24
      相关资源
      最近更新 更多