Linux kernel 编辑焊盘控制寄存器无效

Linux kernel 编辑焊盘控制寄存器无效,linux-kernel,beagleboneblack,Linux Kernel,Beagleboneblack,阅读AM3359技术参考手册后,我发现您可以编辑焊盘控制寄存器(引脚Mux)。我尝试使用devmem2编辑这些寄存器,它说它成功地写入了这些寄存器,但再次读取值时,它完全相同 我使用命令sudodevmem2 0x44E10818 w 0x7并返回 Value at address 0x44E10818 (0xb6f2c818): 0x31 Written 0x7; readback 0x7 但是我又读了一遍,它的值是:0x31。 我所能想到的是,也许linux内核中有一些底层的东西正在设置这

阅读AM3359技术参考手册后,我发现您可以编辑焊盘控制寄存器(引脚Mux)。我尝试使用devmem2编辑这些寄存器,它说它成功地写入了这些寄存器,但再次读取值时,它完全相同

我使用命令
sudodevmem2 0x44E10818 w 0x7
并返回

Value at address 0x44E10818 (0xb6f2c818): 0x31
Written 0x7; readback 0x7
但是我又读了一遍,它的值是:0x31。 我所能想到的是,也许linux内核中有一些底层的东西正在设置这些值。是什么导致pin mux保持其值?

从中我可以看出:

  • 0x44E10000
    是控制模块寄存器组的地址(来自第2节“内存映射”)
  • 0x818
    conf\u gpmc\u ad6
    (来自第9节“控制模块”)
从我看来:

  • GPMC_AD6
    pad是
    R9
    ball(用于
    ZCZ
    SoC,您在BBB上有)
从我看来:

  • R9
    球连接到
    MMC1\U DAT6
    线路
  • MMC1\U DAT6
    线路连接到eMMC闪存
根据您的问题(使用TRM),我可以得出以下结论:

  • 默认情况下,该引脚在
    mmc1\u dat6
    模式下多路复用
  • 您正在尝试将其重新复制到
    gpio1\u 6
    模式
因此,从这次调查中,我可以说,您不应该重新使用该pin(即使可能),因为需要将其多路复用为
mmc1\u dat6
,以便从SoC访问eMMC

如果确实需要将其多路复用为
gpio1\u 6
,请确保首先在设备树文件中为其更改多路复用模式(并将BBB上的
dtb
文件替换为新文件)。在这种情况下,您将无法使用您的eMMC,因此您可能还需要在设备树文件中将此模式更改为4位


参考资料:

[1]


[2]

尝试构建(使用ARM工具链)并用于更改寄存器值。您的
devmem2
工具可能有问题。内核中的某些东西不太可能一直重写这个寄存器。通常,在内核引导过程中,会使用主板设备树文件中的pin-mux值一次性配置pin-mux。我来看看omapconf是如何实现的。我要补充的是,我创建了一个c程序来读取和写入内存。它可以读取pin状态,但当我写入寄存器时,它也不会对It产生任何影响。omapconf有很多麻烦。另外,我不认为这是devmem2的问题,因为我的C程序也有同样的问题。除了dtbo文件之外,我不知道是什么在设置这些值。我会尝试将内核更新到一个更新的版本,看看是否有任何效果。您遇到了什么样的问题?根据我的经验,
omapconf
是在基于OMAP的平台上为开发人员处理来自shell的硬件的通用方法。我看到
omapconf
支持AM3359。你只需要交叉编译它,将它上传到你的设备上,然后执行类似于omapconf write 0x44E10818 0x7的操作。起初我在编译程序时遇到了麻烦,但我得到了它。不幸的是,这个程序也有同样的问题。它运行了,但没有改变值。经过仔细研究之后,这个处理器运行的内核来自于。我要看看是否有一个arm7内核不包含“额外的”。在阅读了答案后,我选择了几个不会干扰系统的引脚,我试图更改MUX的所有引脚都没有更改。我试过omapconf、devmem2和我的C程序。所有这些都没有改变多路复用器。我还在做研究,看看是什么可能导致这种情况。我还展示了beaglebone新版本附带的原始软件和内核,它们也具有相同的效果。该链接用于早期beaglebone板(而不是BBB),因此有点过时。请尝试下一篇文章中介绍的sysfs方法:。如果无法工作,请尝试更改
dts
文件中的pin MUX,将其编译为
dtb
,并将其闪存到BBB。无论如何,修改dts(设备树)将是最正确的方法。不过我觉得很奇怪,
omapconf
的方式不起作用。谢谢你的帮助。我试图创建一个只允许使用编辑寄存器的库,以使其更容易和更快地使用,不幸的是系统不允许这样做。我曾多次读到uboot和内核是唯一可以设置和更改MUX的东西。在内核之后,只有软件可以更改它。我可能会使用文件系统的方式,但继续研究内核。谢谢你的帮助!