设备树(Device Tree)

news2024/11/17 11:29:27

设备树介绍:

设备树是一个描述设备硬件资源的文件,该文件是由节点组成的树形结构。如下:

/ {

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"); /* 模块描述信息 */

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70633.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux磁盘管理

Linux磁盘管理实验目的及要求1.熟悉Linux下磁盘的基本管理方法。2.了解Linux磁盘配额管理的意义和基本方法。3.掌握mount、fdisk、df等常用的磁盘管理命令。实验原理实验步骤1.使用不同的方法挂载/卸载磁盘并查看相关信息&#xff0c;具体步骤如下&#xff1a;1.挂载一个光驱或…

简述人工神经网络的定义,简述神经网络算法

1、人工智能十大算法 人工智能十大算法如下 线性回归&#xff08;Linear Regression&#xff09;可能是最流行的机器学习算法。线性回归就是要找一条直线&#xff0c;并且让这条直线尽可能地拟合散点图中的数据点。它试图通过将直线方程与该数据拟合来表示自变量&#xff08;x…

mapbox一学就会系列:01 第一个地图页面

文章目录前言一、mapbox是什么&#xff1f;官网官网示例效果尝鲜二、使用步骤1.引入mapbox-gl.js库在线库npm 形式安装2.使用方法无账号则申请&#xff0c;有账号则登录申请完成后&#xff0c;获取token创建一个地图元素容器使用token并配置创建一个地图示例效果总结前言 最近…

PMP项目管理证书有用么?什么人可以考呢?

有用&#xff0c;非常有用&#xff0c;PMP如今的价值在于越来越多的招聘和公司都需要PMP证书&#xff0c;有需求就有价值。&#xff08;资料文末&#xff09; 需求分两个方面来说&#xff0c;一个是个人&#xff0c;一个是组织。 个人的用处&#xff1a; 项目管理几乎不限行业…

fasterxml jaskson的使用

fasterxml jaskson 的使用为啥要撰写这玩儿&#xff1f;解析json格式字符串判断是否是json格式字符串解析原理与解析函数如何使用该函数&#xff1f;为啥要撰写这玩儿&#xff1f; 由于SpringBoot的依赖默认使用fasterxml-jaskson&#xff08;可能是由于不想使用其他json处理包…

[附源码]Python计算机毕业设计Django疫苗及注射管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

员工账号管理,超市便利店烟酒茶叶服装门店零售手机收银软件APP

https://www.bilibili.com/video/BV1v841157e4/?vd_sourcebe5b336e3cce67dfc9122f3eaf7119ad我们的门店零售手机收银A P P&#xff0c;不限制用户数&#xff0c;也就是有多少零售收银员工&#xff0c;都可以给他们分配账号&#xff0c;并下载A P P登录使用。, 视频播放量 1、弹…

计算两个颜色相似度

1.计算两个颜色相似度的公式如下: 颜色QColor1(R1, G1, B1)转成h1,s1,v1 颜色QColor2(R2, G2, B2)转成h2,s2,v2 detah=h1-h2 detas=s1-s2 detav=v1-v2 len = qsrt(detah * detah + detas * detas + detav * detav) if (len > 1) len = 1.0 similarity = (1.0 - le…

frp内网穿透(Mac远程连接公司windows)

文章目录1、需求&#xff1a;自己的电脑远程访问公司的windos电脑2、搭建内网穿透&#xff1a;准备工具3、安装运行3.1 服务端配置3.2 客户端配置4、远程连接1、需求&#xff1a;自己的电脑远程访问公司的windos电脑 自己电脑Mac连公司windows&#xff1a;通过Microsoft Remote…

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK10特性讲解】

JDK各个版本特性讲解-JDK10特性 lecture&#xff1a;波哥 一、JAVA10概述 2018年3月21日, Oracle官方宣布JAVA10正式发布 JAVA9和java10 都不是 LTS (Long-Term-Support)版本.和过去的JAVA大版本升级不同,这两个只有半年左右的开发和维护时间. 而JAVA11 也是就是18.9,才是JAVA之…

Cyanine5.5 Tyramide,Cy5.5 Tyramide,花青素Cy5.5 酪酰胺菁染料供应

试剂英文名称&#xff1a;Cyanine5.5 Tyramide&#xff0c;Cy5.5 Tyramide 试剂中文名称&#xff1a;花青素Cy5.5 酪酰胺 Item no&#xff1a;Y-R-3588 Formula&#xff1a;C48H52CIN3O2 MW&#xff1a;738.4 Purity&#xff1a;95% Storage&#xff1a;-20℃可长期保存&…

arthas在线监控和debug

文章目录一. arthas-tunnel-server1.1 制作镜像1.2 k8s部署arthas-tunnel-server1.3 docker-compose部署1.4 Redis缓存二. 源码本地启动2.1 启动后端2.2. 启动前端2.3 启动客户端官方文档 https://arthas.aliyun.com/doc/tunnel.html一. arthas-tunnel-server 1.1 制作镜像 D…

3年以上Android开发者,关于学习 Compose,我的经验总结和建议

缘起 又到一年快结束的日子了 这一年里经历了裁员&#xff0c;跳槽&#xff0c;跑路&#xff0c;也当过面试官面试一些同学。 经历过攻守的角色转换后&#xff0c;沉下心&#xff0c;回顾过往&#xff0c;不由得发出感叹&#xff0c;今年卷的不行。 无论是裁员还是跳槽&…

10 个你应该知道的强大的JavaScript代码片段

JavaScript 现在非常流行&#xff0c;尤其是在 Web 开发中。随着新的 ECMAScript 版本&#xff0c;JavaScript 语法有了很大的改进。因此&#xff0c;JavaScript语言现在具有许多强大且有趣的功能&#xff0c;我们可以作为开发人员在代码中使用它们。 另一件好事是&#xff0c…

跨域解决方法

1.JSONP 前端通过script标签的src属性将回调函数传给服务器&#xff0c;服务器拿到回调函数后&#xff0c;会将数据作为回调函数的参数并将该回调函数返回&#xff0c;前端这边拿到回调函数执行&#xff0c;就可以获取服务端的数据 非直接方式获取数据 并且只支持get&#xf…

PostgreSQL数据库存储结构

PostgreSQL数据库集簇是——多个数据库的集合。 初始化库集簇&#xff1a;INITDB –D $PGDATA来完成。&#xff08;相当于oracle数据库dbca建库&#xff09; pg_ctl -d $PGDATA可以启动数据库 对象标识符&#xff08;OID&#xff09;来对整个数据集簇中唯一的标识数据库对象&a…

一个支持 CRUD 快速开发的 Web 框架,用着太爽

RUD 可谓是程序员又爱又恨的操作了。 爱&#xff0c;大部分的业务基本上都是增删改查的变种&#xff0c;基于增删改查可以实现大部分的业务。 恨&#xff0c;是因为普通的增删改查页面开发占据了大量的时间&#xff0c;非常无聊&#xff0c;同时又不会有技术上的提升。 如何能…

week14|week15 查阅文章总结

带宽的概念 信道容量 参数估计 朴素贝叶斯 数学建模 关联规则 聚类 github http 奈氏准则和香农定理 计算机控制 带宽的概念:带宽的两种概念__Charles_Chen的博客-CSDN博客_带宽的两种含义 信道容量:

【计算机视觉】关键考点

计算机标定 计算机标定的流程&#xff1f; 1.求解内参矩阵和外参矩阵的积H 当一张图片上的标定板角点数量等于4时&#xff0c;即可求得该图片对应的矩阵H 。当一张图片上的标定板角点数量大于4时&#xff0c;利用最小二乘法回归最佳的矩阵H 。 最小二乘法:简单地说就是通过n…

浅谈JVM及原理

JVM一直是java知识里面进阶阶段的重要部分&#xff0c;如果希望在java领域研究的更深入&#xff0c;则JVM则是如论如何也避开不了的话题&#xff0c;本系列试图通过简洁易读的方式&#xff0c;讲解JVM必要的知识点。 运行流程 我们都知道java一直宣传的口号是&#xff1a;一次编…