LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

linux设备驱动开发详解–基于linux4.0内核设备树是一种描述硬件的数据结构

2022年11月22日 423点热度

设备树描述

内容来自《linux设备驱动开发详解–基于linux 4.0内核》

设备树是一种描述硬件的数据结构,它起源于OpenFirmware(OF)

在linux 2.6中,ARM架构的板极硬件细节过多的被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用设备树后,许多硬件的细节可以直接通过它传递给linux,而不再需要在内核中进行大量的冗余编码

1.DTS

设备树由一系列被命名的节点(node)和属性(Property)组成,而节点本身可包含子节点。所谓属性,其实就是成对出现的名称和值。在设备树中,可描述的信息包括(原先这些信息大多被硬编码在内核中):

1.cpu的数量和类别

2.内存基地址和大小

3.总线和桥

4.外设连接

5.中断控制器和中断使用的情况

6.gpio控制器和gpio使用情况

7.时钟控制器和时钟使用情况

它基本上就是画一颗电路板上cpu、总线、设备组成的树,bootloader会将这棵树传递给内核,然后内核可以识别这棵树,并根据它展开出linux内核中的platform_device、i2c_client、spi_device等设备,而这些设备用到的内存、irq等资源,也被传递给了内核,内核会将这些资源绑定给展开的相应的设备

2.DTC(Device Tree Compiler)

DTC是将.dts编译成.dtb的工具,DTC的源代码位于内核的scripts/dtc目录中,在linux内核使能了设备树的情况下,编译内核的时候主机工具DTC会被编译出来,对应于scripts/dtc/Makefile中"hostprogs-y := dtc" 这一hostprogs的编译目标。

当然,DTC也可以在ubuntu中单独安装,命令如下:

sudo apt-get install device-tree-compiler

在linux内核的arch/arm/boot/dts/Makefile中linux 虚拟主机,描述了当某种SoC被选中后linux服务器搭建,哪些.dtb文件会被编译出来,如与VEXPRESS对应的.dtb包括:

dtb-$(CONFIG_ARCH_VEXPRESS) +=

vexpress-v2p-ca5s.dtb

vexpress-v2p-ca9.dtb

vexpress-v2p-ca15-tc1.dtb

vexpress-v2p-ca15_a7.dtb

在linux下,我们可以单独编译设备树文件。当我们在linux内核下运行make dtbs时,若我们之前选择了ARCH_VEXPRESS,上述.dtb都会由对应的.dts编译出来,因为arch/arm/Makefile 中含有一个.dtbs编译目标的项目

DTC除了可以编译.dts文件以外,其实也可以“反汇编” .dtb文件为.dts文件,其指令格式为:

./scripts/dtc/dtc -I dtb -O dts -o xxx.dts arch/arm/boot/dts/xxx.dtb

3.DTB(Device Tree Blob)

linux 内核也支持一种变通的模式,可以不把.dtb 文件单独存放,而是直接和zImage绑定在一起做成一个镜像文件,类似cat zImage xxx.dtb > zImage_with_dtb 的效果。当然内核编译的时候要使能CONFIG_ARM_APPENDED_DTB这个选项linux设备驱动开发详解(第2版),以支持“Usb appended device tree blob to zImage”

4.绑定(Binding)

对于设备树中的节点和属性具体是如何来描述设备的硬件细节的linux设备驱动开发详解(第2版),一般需要文档来进行讲解,文档的后缀名为 .txt,在这个.txt文件中,需要描述对应节点的兼容性、必需的属性和可选的属性

这些文档位于内核的Documentation/devicetree/bindings目录下,其下又分为很多子目录。

譬如,Documentation/devicetree/bindings/i2c/i2c-xiic.txt描述了Xilinx的I2C控制器其内容如下:

Xilinx IIC controller:

Required properties:

Optional properties:

Example:

axi_iic_0: i2c@40800000 {
    compatible = "xlnx,xps-iic-2.00.a";
    clocks = ;
    interrupts = ;
    reg = ;
    #size-cells = ;
    #address-cells = ;

};

基本可以看出,设备树绑定文档的主要内容包括:

关于该模块最基本的描述

必需属性(Required Properties)的描述

可选属性(Optional Properties)的描述

一个实例

linux内核下的scripts/checkpatch.pl会运行一个检查,如果有人在设备树中新添加了compatible字符串,而没有添加相应的文档进行解释,checkpatch程序会爆出警告:

UNDOCUMENTED_DT_STRINGDT compatible string xxx appears un-documented,因此程序员要养成及时写DT Bingding文档的习惯

内容来自《linux设备驱动开发详解–基于linux 4.0内核》

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: dts linux系统 linux编译 编译程序
最后更新:2022年11月22日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
(Linux基础知识)Linux察看版本信息的信息三 从容迎接Windows时代:Ubuntu安装Win7虚拟机教程 教下大伙儿红旗linux系统镜像系统安装实例教程流程汇总 轻松压缩文件,linux命令必备! 红旗Linux推出新版本:界面设计媲美Windows Linux部署项目:构建高效稳定的运行环境 掌握Linux下载文件命令技巧,轻松高效获取所需资料 Linux系统查看系统运行状态的top命令的功能 轻松解决Linux内存溢出问题:9个实用方法 Linux常用的命令大全-系统管理进程与作业管理命令解释大全 linux内核api 深入探索Linux内核API,你真的了解吗? 教你在XShell软件中使用sz和rz命令下载和上传文件 RedHatEnterprise命令删除空文件夹命令教程操作环境介绍 轻松掌握Linux目录权限777提升技巧 LinuxTCP协议栈的内部机制和优化技术介绍 手动删除400多万个小文件,rm-删除执行不动 mysql执行sql脚本文件的方法:SQLServerjava能写游戏吗 解密Unix时间戳转换技巧,轻松读懂日期奥秘 在Linux中轻松删除单个文件、文件组或整个文件夹 掌握Linux编译C语言的命令,轻松使用编译器
Linux文件路径查询方法,轻松获取文件位置Linux移植6410:从零开始的挑战!linux php安装 快速掌握Linux下PHP安装,轻松入门流行技术linux patch 文件 解决LinuxPatch文件10大疑难杂症,轻松应对!Ubuntu系统更改IP地址的简易教程,跟随以下步骤即可搞定!高效搭建Linux Android开发环境,轻松提升开发体验轻松掌握:如何查询Linux内核版本?Linux安装Matlab指南,快速掌握安装步骤Ubuntu 16安装网卡驱动教程,轻松解决网络连接问题Linux启动时,不使用图形界面可能更有效率!移植Linux,手机变身“大杀器”!详解8大关键操作Linux更高效,掌握启动终端快捷键!纯Python库实现上面介绍的HTML转换为PDF的软件Fedora 13服务器配置指南:9个实用技巧全解析9种方法轻松获取Linux版本,快速掌握系统信息!博客韦东山freeRTOS系列教程:入门文档教程+进阶视频教程轻松掌握linux ldd命令的技巧,成为高效开发者与管理员Linux VPS安全检测,保障服务器稳定运行!Linux下高效开发必备:配置Tomcat和JDK分析Linux中的I2C驱动程序框架核心结构(i2c-bus结构)
samba主机名称解析服务//samba/smb.conf 知一能量linux查看系统信息命令是linux初学者必备的基础知识 PHP中计算两个日期之间相隔的长度最简单的方法 Linux内核启动注册中断内核中断源如何实现多个定时器 udpsocket编程1.UDP编程框架常用函数小插曲 Linux基础命令推荐书籍:《Linux就该这么学》 如何显示英语总是默认支持的是中文? 【1024】后端技术学习路线思维导图,看这一篇就够了! 计算机操作系统全新版装系统盘点、理念与系统的优缺点 【好玩的网络-第2.5期】分配IP有哪些骚操作?小白保姆级教程 remminaRemmina安装rdesktop 11种笔测试工具检测漏洞并准确模拟网络攻击ProPro Linux系统的启动过程,来说一说启动顺序详解 Linux5.12的推送请求不断涌入新开放的合并窗口预计4月底看到它的稳定版本 【每日一题】Linux链接文件- Linux移植6410:从零开始的挑战! 红旗Linux桌面版4.0从软盘启动硬盘最详细的安装图解 移动OS三分天下的是PalmPDA?PDA论坛 查看动态库版本查找gcc生成的最新动态库方法 Linux基础入门(VMWare中CentOS7配置yum)目录之间的加载顺序
标签聚合
命令模式 软件 linux服务器 虚拟机 电脑 sudo 文件目录 命令 linux脚本 linux系统
书籍
课程
技术群
技术干货大合集↓
  • 2023年3月 / 89篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.