免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2330 | 回复: 3
打印 上一主题 下一主题

[内核入门] linux driver中的dts定义传值进内核问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-27 17:12 |只看该作者 |倒序浏览
  1.         gpio-dev {
  2.                 compatible = "gpio-dev";

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

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

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

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




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

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

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

论坛徽章:
0
2 [报告]
发表于 2015-11-30 22:29 |只看该作者
DTS就是内核驱动的配置文件,主要就是给驱动服务的。驱动是可以把这些值读出来的。读写的函数是在drivers/of的目录里面。 具体用法根据fdt.c里面的函数,顺藤摸瓜,随便查查源码就可以了。

论坛徽章:
0
3 [报告]
发表于 2015-12-02 09:10 |只看该作者
你的这个驱动,完全没必要重复造轮子,内核里有 drivers/leds/leds-gpio.c
你可以参考这个驱动,看看他是怎么从dts中获取gpio信息的

论坛徽章:
0
4 [报告]
发表于 2015-12-05 13:11 |只看该作者
回复 3# senioryzc


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

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

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

  1. gpio-dev {
  2.     .compatible = "gpio-dev"

  3.     reset3g {
  4.         .label = "reset3g"
  5.         .gpios = "xxxxx"
复制代码
自作聪明了 ,而如果以上格式 ,还需要一个 for each 的函数用来获取 child node
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP