p0w3r 发表于 2015-11-27 17:12

linux driver中的dts定义传值进内核问题。

        gpio-dev {
                compatible = "gpio-dev";

                reset3g {
                        label = "reset3g";
                        gpios = <&gpio3 0 1>;
                };
我在 dts 文件定义了以上内容,用于控制GPIO口输出电平 。

我在内核驱动里面已经把自己想要的功能实现了 ,但是我是把针脚数写死了 。

google 了各种关键字 , 找不到相关的 。

请问我应该可以把dts 传进来的值 ,在内核里面调用?




============以下是一些自己的分析=========================static int gpio_probe(struct platform_device *dev)我在定义probe 的时候,发现如果没有 “ struct platform_device *dev " 就会编译出错 ,

所以我觉得 dts 里面的table 应该是在 *dev 里面的 ,

而就算这样 ,但我不知道应该怎么样把*dev 里面的值拿出来啊 , 我不知道里面是有什么东西的。

kerryxi 发表于 2015-11-30 22:29

DTS就是内核驱动的配置文件,主要就是给驱动服务的。驱动是可以把这些值读出来的。读写的函数是在drivers/of的目录里面。 具体用法根据fdt.c里面的函数,顺藤摸瓜,随便查查源码就可以了。

senioryzc 发表于 2015-12-02 09:10

你的这个驱动,完全没必要重复造轮子,内核里有 drivers/leds/leds-gpio.c
你可以参考这个驱动,看看他是怎么从dts中获取gpio信息的

p0w3r 发表于 2015-12-05 13:11

回复 3# senioryzc


   恩 ,我已经搞掂了 , 只不过leds 的驱动是加载到 /sys/class/led 里面 ,而我是需要加载到 /dev

    不过我都是参考这个驱动搞掂的 .

    而其实我代码本来就是没有问题的 ,只是因为我写如下的样式倒是获取不到gpio号.
gpio-dev {
    .compatible = "gpio-dev"

    reset3g {
      .label = "reset3g"
      .gpios = "xxxxx"
自作聪明了 ,而如果以上格式 ,还需要一个 for each 的函数用来获取 child node
页: [1]
查看完整版本: linux driver中的dts定义传值进内核问题。