Linux内核编程:设备树

设备树(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版本)已上传网盘,已购课学员请及时下载观看学习。

课程的详细目录如下:

  1. 为什么要引入 device tree?
  2. 如何编译和运行 device tree?
  3. 使用设备树接口编写platform驱动
  4. SoC芯片架构:总线和片选
  5. SoC芯片架构:桥接(bridge)
  6. SoC芯片架构:extend bus
  7. device tree 基本语法:node
  8. device tree 基本语法:property
  9. 设备树实例分析:CPU node
  10. 设备树实例分析:memory node
  11. 设备树实例分析:外设(PrimeCell)
  12. 设备树实例分析:中断控制器
  13. 设备树实例分析:中断映射
  14. 设备树实例分析:时钟(clock)
  15. extend bus(上):I2C 设备
  16. extend bus(下):内存映射设备
  17. 设备树实例分析:GPIO
  18. 设备树实例分析:pinmux(上)
  19. 设备树实例分析:pinmux(下)
  20. dts 和 dtsi 文件的分离
  21. property 的 overwrite
  22. dtb 二进制文件格式
  23. platform device 自动展开分析(上)
  24. platform device 自动展开分析(下)
  25. I2C 设备的自动展开
  26. 哪些 node 会自动展开为平台设备?
  27. 设备树节点解析:CPU node
  28. 设备树节点解析:memory node
  29. 设备树节点解析:chosen node(上)
  30. 设备树节点解析:chosen node(下)
  31. 设备树节点解析:aliases node
  32. 设备树节点解析:获取 IRQ number
  33. 设备树节点解析:获取 Register 地址
  34. 设备树节点解析:GPIO
  35. Device Binding and Guidelines

视频试看,B站搜:宅学部落
视频淘宝地址:Linux内核编程:驱动开发核心理论

一线原厂驱动开发经验,专门为嵌入式精心打造的嵌入式进阶视频教程,详情请点击:王利涛老师个人店