linux-kernel - AGX jetson-Xavier 的 Linux 内核上的设备树 gpios
问题描述
我使用的是 Xavier AGX,在启动时我在 dmesg 上发现了以下输出:
[ 0.963531] mc-err: mcerr ops are set to t19x
[ 0.971308] iommu: Adding device 2600000.dma to group 57
[ 0.978632] GPIO line 490 (pcie-reg-enable) hogged as output/high
[ 0.978710] GPIO line 289 (pcie-reg-enable) hogged as output/high
如何在设备树(tegra194-p2888-0000-a00.dtsi)中写成:
gpio@2200000 {
pcie-reg-enable {
gpio-hog;
gpios = <TEGRA194_MAIN_GPIO(Z, 2) GPIO_ACTIVE_HIGH
TEGRA194_MAIN_GPIO(A, 1) GPIO_ACTIVE_LOW>;
label = "pcie-3v3-reg", "pcie-12v-reg";
output-high;
status = "okay";
};
Dtc 解码 (/boot/dtb/tegra194-p2888-0001-p2822-0000.dtb) 给出:
pcie-reg-enable {
gpio-hog;
gpios = <0xca 0x0 0x1 0x1>;
label = "pcie-3v3-reg", "pcie-12v-reg";
output-high;
status = "okay";
};
我很困惑为什么两者的输出都设置为 HIGH ?是不是一低一高?PS:我对设备树不熟悉,请帮助我。
解决方案
该GPIO_ACTIVE_LOW
设置意味着数据值在写入硬件之前将在软件中进行逻辑反转,并且来自硬件的原始数据值将在返回给调用者之前进行逻辑反转。(也有绕过这种逻辑反转的 GPIO 访问函数的“原始”变体。)
DTS 属性意味着 GPIO 线将output-high;
被配置为具有高信号电平的输出。
对于两个 GPIO,两者都将配置为具有高信号电平的输出,但具有GPIO_ACTIVE_LOW
设置的一个将具有逻辑值 0(除非您进行“原始”读取),而具有该GPIO_ACTIVE_HIGH
设置的一个将具有逻辑值值 1。如果您使用设置将值 1 写入(但不是“原始”写入)GPIO GPIO_ACTIVE_LOW
,其输出将变为低信号电平。
推荐阅读
- xamarin.android - 尝试在空对象引用上调用虚拟方法“void android.view.View.resolveLayoutParams()”
- javascript - jQuery Ajax 调用问题
- input - 如何在 Visual Studio Code 中的 python 交互中修复“StdinNotImplementedError”
- maven - Maven surefire插件v2.18和v2.22.0的区别
- xml - 如何在所有页面中添加动态标题,同时使用 XSL:FO 使用 fop 从 XML 生成 pdf?
- c++ - 使用skia库编译cpp wasm模块时遇到错误
- asynchronous - Vue 延迟加载/异步组件在初始加载时加载
- arrays - 在excel上使用vba进行无重复的Vlookup
- java - Java:将字符串转换为文档(W3C)而不解码数字字符参考
- java - 目标配方失败openjdk1.8