设备树(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 ...
随机推荐
- Robot Framework自动化测试的应用
Robot Framework自动化测试的应用(一) 最近尝试用Robot Framework代替之前全部采用python实现测试case,开始对Robot Framework进行些了解学习. 1. ...
- LoadRunner函数–lr_vuser_status_message
http://wenku.baidu.com/link?url=KbKGldKUkam4VyH5Z2doesA0ovQpuwM9nX_SnVMtWjo6rJPxj9DqB51z_m1giMbVo5Db ...
- U3D 基础
千里之行,始于足下! 最先执行的方法是:1.(激活时的初始代码)Awake2.Start3.Update(FixUpdate,LateUpdate)4.渲染模块(OnGUI)5.再向后,就是卸载模块( ...
- 【ASP.NET MVC】Ajax提交表单
下面这段代码主要有几个特点: 1.Ajax提交表单 2.表单中有一个<input type="file"/> 3.当选择完图片后,利用AJAX提交表单,并在执行成功后返 ...
- thinkphp5.0模块设计
5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改). 目录结构 标准的应用和模块目录结构如下: ├─applica ...
- java中的静态绑定与动态绑定
http://blog.csdn.net/u012420654/article/details/51945853 http://blog.csdn.net/zhangjk1993/article/de ...
- React Native踩坑之启动android模拟器失败
报错 Could not install the app on the device, read the error above for details.Make sure you have an A ...
- 洛谷——P1894 [USACO4.2]完美的牛栏The Perfect Stall
P1894 [USACO4.2]完美的牛栏The Perfect Stall 题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星 ...
- 洛谷——P2393 yyy loves Maths II
P2393 yyy loves Maths II 题目背景 上次蒟蒻redbag可把yyy气坏了,yyy说他只是小学生,蒟蒻redbag这次不坑他了. 题目描述 redbag给了yyy很多个数,要yy ...
- 【BZOJ 2119】 2119: 股市的预测 (后缀数组+分块+RMQ)
2119: 股市的预测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 404 Solved: 188 Description 墨墨的妈妈热爱炒股,她 ...