设备树(device tree)机制是Linux内核从linux-3.x版本开始引进的一种机制,目的是解决内核源码的arch/arm目录下代码混乱的问题:随着ARM生态的快速发展,在内核源码的arch/arm目录下,存放着几十种arm芯片和几百个开发板相关的源文件,很多开发板和处理器的中断、寄存器等相关硬件资源都在这个目录下以.c或.h的文件格式定义。而对于内核来说,与这些硬件耦合,会导致内核代码混乱不堪,每个开发板上运行的内核镜像都必须单独编译配置,无法通用。什么时候Linux内核能像Windows镜像那样,无论你的电脑什么配置,一个Windows安装包,都可以直接下载安装运行呢?
设备树机制,实现了Linux内核和硬件平台的解耦:每个硬件平台的硬件资源使用一个设备树文件(xxx.dts)来描述,而不是在arch/arm下以.c 或 .h 文件来定义。Linux内核是一个通用的内核,在启动过程中,在通过解析设备树中的硬件资源来初始化某个具体的平台。
引入设备树后,很多和内核驱动开发的工作也发生了变化:以往驱动工程师关注的头文件宏定义、寄存器定义,现在这些基本上不用关注,关注的重点则转向了如何根据硬件平台去配置和修改设备树文件。很多驱动的编程接口也发生了变化,开始慢慢使用device tree提供的编程接口去开发驱动。
本期课程主要面向嵌入式开发人员,分享Linux下驱动开发所需要的设备树知识和技能,学完本期课程,预期收获如下:
- 彻底看懂Linux设备树文件
- 能熟练修改和配置设备树文件
- 掌握基于设备树的platform driver驱动编写方法
- 掌握gpio和pinctrl的配置
- 学习SoC芯片架构、总线机制
- 对设备树运行机制有系统理解
- 熟练掌握设备树的编程接口(驱动开发中常用)
本期课程一共35个课时,课程总时长:08小时39分15秒,和本次课程相关的PPT文档、代码、流程图(PDF版本)已上传网盘,已购课学员请及时下载观看学习。
课程的详细目录如下:
- 为什么要引入 device tree?
- 如何编译和运行 device tree?
- 使用设备树接口编写platform驱动
- SoC芯片架构:总线和片选
- SoC芯片架构:桥接(bridge)
- SoC芯片架构:extend bus
- device tree 基本语法:node
- device tree 基本语法:property
- 设备树实例分析:CPU node
- 设备树实例分析:memory node
- 设备树实例分析:外设(PrimeCell)
- 设备树实例分析:中断控制器
- 设备树实例分析:中断映射
- 设备树实例分析:时钟(clock)
- extend bus(上):I2C 设备
- extend bus(下):内存映射设备
- 设备树实例分析:GPIO
- 设备树实例分析:pinmux(上)
- 设备树实例分析:pinmux(下)
- dts 和 dtsi 文件的分离
- property 的 overwrite
- dtb 二进制文件格式
- platform device 自动展开分析(上)
- platform device 自动展开分析(下)
- I2C 设备的自动展开
- 哪些 node 会自动展开为平台设备?
- 设备树节点解析:CPU node
- 设备树节点解析:memory node
- 设备树节点解析:chosen node(上)
- 设备树节点解析:chosen node(下)
- 设备树节点解析:aliases node
- 设备树节点解析:获取 IRQ number
- 设备树节点解析:获取 Register 地址
- 设备树节点解析:GPIO
- Device Binding and Guidelines
本期课程已发布到CSDN学院:https://download.csdn.net/course/detail/37149https://download.csdn.net/course/detail/37149