Linux kernel 编辑焊盘控制寄存器无效
阅读AM3359技术参考手册后,我发现您可以编辑焊盘控制寄存器(引脚Mux)。我尝试使用devmem2编辑这些寄存器,它说它成功地写入了这些寄存器,但再次读取值时,它完全相同 我使用命令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内核中有一些底层的东西正在设置这
sudodevmem2 0x44E10818 w 0x7
并返回
Value at address 0x44E10818 (0xb6f2c818): 0x31
Written 0x7; readback 0x7
但是我又读了一遍,它的值是:0x31。
我所能想到的是,也许linux内核中有一些底层的东西正在设置这些值。是什么导致pin mux保持其值?从中我可以看出:
是控制模块寄存器组的地址(来自第2节“内存映射”)0x44E10000
是0x818
(来自第9节“控制模块”)conf\u gpmc\u ad6
pad是GPMC_AD6
ball(用于R9
SoC,您在BBB上有)ZCZ
球连接到R9
线路MMC1\U DAT6
线路连接到eMMC闪存MMC1\U DAT6
- 默认情况下,该引脚在
模式下多路复用mmc1\u dat6
- 您正在尝试将其重新复制到
模式gpio1\u 6
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的东西。在内核之后,只有软件可以更改它。我可能会使用文件系统的方式,但继续研究内核。谢谢你的帮助!