Linux设备模型的核心是使用Bus、Class、Device、Driver四个核心数据结构,将大量的、不同功能的硬件设备(以及驱动该硬件设备的方法),以树状结构的形式,进行归纳、抽象,从而方便Kernel的统一管理。学习平台mt8768,内核版本kernel-4.9

阅读全文 »

    usb 是什么, usb 只是一种数据传输的方式, usb 的作用就是数据传输, 我们接受到了数据时候做什么, 是我们自己决定, 在usb 中则通过描述符来确定这些数据要来干什么, 设备描述符用于描述当前是什么 usb 设备, 以及这个设备支持什么样的功能, 这个支持的功能(串口, uvc等)则由 function 来描述. 设备的描述符以及功能等由 usb_composite_dev 进行统一的管理维护.

    configfs 则将这种管理进行动态化, 使得我们能够动态的去配置我们的 usb 为特定的 usb 设备. 当然我们也可以不用 configfs 自己去写死 usb 支持的功能, 甚至驱动不做处理仅仅导出 libusb 库, 应用程序自己实现 usb 设备支持的功能的各种描述符. 因为 usb 只是数据传输, 具体的功能实现可以是驱动也可以应用, 取决与开发的需求.本文将以 configfs以及串口设备为例分析 usbdevice 的驱动框架.

阅读全文 »

    configfs 是 Linux 内核中的一个虚拟文件系统(vfs),他和 sysfs 类似, 都是以目录文件的形式导出到用户空间和用户交互, 虚拟表示 configfs 中的"目录"只是一个用户界面的表现形式, 没有实际的物理存储空间分配, 目录结构只是内核对象的一种层次化展示方式. 每个"目录"实际上映射到一个 config_group, 目录操作被转换为对应的 config_group 操作, 比如 mkdir 实际上是调用 make_group 来创建新的内核配置项. 文件系统操作都被转换为对应的内核对象操作,通过这些回调接口来实现用户空间和内核空间的交互.

    由于 configfs 是 usb udc 驱动的前置部分, 因此虽然是文件系统的内容, 但是还是分类 usb 在驱动中. 在内核中 configfs 几乎只用于配置 usb.

阅读全文 »

    终端是计算机系统中重要的交互工具,从最初的机械式电传打字机到现代的虚拟终端,它承载了计算机发展的许多关键技术。本文将从终端的历史谈起,介绍其发展过程中的重要阶段,接着分析终端驱动的实现原理,最后通过代码实现一个简单的终端接口,帮助读者从理论到实践更好地理解终端的工作原理。希望这篇文章能为对终端技术感兴趣的读者提供一些启发和参考。

阅读全文 »

本文基于君正平台(SoC)和其集成的 DWC2(DesignWare® USB 2.0 Controller),对 USB 子系统的核心流程进行了详细分析。文章主要聚焦于以下几个方面:

  • USB 设备描述符和 urb 通讯
  • USB 设备驱动管理
  • USB 主机控制器(HCD)的注册流程;
  • USB 设备的识别流程;

希望本文能为从事相关开发或研究的读者提供有价值的参考

阅读全文 »

    drm 学习记录, 基础知识部分请参考何小龙的drm专题, 该系列博客非常详细的介绍了drm 的整个框架. 博主也是通过该系列文章入门, 只是有很多地方不是很理解, 于是参考内核源码进行一些补充. 文章内容引用会该专题部分内容.

阅读全文 »

本文记录了在 RK3566 平台上,U-Boot 中设备树的加载与使用过程,并对设备模型(Device Model, DM)的核心机制进行了分析。文章主要包括以下内容:

  • U-Boot 中设备树的加载
  • U-Boot DM 模型的创建机制及其核心实现
  • RK3566 平台上 DM 模型的具体构造流程
  • dm 模型数据结构
  • 常见的接口说明
阅读全文 »

    rk 关机充电的显示基于 minui 显示框架, 它具有简单的图形绘制, 以及解析 png 图片并将其简单的显示出来的能力. 它支持三种显示框架 fbdevdrmadf. 由于需要解析 png 图片因此也需要使用到 libpng 库.

阅读全文 »
0%