整理了一份Linux设备树基础知识 建议收藏!-linux内核设备树
整理了一份Linux设备树基础知识,建议收藏!
2022-09-09 16:04:58系统 Linux 本篇笔记我们就来简单地学习一下设备树的一些知识。在platform_device部分有简单说明描述设备有两种方法:一种是使用platform_device结构体来指定;另一种是使用设备树来描述。
本篇笔记我们就来简单地学习一下设备树的一些知识。
什么是设备树
设备树简单理解就是描述设备信息(资源)的一棵树。设备树(Device Tree)用代码体现如下:
这些代码被保存在.dts/dtsi后缀文件中,也即设备树源文件 DTS(DeviceTree Source)。
这些源文件同我们的C代码一样,并不能直接使用的,而是得经过一个编译过程生成机器可运行的二进制文件,如:
dts文件使用dtc工具编译生成dtb文件,这个dtb文件就是内核可以使用的文件。例如我们的板子跑起来之后,我们系统使用的设备树文件就存在目录/boot下:
Linux为什么会引入设备树?
在上一个实验:【Linux笔记】LED驱动实验(总线设备驱动模型)中我们使用了platform_device结构体来描述led设备(硬件资源)。既然已经有了描述设备的方法了,为什么还要引入设备树呢?
因为Linux内核中有很多BSP(板级支持包),不同的BSP会包含着不同的描述设备的代码(.c或.h文件)。
随着芯片的发展,Linux内核中就包含着越来越多这些描述设备的代码,导致Linux内核代码会很臃肿。
这导致Linux之父Linus 大发雷霆:"this whole ARM thing is a f*cking pain in the ass"。
因此引入了设备树文件,从而可精简一些臃肿的C代码。除此之外,.dts编译生成.dtb文件的过程要比.c编译生成驱动模块、加载驱动模块的过程要简单很多,也更方便我们进行开发。
设备树的语法
设备树源文件也是需要根据一定规则来编写的,同C语言一样,也要遵循一些语法规则。下面简单看一下设备树的源码结构及语法。
先看一个设备树示例:
1、节点格式
label: node-name@unit-address
其中:
label:标号node-name:节点名字unit-address:单元地址label 是标号,可以省略。label 的作用是为了方便地引用 node。比如:
可以使用下面 2 种方法来修改 uart@fe001000 这个 node:
2、属性格式
简单地说, properties 就是“name=value”, value 有多种取值方式。示例:
一个32位的数据,用尖括号包围起来,如:interrupts = <17 0xc>;一个64位数据(使用2个32位数据表示),用尖括号包围起来,如:clock-frequency = <0x00000001 0x00000000>;有结束符的字符串,用双引号包围起来,如:compatible = "simple-bus";字节序列,用中括号包围起来,如:local-mac-address = [00 00 12 34 56 78]; // 每个byte使用2个16进制数来表示local-mac-address = [000012345678];// 每个byte使用2个16进制数来表示可以是各种值的组合,用逗号隔开,如:compatible = "ns16550", "ns8250";example = <0xf00f0000 19>, "a strange property format";3、一些标准属性
(1) compatible 属性:
“compatible”表示“兼容”,对于某个LED,内核中可能有A、B、C三个驱动都支持它,那可以这样写:led {compatible = “A”, “B”, “C”;};内核启动时,就会为这个LED按这样的优先顺序为它找到驱动程序:A、B、C。
(2)model 属性
model属性与compatible属性有些类似,但是有差别。compatible属性是一个字符串列表,表示可以你的硬件兼容A、B、C等驱动;model用来准确地定义这个硬件是什么。
比如根节点中可以这样写:
/ {compatible = "samsung,smdk2440", "samsung,mini2440";model = "jz2440_v3";};它表示这个单板,可以兼容内核中的“smdk2440”,也兼容“mini2440”。
从compatible属性中可以知道它兼容哪些板,但是它到底是什么板?用model属性来明确。
(3)status 属性
status 属性看名字就知道是和设备状态有关的, status 属性值也是字符串,字符串是设备的状态信息,可选的状态如下所示:
(4)#address-cells 和#size-cells 属性
格式:
address-cells:address要用多少个32位数来表示;
size-cells:size要用多少个32位数来表示。
比如一段内存,怎么描述它的起始地址和大小?
下例中,address-cells为1,所以reg中用1个数来表示地址,即用0x80000000来表示地址;size-cells为1,所以reg中用1个数来表示大小,即用0x20000000表示大小:
/ {# address-cells = <1>;# size-cells = <1>;memory { reg = <0x80000000 0x20000000>;};};(5)reg 属性
reg属性的值,是一系列的“address size”,用多少个32位的数来表示address和size,由其父节点的# address-cells、#size-cells决定。示例:
/dts-v1/;/ {# address-cells = <1>;# size-cells = <1>;memory { reg = <0x80000000 0x20000000>;};};(7)name 属性
过时了,建议不用。它的值是字符串,用来表示节点的名字。在跟platform_driver匹配时,优先级最低。compatible属性在匹配过程中,优先级最高。
(8)device_type 属性
过时了,建议不用。它的值是字符串,用来表示节点的类型。在跟platform_driver匹配时,优先级为中。compatible属性在匹配过程中,优先级最高。
4、常用的节点
(1)根节点
用 / 标识根节点,如:
/dts-v1/;/ {model = "SMDK24440";compatible = "samsung,smdk2440";# address-cells = <1>;# size-cells = <1>;};(2)CPU节点
一般不需要我们设置,在 dtsi 文件中都定义好了,如:
cpus {# address-cells = <1>;# size-cells = <0>;cpu0: cpu@0 { .......}};(3)memory 节点
芯片厂家不可能事先确定你的板子使用多大的内存,所以 memory 节点需要板厂设置,比如:
memory {reg = <0x80000000 0x20000000>;};(4)chosen 节点
我们可以通过设备树文件给内核传入一些参数,这要在chosen节点中设置bootargs属性:
chosen {bootargs = "noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200";};操作设备树的函数
Linux 内核给我们提供了一系列的函数来获取设备树中的节点或者属性信息,这一系列的函数都有一个统一的前缀“of_”(“open firmware”即开放固件。),所以在很多资料里面也被叫做 OF 函数。
1、节点相关操作函数
Linux 内核使用 device_node 结构体来描述一个节点,此结构体定义在文件 include/linux/of.h 中,定义如下:
与查找节点有关的 OF 函数有 5 个:
(1) of_find_node_by_name 函数
of_find_node_by_name 函数通过节点名字查找指定的节点,函数原型如下:
struct device_node *of_find_node_by_name(struct device_node *from,const char *name);(2) of_find_node_by_type 函数
of_find_node_by_type 函数通过 device_type 属性查找指定的节点,函数原型如下:
struct device_node *of_find_node_by_type(struct device_node *from, const char *type);(3) of_find_compatible_node 函数
of_find_compatible_node 函数根据 device_type 和 compatible 这两个属性查找指定的节点,函数原型如下:
struct device_node *of_find_compatible_node(struct device_node *from,const char *type,const char *compatible);(4)of_find_matching_node_and_match 函数
of_find_matching_node_and_match 函数通过 of_device_id 匹配表来查找指定的节点,函数原型如下:
struct device_node *of_find_matching_node_and_match(struct device_node *from,const struct of_device_id *matches,const struct of_device_id **match);(5)of_find_node_by_path 函数
of_find_node_by_path 函数通过路径来查找指定的节点,函数原型如下:
inline struct device_node *of_find_node_by_path(const char *path);2、提取属性值的 OF 函数
Linux 内核中使用结构体 property 表示属性,此结构体同样定义在文件 include/linux/of.h 中,内容如下:
Linux 内核也提供了提取属性值的 OF 函数 :
(1) of_find_property 函数
of_find_property 函数用于查找指定的属性,函数原型如下:
property *of_find_property(const struct device_node *np,const char *name,int *lenp);(2)of_property_count_elems_of_size 函数
of_property_count_elems_of_size 函数用于获取属性中元素的数量,比如 reg 属性值是一个数组,那么使用此函数可以获取到这个数组的大小,此函数原型如下:
int of_property_count_elems_of_size(const struct device_node *np,const char *propname,int elem_size);(3)读取 u8、 u16、 u32 和 u64 类型的数组数据
(4)读取 u8、 u16、 u32 和 u64 类型属性值
(5)of_property_read_string 函数
of_property_read_string 函数用于读取属性中字符串值,函数原型如下:
int of_property_read_string(struct device_node *np,const char *propname,const char **out_string)本文系网络素材,版权归原作者所有,如有侵权,请联系删除。
责任编辑:庞桂玉 来源:良许Linux Linux设备树推荐系统
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载
语言:中文版系统大小:3.91GB系统类型:Win7欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统
相关文章
- Win10 引入双因素身份认证系统 将消除在线安全方面的2大疑难杂
- 打开笔记本win7蓝牙技巧的具体办法
- Win10打开应用商店提示“重试该设置”怎样办?
- Win7软件可以兼容Win10吗?Win10系统兼容Win7软件的设置方法
- win8系统好用吗
- Win8.1系统升级Win10出现出错0xc770010c的处理办法
- 安装win10系统哪家强?免费360送正版最强
- WinXP声卡驱动怎样安装?安装声卡驱动的办法
- 联想官方win7镜像最新系统推荐
- XP系统下ape格式怎样转换成mp3格式?
- nh格式,本文教您nh格式文件怎样打开
- 流星蝴蝶剑注册表下载
- 教大家电脑硬盘格式化如何操作
- windows7系统画图工具怎win7画图工具在哪里么打开?
- win7硬盘拒绝访问
- lol一直崩溃,教您处理lol一直崩溃的办法!
- Win10怎么更换账户登陆?
- 示例win8恢复经典开始菜单
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1Win10 LTSC 2021正式版下载_Windows10 LTSC 2021 Build 19044.1415下载
- 2雨林木风Ghost Win10 多驱动专业版X64位 v2023.01免费最新下载
- 3电脑公司Win7系统特别版下载_电脑公司Win7 Sp1 32位快速装机版永久激活下载
- 4深度技术 win10 64位 优化直装版 v2023.10免费最新下载
- 5Win7官方旗舰版下载_Win7 64位旗舰版系统镜像下载
- 6萝卜家园 GHOST WIN10 X86 快速装机专业版 V2019.03 (32位) 下载
- 7深度技术Ghost Win10 最新纯净版X64 v2023.02免费最新版下载
- 8Windows11预览版下载_微软Windows11 Build22000.51预览版免费下载V2021
- 9Win10专业精简版下载_最新Win10 22H2专业精简版下载
- 10GHOST WIN8 64位 专业装机版下载_GHOST WIN8 X64 正式版V2023.12