好的,我正在使用TI AM 64 XX和一个基础项目,该项目对设备树上的板的一些gpio的定义有限。。我需要比我在dts中定义的gpio更多的gpio,以便稍后在我的c/c++脚本中使用,并将它们作为简单的输出进行操作。。根据我选择的引脚gpio1_26,gpio1_25,我不知道如何准确修改设备树,为了实施这三个全球项目执行情况
&gpio1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&main_gpio1_pins_default>;
gpio-controller;
};
main_gpio1_pins_default: main-gpio1-pins-default {
pinctrl-single,pins = <
AM64X_IOPAD(0x01C8, PIN_OUTPUT, 7) /* gpio1_26 */
AM64X_IOPAD(0x01C4, PIN_OUTPUT, 7) /* gpio1_25 */
AM64X_IOPAD(0x01C0, PIN_OUTPUT, 7) /*gpio1_24 */
>;
};
字符串
你知道吗?谢谢。
我尝试过类似的定义
但它在编译部分失败,这里是错误enter image description here
2条答案
按热度按时间oxf4rvwz1#
我不知道你的CPU,但一般来说,它应该可以通过额外的GPIO扩展当前块。
main_gpio1_pins_default:main-gpio 1-pins-default {pintrl-single,pins = < AM64X_IOPAD(0x 01 C8,PIN_OUTPUT,7)/* gpio1_26 / AM64X_IOPAD(0x 01 C4,PIN_OUTPUT,7)/ gpio1_25 */ AM64X_IOPAD(0x 01 C 0,PIN_OUTPUT,7)/*gpio1_24 */ [在此放置更多条目] >; };
查看CPU的描述以找到所需GPIO的PIN。还应该有计算地址的描述。对于其他TI CPU,这可以通过在线工具完成。或者可以有一个包含所有可用GPIO引脚的Map文件。Grep代码。
eivgtgni2#
正如你在编译输出中看到的,没有
gpio1
节点的定义。dts中的&
符号引用了一个以前定义的节点,如果它不是默认定义的,或者如果你没有显式定义它,该引用没有意义。查看您正在使用的dts 'k3-am 642-sk.dts',我看到第130行中有一个名为main_pmx0
的节点,这是主pinmux模式节点,你应该在那里添加你的配置。另一个选择(实际上是推荐的一个)是创建一个.dtsi
文件,并将其包含在主节点中,但为了简单起见,你可以修改原始文件。在主pinmux节点中,您可以定义引脚:
字符串
在这个例子中,我只是添加了2个引脚,随意添加你想要的。
这样做,你应该能够使用
sys/class/gpio
或gpio char dev驱动程序(或libgpiod等工具)与gpios一起工作。注意事项:请确保做适当的研究有关pinmux模式(参考相应的参考处理器手册),有一些引脚,不能作为gpios使用。我只是复制了引脚方向和pinmuxmode你写在你的问题,证明你已经得到了这些信息。
注意2:如果你使用bitbake编译,那么你应该重新编译.wic镜像,否则使用nvm
注3(回复您的评论):如果你没有看到
/sys/class/gpio
,那是因为它已经被弃用了,新的标准是使用gpio char device
。如果你使用ls /dev
,你会发现一些字符开发驱动器称为类似gpiochipX
。如果你想添加sys/class/gpio,那么你必须在内核menuconfig中配置它:打开内核menuconfig并激活以下内容:
型