zoukankan      html  css  js  c++  java
  • 翻译:A Tutorial on the Device Tree (Zynq) -- Part V

    A Tutorial on the Device Tree (Zynq) -- Part V

    Application-specific data

    之前提过,设备树中是一些特殊信息,这样一个驱动可以管理数片类似的硬件。例如,一个LCD显示驱动,分辨率信息和物理尺寸可能出现在设备树中。串口信息要告诉驱动当前的时钟频率。

    最简单的,最常用的形式,这个信息由一条赋值语句组成:

          xlnx,slv-awidth = <0x20>;
    

    "xlnx"前缀可以防止命名冲突。名字可以任意取,但最好能望文知意。这里的"xlnx"是使用软件自动生成设备树时加上的前缀。

    为了抓取到这一条信息,代码可以这样写:

      void *ptr;
      ptr = of_get_property(op->dev.of_node, "xlnx,slv-awidth", NULL);
    
      if (!ptr) {
        /* Couldn't find the entry */
      }
    

    第三个参数NULL,是一个长度指针,可以返回数据的长度。

    这条语句的值是一个数字:

      int value;
      value = be32_to_cpup(ptr);
    

    be32_to_cpup读“ptr”指向的数据,从大端转到处理器的小端,然后就得到想要的数字了。

    drivers/of/base.c中有大量读取这些信息的API。

    总结

    为一个外置写一个设备树entry很简单:

    • 为"compatible"赋一个字符串"magic string",自动生成工具的生成格式一般是:名字+版本。
    • 在数据手册里查看总线上设备的地址分配信息, 写一条 "reg=" 语句。
    • "interrupt-parent=<&gic>"
    • 中断号 "interrupt="
    • 最后加上一些设备的自定义参数
  • 相关阅读:
    Bufferedreader和BufferedWriter(带缓存的输入输出)
    FileReader和FileWriter
    Map接口的类实现
    Map接口
    Set集合
    List接口的实现类
    获取文本框或密码框中的内容
    ADTS (zz)
    初级美语 L003:My Family 解析
    初级美语 L001:Self Introduction 解析
  • 原文地址:https://www.cnblogs.com/sammei/p/3984475.html
Copyright © 2011-2022 走看看