设备树(Device Tree)
设备树介绍:
设备树是一个描述设备硬件资源的文件,该文件是由节点组成的树形结构。如下:
/ {
node1 {
a-string-property = "A string";
a-string-list-property = "first string", "second string";
// hex is implied in byte arrays. no '0x' prefix is required
a-byte-data-property = [01 23 34 56];
child-node1 {
first-child-property;
second-child-property = <1>;
a-string-property = "Hello, world";
};
child-node2 {
};
};
node2 {
an-empty-property;
a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */
child-node1 {
};
};
};
① “/”是根节点,node1和node2,是其子节点;
② “child-node1” 和 “child-node2”,是node1的子节点;
③ a-string-property,是字符串属性;
④ a-string-list-property,字符串列表属性;
⑤ a-byte-data-property,是字节数据属性;
节点与属性:
节点的定义:
[label:][@unit-address] {
properties;
child-node {
[...]
};
};
常见属性:
compatible,用来匹配驱动,一般有"供应商,产品"
#address-cells,决定子节点reg属性的地址cell数,cell是u32
#size-cells,决定子节点reg属性的地址长度cell数,cell是u32
reg,一般为设备寄存器地址及范围,如
设备树实例:
添加LED节点:
$ vim arch/arm/boot/dts/exynos4412-fs4412.dts
fs4412-led {
compatible = "farsight,fs4412-led";
reg = <0x114001E0 0x8>;
};
$ cd ../../../..
$ make dtbs
$ cp arch/arm/boot/dts/exynos4412-fs4412.dtb /tftpboot
代码:
1 #include
2 #include
3 #include
4 #include
5 #include
6
7 #define GPF3CON 0x0
8 #define GPF3DAT 0x4
9
10
11 void __iomem *led_va;
12 int led_probe(struct platform_device *pdev)
13 {
14 unsigned int regval;
15 struct resource *res;
16
17 printk("led probe\n");
18 /* 1. 获取资源,中断或者内存 */
19 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
20 if (!res) {
21 printk("get platform resource failure\n");
22 return -EINVAL;
23 }
24
25 /* 2. 内存映射,并初始化设备 */
26 led_va = ioremap(res->start, resource_size(res)); /* 内存映射得到虚拟地址 */
27 regval = readl(led_va + GPF3CON); /* (led_va + GPF3CON) 寄存器的虚拟地址*/
28 regval &= ~(0xf<<20); /* GPFCON[23:20]清零 */
29 regval |= 0x1<<20; /* 配置GPF3_5引脚功能为输出 */
30 writel(regval, led_va + GPF3CON);
31 regval = readl(led_va + GPF3DAT);
32 regval |= 0x1<<5; /* 控制GPF3_5输出高电平 */
33 writel(regval, led_va + GPF3DAT);
34 return 0; /* 0表示成功,<0表示失败 */
35 }
36
37 int led_remove(struct platform_device *pdev)
38 {
39 unsigned int regval;
40 printk("led remove\n");
41 regval = readl(led_va + GPF3CON); /* (led_va + GPF3CON) 寄存器的虚拟地址*/
42 regval &= ~(0xf<<20); /* GPFCON[23:20]清零 */
43 writel(regval, led_va + GPF3CON);
44 iounmap(led_va);
45 return 0;
46 }
47
48 /* 用来匹配平台设备的列表 */
49 const struct of_device_id of_device_table[] = {
50 {.compatible = "farsight,fs4412-led"},
51 {}
52 };
53
54 struct platform_driver pdrv = {
55 .probe = led_probe,
56 .remove = led_remove,
57 .driver = {
58 .owner = THIS_MODULE,
59 .name = "fs4412-led",
60 .of_match_table = of_match_ptr(of_device_table),
61 },
62 };
63
64 static int hello_init(void)
65 {
66 printk("Hello, Kernel!\n");
67 return platform_driver_register(&pdrv);
68 }
69
70 static void hello_exit(void)
71 {
72 printk("Goodbye, Kernel!\n");
73 platform_driver_unregister(&pdrv);
74 }
75
76 module_init(hello_init); /* 声明模块加载函数 */
77 module_exit(hello_exit); /* 声明模块卸载函数 */
78
79 MODULE_LICENSE("GPL"); /* 声明模块遵守的开源协议 */
80 MODULE_AUTHOR("zhufeng "); /* 模块作者 */
81 MODULE_DESCRIPTION("hello module"); /* 模块描述信息 */
设备树(Device Tree)的更多相关文章
- 【转载】Linux设备树(Device Tree)机制
转:Linux设备树(Device Tree)机制 目录 1. 设备树(Device Tree)基本概念及作用2. 设备树的组成和使用 2.1. DTS和DTSI 2.2. DTC 2.3. DT ...
- ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源 Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pai ...
- 转:Linux设备树(Device Tree)机制
目录 1. 设备树(Device Tree)基本概念及作用 2. 设备树的组成和使用 2.1. DTS和DTSI 2.2. DTC 2.3. DTB 2.4. Bootloader 3. 设备树中d ...
- 我眼中的Linux设备树(一 概述)
一 概述设备树(Device tree)是一套用来描述硬件属相的规则.ARM Linux采用设备树机制源于2011年3月份Linux创始人Linus Torvalds发的一封邮件,在这封邮件中他提倡A ...
- Linux设备树(一 概述)
一 概述 设备树(Device tree)是一套用来描述硬件属相的规则.ARM Linux采用设备树机制源于2011年3月份Linux创始人Linus Torvalds发的一封邮件,在这封邮件中他提倡 ...
- linux 设备树【转】
转自:http://blog.csdn.net/chenqianleo/article/details/77779439 [-] linux 设备树 为什么要使用设备树Device Tree 设备树的 ...
- 翻译:A Tutorial on the Device Tree (Zynq) -- Part I
A Tutorial on the Device Tree (Zynq) -- Part I 此教程的目的 本教程是针对Xilinx' Zynq-7000 EPP设备(一个集成了FPGA的ARM Co ...
- linux设备树笔记__dts基本概念及语法【转】
转自:http://www.360doc.com/content/15/1113/11/15700426_512794532.shtml 设备树手册(Device Tree Usage)原文地址:ht ...
- ARM Linux 3.x的设备树(Device Tree)
http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1. ...
- 【转】 ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源 http://blog.csdn.net/21cnbao/article/details/8457546 Linus Torvalds在2011年3月1 ...
随机推荐
- oracle chr(38) 和 ascii('&') 函数
oracle chr(38) 和 ascii('&') 函数 select chr(38) from dual; select ascii('&') from dual;
- 洛谷P2731 骑马修栅栏 [欧拉回路]
题目传送门 骑马修栅栏 题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经 ...
- Java常用工具类之自定义访问对象
package com.wazn.learn.util; import javax.servlet.http.HttpServletRequest; /** * 自定义访问对象工具类 * * 获取对象 ...
- codevs 3160 最长公共子串 后缀自动机
http://codevs.cn/problem/3160/ 后缀自动机板子题,匹配的时候要注意如果到一个点失配向前匹配到一个点时,此时的tmp(当前匹配值)为t[j].len+1而不是t[t[j]. ...
- HNOI2017滚粗记
DAY0: 高三学长说了考前要么就完全颓废要么就完全学,所以我们就完全开启了颓废模式.上午教练带队去烈士公园游玩,中途机房歌神和QYS一直在谈论如何用LCT动态维护树的直径,ORZORZORZ.... ...
- Nginx出现504 Gateway Time-out的解决方案
使用Nginx作为WEB服务器时,经常会遇到504 Gateway Time-out的错误提示.经过研究,基本可以确定多数情况下这个错误与Nginx本身无关,问题的根源在于Nginx将PHP的解析提交 ...
- bzoj 4780: [Usaco2017 Open]Modern Art 2
4780: [Usaco2017 Open]Modern Art 2 Time Limit: 10 Sec Memory Limit: 128 MB Description Having becom ...
- 卡特兰数 codevs 1086 栈
1086 栈 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description ...
- URAL 1997 Those are not the droids you're looking for 二分图最大匹配
Those are not the droids you're looking for 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=1 ...
- VK Cup 2016 - Round 1 (Div. 2 Edition) B. Bear and Displayed Friends 树状数组
B. Bear and Displayed Friends 题目连接: http://www.codeforces.com/contest/658/problem/B Description Lima ...