首先推荐elinux.org上一篇关于Device Tree的文章:

http://elinux.org/Device_Tree_Usage

这是一篇关于Device Tree的入门文章。对英文犯怵的童鞋也不要紧,我在csdn上找到了翻译稿:

http://blog.csdn.net/21cnbao/article/details/8457546

译文重新组织了部分语言,开头还写了一段关于DT的轶事,不过基本上还是忠于英文原文的。但还是要提个醒,这篇翻译稿比较早了,而英文版在后来又经过几次更新,所以中文翻译版的内容不及英文原稿详尽。

上面的文章对于Device Tree入门足够了,所以我不打算再重复已有的内容,仅写一些开发过程中可能会用到的杂七杂八的东西。这些东西有的来自对厂商SDK所含DT的研究,有的来自Linux源代码树下Documentation目录下关于Device Tree的内容。

1. compatible条目

compatible尽量采用精确名称。比如am33xx系列处理器,compatible要写成"TI,am3352",而不要写成“TI,am33xx”。这主要是为了防止芯片厂家什么时候脑袋抽抽了,比如弄出一个am3362处理器,和am3352还不兼容,那你原来写的“TI,am33xx”就可能造成曲解。

2.  binding

在开始写你自己的DT之前,先看下内核源代码树下Documentation/devicetree目录,以及其下的binding子目录。binding子目录记录了内核所支持的所有处理器系列的DT文件规则,好好利用可以降低不少工作量。还是以am33xx系列处理器作例子,我手头有一块BBB,在它的GPMC口上连接了一个小东西,网上能找到的GPMC配置方法都是在自己的驱动里面对conf_pin_mux和gpmc_conf这两组寄存器作ioremap,也有部分文章会把conf_pin_mux放在DT里面,但gpmc还是在自己的驱动里面配置。而实际上pinmux和gpmc时序都是可以在DT里面配好的,ioremap和写寄存器工作由内核自带的GPMC驱动代为完成。配置方法在Documentation/devicetree/bindings/memory-controllers/omap-gpmc.txt。

3. Device Tree反编译

有时候你想看看编译完成的DT和你编写的源文件是不是一致,可以用如下命令对dtb进行反编译:

dtc -I dtb -O dts -o you_dt.dts your_dt.dtb

4. node的status属性

可以通过给外设节点加上如下属性以禁用该node:

status=disabled

这个属性应该厂家SDK用得比较多。因为厂家SDK理应提供所有外设的DT配置,但从使用者角度考虑,某个外设应能自由选择打开或关闭,所以芯片厂家SDK默认情况下应关闭所有可关闭的外设,由板级开发人员打开需要的部分。但要注意了,启用外设的值是okay而不是enabled。嗯,为什么要把这个拿出来说,因为我一开始弄DT的时候理所当然的把disabled覆写为enabled,死活不起作用,被坑惨了。

5. 值覆盖

如果在dtsi文件里,某个node已经对某个property赋值了,你可以用新值覆写旧值。就说上面的status属性,TI SDK的DT文件默认是关闭几乎所有外设的,然而你现在想用i2c0了,这个时候你就可以在你自己的DTS文件里包含TI SDK提供的dtsi文件(这个文件里对i2c0节点的status属性赋值为disabled),然后用你自己的值覆盖:

/* '&'符号表示引用已有的node */

&i2c0 {

status="okay";                   /* 用新值覆写旧值 */

};

6. 节点引用(节点关联)

在配置外设节点时几乎总会用到节点关联,因为几乎所有外设都需要配置pinmux。仍然以GPMC作为例子,我们先要配置好GPMC的PINMUX:

gpmc_pinmux_default: gpmc_pinmux_default {

...

};

然后在GPMC节点里告诉kernel使用gpmc_pinmux_default这个引脚配置:

gpmc@50000000 {

...

pinctl-name=<default>;

pinctl-0 = <&gpmc_pinmux_default>;    /* 注意'&'符号 */

};

Device Tree碎碎念的更多相关文章

  1. Linux碎碎念

    在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...

  2. 一些关于Linux入侵应急响应的碎碎念

    近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...

  3. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  4. Jerry的碎碎念:SAPUI5, Angular, React和Vue

    去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...

  5. 结对编程ending-我和洧洧的碎碎念

    应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...

  6. C语言 · 分分钟的碎碎念

    算法提高 分分钟的碎碎念   时间限制:1.0s   内存限制:256.0MB      问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...

  7. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

  8. Java实现 蓝桥杯VIP 算法提高 分分钟的碎碎念

    算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用箭头画出这个念头的 ...

  9. Device Tree(二):基本概念

    转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...

随机推荐

  1. 【算法基础】卡尔曼滤波KF

    kalman filter KCF 尺度变化是跟踪中比较基本和常见的问题,前面介绍的三个算法都没有尺度更新,如果目标缩小,滤波器就会学习到大量背景信息,如果目标扩大,滤波器就跟着目标局部纹理走了,这两 ...

  2. 20155208徐子涵 2016-2017-2 《Java程序设计》第2周学习总结

    20155208徐子涵 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 第三章 基础语法 3.1 类型.变量与运算符 • 关键字:在定义java文件名的时候要 ...

  3. RPC 原理

    转载地址:你应该知道的 RPC 原理 在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司 ...

  4. java-SimpleDateFormat类

    1.SimpleDateFormat类实现日期和字符串的相互转换 * A:DateFormat类的概述 * DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或 ...

  5. python------模块定义、导入、优化 ------->xml模块

    1. xml模块 引用参考原文链接:https://www.cnblogs.com/python-gm/p/8032465.html      谢谢 xml是实现不同语言或程序之间进行数据交换的协议, ...

  6. 用idea编写第一个jsp文件

    创建一个JAVA-web项目的前提:1.下载并安装JDK2.安装并配置Tomcat服务器 下面开始创建JAVA-web项目: 1.File——>new——>Project...   2.跟 ...

  7. struts2(三)拦截器

    拦截器 需求 如果要访问某一个action类中的某一个方法的内容,如果是admin用户,则访问,如果不是admin用户,则不能访问. 实现 缺点  权限判断的代码和业务逻辑代码混合在一起了 利用拦截器 ...

  8. Connecting Elixir Nodes with libcluster, locally and on Kubernetes

    转自:https://www.poeticoding.com/connecting-elixir-nodes-with-libcluster-locally-and-on-kubernetes/ Tr ...

  9. js技巧专题篇: 页面跳转

    本篇主要介绍网页上常见的页面跳转技术.页面跳转有几种方式,比较常用的是window.location.href,window.location.replace,window.open,当然还有目前比较 ...

  10. [转]Java之JMX 详解

    一.JMX简介 JMX是一种JAVA的正式规范,它主要目的是让程序有被管理的功能,那么怎么理解所谓的“被管理”呢?试想你开发了一个软件(如WEB网站),它是在24小时不间断运行的,那么你可能会想要“监 ...