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,这个机制是用 ...
随机推荐
- Insert插入不同的列数量,统计信息对比
一.实验目的: Insert插入表中相同的行数量,不同的列数量,通过10046 和autotrace工具对比查看逻辑读.物理读.time数据,并得出相应结论 二.测试 2.1测试流程: =>[为 ...
- url中携带中文乱码问题
1.问题描述 在项目中碰见url中经常传递中文参数时,容易出现乱码问题,现在就这个问题产生原因和解决的措施大概分析一下,希望过路人和我能引以为戒. 2.问题分析 由于我们利用URL传递参数这种方式是依 ...
- 【BZOJ1492】【NOI2007】货币兑换
我果然不会斜率优化 原题: 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是 ...
- Gravitee.io alert 引擎架构
alert 在我们的实际开发中应用的场景很多,我们需要进行系统状态的查看,以及特殊异常请求的处理 参考架构图 从下图可以看出,还是很方便的,同时支持slack email... 的实时消息通知,而且我 ...
- Unity 5 Game Optimization (Chris Dickinson 著)
1. Detecting Performance Issues 2. Scripting Strategies 3. The Benefits of Batching 4. Kickstart You ...
- Nginx可以做什么?看完这篇你就懂了
本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流. Nginx能做什么 —— ...
- 深入详解美团点评CAT跨语言服务监控(二) CAT服务端初始化
Cat模块 Cat-client : cat客户端,编译后生成 cat-client-2.0.0.jar ,用户可以通过它来向cat-home上报统一格式的日志信息,可以集成到 mybatis.spr ...
- openstack--5--控制节点和计算节点安装配置nova
Nova相关介绍 目前的Nova主要由API,Compute,Conductor,Scheduler组成 Compute:用来交互并管理虚拟机的生命周期: Scheduler:从可用池中根据各种策略选 ...
- Revit api 创建楼梯图元
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- lua C++ wrapper
背景 最近在研究lua的c++绑定库,使用过一下几个 luabind 问题:没人维护 https://github.com/vinniefalco/LuaBridge https://github.c ...