• 21天学习挑战赛(1)设备树的由来



    活动地址:CSDN21天学习挑战赛

    以前也接触过 Linux 的内核,主要就是编写一些小的驱动,调试一些模块,但没有真正地去研究过内核底层,因为底层已经由芯片厂商整理好,无需我去调试。现在趁着这个 21 天学习挑战赛,我打算认真学习一下 Linux 内核的一些基本知识,说不定以后能用上。

    学习计划

    1,学习目标

    • 内核设备树学习:掌握内核硬件 HW 配置
    • 内核调试技巧学习:掌握内核的调试手段
    • 内核驱动子系统学习:掌握 I2C、SPI 等总线子系统驱动

    2,学习内容

    8 月 1 日 至 8 月 7 日:

    • 设备树的由来
    • 图解设备树的使用
    • 设备树二进制文件(DTB)解析
    • 设备树 dtb 信息转化为 device_node 结构
    • DTS 架构下 Device 与 Driver 匹配流程
    • 内核对设备树的处理
    • 设备树的解析 of 函数介绍
    • DTB 的基本调试方法
    • 内核启动阶段获得 dtb 位置指针过程介绍

    8 月 8 日 至 8 月 14 日:

    • 如何使用 dynamic debug 动态打印调试
    • 如何使用 dump_stack 分析函数调用关系
    • 休眠唤醒 standby 调试指南
    • 如何创建一个 proc 节点提供上层 app 调试使用
    • devmem 直接读写寄存器进行调试
    • Linux Kernel Printk
    • 利用 debugfs 调试

    8 月 15 日 至 8 月 21 日

    • GPIO 子系统
    • Pinctrl 子系统详解
    • SPI 子系统
    • I2C 子系统
    • UART 子系统
    • Input 子系统

    4,学习产出

    每天一篇打卡笔记

    学习日记

    1,学习知识点

    设备树的由来

    Linux 之父 Linus 认为 内核中 arch 目录下 ARM 的代码太多,每次 merge ARM 平台的代码变化占到了整个 ARCH 目录的 60%,讨论后,确定的问题如下:

    • ARM Linux 缺少 platform 之间的协调(各个 SOC 之间的统一),导致 ARM Linux 的代码有重复。
    • ARM Linux 中大量的 board specific 的源代码应该被提出 Kernel,否则这些垃圾代码和 table 会影响 Linux Kernel 的长期目标。
    • 各个 sub architecture 的维护者直接提交接给 Linux 并入主线的机制缺乏层次。

    解决办法:

    • ARM 的核心代码依然保存在 arch/arm 目录下
    • ARM SOC core architecture code 保存在 arch/arm 目录下
    • ARM SOC 的周边外设模块的驱动保存在 driver 目录下
    • ARM SOC 的特定代码在 arch/arm/mach-xxx 目录下
    • ARM SOC board specific 的代码被移除,由 Device Tree 机制来负责传递硬件拓扑和硬件资源信息。

    在使用设备树之前,HW 配置信息都需要嵌入到内核中,现在改用设备树,只需要在 bootloader 运行时传递 DB 形式的文件,在系统启动阶段,bootloader 会加载内核并将控制权交给内核。设备树的信息应该包括:

    • 识别 platform 的信息
    • runtime 的配置参数
    • 设备的拓扑结构以及特性

    2,学习遇到的问题

    3,学习的收获

    知道了设备树的由来及为什么取消板级支持包

    4,实操

  • 相关阅读:
    Qt之多级折叠下拉导航菜单(采用QTreeWidget)
    Spring扩展接口(1):ApplicationContextInitializer
    【改进极限学习机】双向极限学习机(B-ELM)(Matlab代码实现)
    六、项目实战---识别猫和狗
    CentOS7日志文件及journalctl日志查看
    AI写作工具,智能ai写作工具
    游戏研发的解决方案有哪些?
    mindspore::dataset::GetAffineTransform的输出与cv2的输出不同
    一个Vue3数字框区间指令及其衍生的一个知识点
    linux——进程间通信——管道
  • 原文地址:https://blog.csdn.net/weixin_43772810/article/details/126116438