Device Tree碎碎念
首先推荐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碎碎念的更多相关文章
- Linux碎碎念
在学习Linux过程中,有许多有用的小技巧.如果放在纸质的笔记本上,平时查阅会相当不方便.现在以一种“碎碎念”的方式,汇集整理在此,目前还不是很多,但随着学习.工作的深入,后续会陆陆续续添加更多的小技 ...
- 一些关于Linux入侵应急响应的碎碎念
近半年做了很多应急响应项目,针对黑客入侵.但疲于没有时间来总结一些常用的东西,寄希望用这篇博文分享一些安全工程师在处理应急响应时常见的套路,因为方面众多可能有些杂碎. 个人认为入侵响应的核心无外乎四个 ...
- 一个谷粉和3年的Google Reader重度使用者的碎碎念
2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...
- Jerry的碎碎念:SAPUI5, Angular, React和Vue
去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5还是Vue这个话题. 我们代表SAP, 向客户推荐使用UI5是基于以下六点 ...
- 结对编程ending-我和洧洧的碎碎念
应该是第一次和队友分工合作去完成一个项目,其中也经历了跳进不少坑又被拉回来的过程,总体来说这对于我俩也的确是值得纪念的一次经历. 我的碎碎念时间…… 对比个人项目和结对编程项目二者需求,前者重在面对不 ...
- C语言 · 分分钟的碎碎念
算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用 ...
- 最近关于Qt学习的一点碎碎念
最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...
- Java实现 蓝桥杯VIP 算法提高 分分钟的碎碎念
算法提高 分分钟的碎碎念 时间限制:1.0s 内存限制:256.0MB 问题描述 以前有个孩子,他分分钟都在碎碎念.不过,他的念头之间是有因果关系的.他会在本子里记录每一个念头,并用箭头画出这个念头的 ...
- Device Tree(二):基本概念
转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...
随机推荐
- Linux不在显示器上方总是显示企鹅
/********************************************************************************* * Linux不在显示器上方总是显 ...
- Linux命令学习之路——文档权限管理:chmod
使用权限:所有角色 使用方式:chmod [ -cfvR ] [ --help ] [ --version ] mode file... 作用:该命令用于在Linux中管理和变更角色对文档的存取权限 ...
- PYTHON 定时器简单封装,基于SCHED
python fresher,轻拍. 在写后台服务时经常会遇到很多定时器的场景,threading.Timer类每实例化一个定时器会有一个新线程去执行,在客户端使用倒是没有问题,如果是服务器端定时器数 ...
- HDU 1069:Monkey and Banana(DP)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- java中实现Comparable接口实现自定义排序
class Student implements Comparable{ String name; int gpa; @Override public int compareTo(Object arg ...
- Apache Kafka 源码剖析
Getting Start 下载 http://kafka.apache.org/ 优点和应用场景 Kafka消息驱动,符合发布-订阅模式,优点和应用范围都共通 发布-订阅模式优点 解耦合 : 两个应 ...
- hdu4614 Vases and Flowers 线段树
Alice is so popular that she can receive many flowers everyday. She has N vases numbered from 0 to N ...
- Java中final的用法总结
1. 修饰基础数据成员的final 这是final的主要用途,其含义相当于C/C++的const,即该成员被修饰为常量,意味着不可修改.如java.lang.Math类中的PI和E是f ...
- Go Example--通道非阻塞
package main import ( "fmt" ) func main() { messages := make(chan string) signals := make( ...
- day 06云计算的三种服务模式:IaaS,PaaS和SaaS
云计算的三种服务模式:IaaS,PaaS和SaaS ”云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道. “云”其实是互联 ...