Linux 应用层怎么从 dts 中获取 gpio 号码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
huangya
V2EX    Linux

Linux 应用层怎么从 dts 中获取 gpio 号码?

  •  
  •   huangya 2024-03-07 11:30:53 +08:00 1815 次点击
    这是一个创建于 657 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我的 dts 情况与[1]类似,链接中给出了一个例子是从 kernel space 获取 gpio 号码的。最关键的函数 of_get_named_gpio 。我可以确认这个在 kernel space 是可以工作的。但是现在的问题是,我想从 user space 中获取这个 gpio 号码。有现成的 gpio 工具可以通过命令做到吗?还是说需要写 C 代码?

    [1]https://stackoverflow.com/questions/39016253/correct-way-to-get-the-gpio-number-from-the-device-tree

    8 条回复    2024-03-07 21:42:50 +08:00
    yolee599
        1
    yolee599  
       2024-03-07 12:01:29 +08:00
    应该是无法获取的,dts 里定义的东西是给 drivers 里的 probe 函数用的。除非你自己实现一个 drivers 然后注册成一个设备节点,user space 读这个设备节点,设备节点再把这个 gpio 号码返回
    LGA1150
        2
    LGA1150  
       2024-03-07 12:10:21 +08:00 via Android
    先说下原始需求吧,别又是个 XY 问题
    huangya
        3
    huangya  
    OP
       2024-03-07 12:18:05 +08:00
    @LGA1150 原始需求就是应用层有个脚本想获取 gpio 号码后,使用/sys/class/gpio/ 接口对 gpio 硬件进行一些操作。因为板子型号很多,每个板子的 gpio 号码可能不一样。为了灵活,所以脚本里面不写 hardcode 来定死 gpio 号码,想通过 dts 来获取 gpio 号码。
    LGA1150
        4
    LGA1150  
       2024-03-07 12:48:54 +08:00 via Android
    @huangya 进行什么操作?
    huangya
        5
    huangya  
    OP
       2024-03-07 13:44:05 +08:00
    先 export ,然后设置 direction 为 in ,然后读值。
    bfdh
        6
    bfdh  
       2024-03-07 18:35:05 +08:00
    /proc/device-tree/
    从这里直接读?
    huangya
        7
    huangya  
    OP
       2024-03-07 18:45:47 +08:00
    @bfdh 这个方式有点问题,看我链接的例子:
    gpio-name = <&gpioX 21 0>;
    这里的 gpio number 不是 21. 需要看 gpioX 中的 X 。一般情况下,是 32*X + 21. 但是/proc/device-tree 中看到的 dtb ,也就是说你并不知道 X 是多少,&gpioX 代表的是一个地址。你用 hexdump 看/proc/device-tree 对应的 gpio 节点看到的地址值。
    LGA1150
        8
    LGA1150  
       2024-03-07 21:42:50 +08:00
    @huangya
    先看下 https://www.kernel.org/doc/Documentation/gpio/drivers-on-gpio.txt 是否有合适的驱动模型,比如你的输入来自一个按键,可以用 gpio-keys 。

    如果没有合适的模型,可以用 OpenWrt 的 gpio-export 内核补丁 https://github.com/openwrt/openwrt/blob/openwrt-23.05/target/linux/generic/hack-5.15/800-GPIO-add-named-gpio-exports.patch ,然后在 dts 里定义一个固定名字的 export ,就可以用 /sys/class/gpio/<name> 访问这个 GPIO 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3149 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 11:02 PVG 19:02 LAX 03:02 JFK 06:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86