自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

iriczhao的博客

天空是一本书,让人百读不厌

  • 博客(226)
  • 收藏
  • 关注

原创 【u-boot】u-boot驱动模型-struct uclass_driver

本文分析了U-Boot(v2017.11)中的uclass驱动框架。介绍了uclass_driver结构体的定义,包括其核心回调函数(post_bind、pre_probe等)和配置字段(priv_auto_alloc_size、per_device_auto_alloc_size等)。文章详细描述了回调函数的调用链,并解读了ops字段和id字段的作用。uclass机制为相似设备驱动提供统一接口,支持自动内存分配,是U-Boot设备模型的重要组成部分。

2025-10-24 21:26:08 696

原创 【u-boot】u-boot的I2C驱动框架剖析

本文分析了u-boot v2019.04中的I2C驱动框架实现。首先介绍了关键数据结构:dm_i2c_ops定义驱动操作接口,dm_i2c_chip描述I2C设备信息,i2c_msg表示单条传输消息。其次总结了核心API接口,包括dm_i2c_read/write()进行数据传输,dm_i2c_probe()检测设备存在,以及dm_i2c_reg_read/write()操作寄存器等。这些接口为I2C设备驱动提供了统一访问框架,支持7/10位地址模式,并可通过标准方法设置总线速率。该框架实现了I2C总线的抽

2025-10-30 21:32:34 556

原创 【u-boot】u-boot的reset驱动通用框架

本文分析了u-boot v2019.10中的复位框架实现。复位框架通过reset-uclass.c和reset-uclass.h文件提供标准化接口,定义了复位控制器的操作结构体reset_ops(包含of_xlate、request、free等回调函数)和复位控制句柄结构体(reset_ctl、reset_ctl_bulk)。该框架支持通过名称、索引或批量方式获取复位信号,并提供复位请求、释放、置位和解除等标准API接口,实现了硬件模块复位的统一管理机制。

2025-10-29 20:47:35 837

原创 【u-boot】重定位(ARM32)-relocate_code

本文分析了u-boot 2016.03版本的relocate_code实现。该函数主要完成三项工作:1)将镜像从Flash拷贝到RAM;2)遍历.rel.dyn重定位表,修正所有链接地址到运行地址的偏移;3)处理XScale架构的特殊缓存需求。通过计算目标地址与链接地址的偏移量r4,代码首先拷贝整个镜像,然后逐项修正.rel.dyn表中的指针值,确保所有地址引用正确指向新的运行位置。最后针对XScale架构进行必要的缓存操作后返回。整个过程实现了u-boot镜像从链接地址到任意运行地址的动态重定位。

2025-10-28 21:11:23 590

原创 【u-boot】重定位(ARM64)-relocate_code

本文分析了Rockchip修改版U-Boot中relocate_code函数的实现原理。该函数负责将U-Boot从Flash拷贝到RAM并完成重定位,主要步骤包括:建立栈帧保存参数、判断是否需要重定位、计算运行地址偏移量、拷贝代码到目标地址、修正ELF重定位表(处理.rela.dyn段中的R_AARCH64_RELATIVE类型项),最后进行缓存处理确保代码正确执行。通过对比官方版本,重点剖析了该函数在ARM64架构下的实现细节,包括地址计算、内存拷贝和重定位修正等关键操作。

2025-10-28 21:02:48 561

原创 【u-boot】u-boot中异常向量表(ARM64)

本文介绍了ARM64架构中异常向量表的设置与处理过程。在u-boot启动时,会根据当前运行级别(EL1/EL2/EL3)将异常向量表地址存入对应的VBAR_ELx寄存器。异常向量表包含同步、IRQ、FIQ等异常处理入口,每个入口占用128字节空间。当异常发生时,处理器会跳转到_exception_entry函数保存通用寄存器x1-x30,并根据异常级别读取ESR、ELR、SPSR等关键系统寄存器值压栈,为后续异常处理提供完整的上下文环境。最后通过exception_exit恢复现场并返回。

2025-10-28 20:59:25 829

原创 【u-boot】设备描述之平台数据方式

本文介绍了U-Boot中平台数据(platdata)的实现机制。平台数据是编译期静态定义的设备描述信息,用于在不依赖设备树的情况下提供硬件配置。核心是通过U_BOOT_DEVICE()宏注册设备,与驱动通过name字段匹配绑定。驱动在probe阶段通过dev_get_platdata()获取平台数据进行初始化。相比设备树,平台数据启动更快但灵活性较差,适用于小型板级或早期初始化场景。文章详细说明了平台数据的结构定义、设备驱动绑定流程,并通过串口驱动实例展示了实际应用。

2025-10-27 21:21:40 310

原创 【u-boot】u-boot网络系统剖析

v2017.09。

2025-10-27 21:04:00 348

原创 【u-boot】u-boot启动文件start.S剖析(ARM64)

ARM64 U-Boot启动流程分析 本文分析了ARM64架构下U-Boot的启动入口代码start.S。主要流程包括: 定义_start入口点,根据配置跳转到reset或执行SoC特定的启动代码 设置地址无关代码(PIC)重定位处理 异常向量表初始化,根据不同异常级别(EL3/EL2/EL1)配置系统控制寄存器 启用SMP多核同步支持 应用ARM核心特定的勘误表修正 处理器底层初始化后进入主CPU流程或从CPU等待流程 代码展示了U-Boot在ARM64平台上的底层初始化过程,包括异常处理、缓存控制、多核

2025-10-24 21:15:32 420

原创 【u-boot】u-boot驱动模型-struct driver

本文分析了U-Boot中struct driver结构体的功能与实现。该结构体用于描述设备驱动程序,包含初始化、移除等关键方法。文章详细解读了各成员变量的作用,重点分析了bind()、probe()、remove()等核心方法的调用时机和流程。同时阐述了设备树匹配机制(uclass/of_match)和驱动操作集(ops)的设计原理。驱动模型采用"延迟探测"机制,在访问设备时才触发probe()操作。通过分析U-Boot设备驱动框架的核心实现,揭示了其模块化设计思想。

2025-10-24 21:02:33 848

原创 【u-boot】u-boot的分区支持

本文分析了u-boot源码中分区表支持的实现机制。u-boot通过/disk目录下的代码文件支持多种分区类型,包括DOS/MBR、GPT、ISO、Mac和Amiga等。每种分区类型通过U_BOOT_PART_TYPE宏声明为struct part_driver结构,并实现相应的回调函数。用户可通过part list命令查看设备分区信息,系统会调用分区驱动中的print和get_info等回调函数来获取和显示分区表内容。该设计实现了分区表的模块化支持,便于扩展新的分区类型。

2025-10-20 22:14:20 333

原创 【u-boot】u-boot支持的文件系统

U-Boot支持多种文件系统,包括FAT、EXT和UBIFS等。其核心实现通过struct fstype_info结构体描述文件系统操作接口,包含probe、ls、read等函数指针。主要流程通过fs_set_blk_dev和fs_set_blk_dev_with_part函数自动探测并挂载文件系统,其中probe函数用于识别文件系统类型,成功后将保存设备信息和分区信息供后续操作使用。文件系统层通过遍历注册的fstypes[]数组,调用对应驱动完成识别和初始化。

2025-10-20 22:12:00 894

原创 ARMv8的异常处理

由于异常永远不会转移到 EL0,因此没有专用的EL0向量表。所有向量表使用相同的格式,根据异常的类型和异常发生的位置,存在不同的异常类别条目,每个异常类别在向量基地址的固定偏移量处具有一个异常向量。

2025-09-29 22:33:12 929

原创 【linux kernel】一文总结linux的clk框架

本文浅析linux的clk框架

2024-07-18 20:44:14 1814

原创 【linux kernel】一文总结linux的uevent机制

本文描述linux内核的uevent机制。

2024-06-24 21:45:27 3176

原创 【linux kernel】一文总结linux输入子系统

本文记录linux输入子系统的一些知识点。

2024-06-24 21:39:29 1597

原创 【linux kernel】一文浅析linux HID核心

本文总结Linux内核的hid核心

2024-05-30 20:53:58 1936 2

原创 使用OrangePi KunPeng Pro部署AI模型

本文使用OrangePi Kunpeng Pro部署AI模型

2024-05-29 21:20:22 2065

原创 【linux kernel】linux内核hid触摸源码hid-multitouch.c剖析

分析linux hid触摸源码hid-multitouch.c文件

2024-05-08 21:17:52 1191

原创 【linux kernel】杂项(misc)设备驱动总结

文本总结misc杂项设备相关知识点

2024-05-08 21:10:02 2623

原创 【linux kernel】 一文总结linux内核中的kobject、kset和ktype

总结linux内核中的kobject、kset和ktype知识点

2024-04-20 10:11:41 3274

原创 【Android】一文总结Android系统服务大管家-ServiceManager

ServiceManager是一个由C/C++编写的系统服务,源码位于/framework/native/cmds/servicemanager中,本文简要讨论servicemanager的实现和功能。

2024-04-08 21:06:18 3255

原创 【Android】一文总结Android的init语言

- 1、在Android系统中,存在多个以`xxx.rc`形式命名的文件,这些可以文件可以理解成Android系统配置文件,在Android系统启动过程中,由init进程加载并解析,这些文件中的内容形成了Android的init语言,是语言就存在一定的语法、格式、命令和参数等。- 2、为了在阅读这些rc文件时不至于茫然无措,也为了更加深入的理解Android系统的启动过程,也为了后续能够深度的定制Android系统,总结了在rc文件中常使用的command、option等,便于备查理解!

2024-04-07 21:52:31 2047

原创 【linux kernel】linux的SPI框架分析

本文分析linux内核的SPI框架!

2024-01-02 21:13:10 2509 1

原创 【linux kernel】linux 的uart驱动框架分析

本文分析linux的uart框架

2023-11-13 21:49:26 1749 1

原创 【linux kernel】linux的platform设备驱动框架分析

本文分析linux的platform设备驱动框架。

2023-10-16 08:44:08 846

原创 【linux kernel】linux内核设备驱动的注册机制

向linux内核注册驱动由driver_register()完成。它将驱动程序的信息添加到内核的驱动程序列表中,使得内核能够在需要时与该驱动程序进行交互。本文将分析该函数!

2023-10-15 15:24:19 1269

原创 【linux kernel】对linux内核设备的注册机制和查找机制分析

linux内核设备的注册由```device_register()```函数完成,这个函数是linux设备驱动模型的核心函数,本文将分析该函数!

2023-10-15 15:16:33 1027

原创 【linux kernel】linux内核中的debugfs

本文分析和讨论linux内核中debugfs常用的API和使用方法。

2023-08-22 21:17:40 892

原创 【linux kernel】一文总结linux内核通知链

文本基于内核源码4.19.4描述构成通知链的具体数据结构和API接口,同时描述四种通知链的具体应用场景,并对API接口进行简要分析。

2023-07-06 12:00:00 2210

原创 【linux kernel】linux内核数据结构分析之哈希表

出自Linux内核文件是Linux内核中实现散列表的基础数据结构之一,它提供了高效的链表管理机制,用于处理具有相同哈希值的元素。在结构中,first是一个指向链表中第一个节点的指针,它指向通过使用,可以将具有相同哈希值的元素按照链表的形式连接起来,并且可以通过first指针快速访问链表中的第一个元素。在散列表的实现中,每个桶都使用来维护对应链表的头节点。这样可以方便进行链表的插入、删除和遍历操作。只是链表头节点的数据结构,并不存储实际的数据。实际的数据存储在链表节点。

2023-06-20 21:03:43 1304

原创 【linux kernel】linux内核数据结构分析之链表

Linux内核中实现了一套经典的链表操作,定义在/include/linux/list.h文件中,本文基于linux内核源码6.2.7,记录了其常用操作链表的API函数,便于在阅读linux内核源码时更好的理解程序执行的过程和细节。

2023-06-19 21:48:56 1540

原创 【linux kernel】linux media子系统分析之media控制器设备

Media Controller设备:Media Controller设备是一个虚拟的设备,它代表了整个媒体设备的拓扑结构,包括所有的媒体实体、媒体端口、连接关系等。在Media Controller中,每个媒体设备都被描述为一个媒体实体(Media Entity),每个媒体实体都有一个或多个媒体端口(Media Pad),每个媒体端口都可以连接到另一个媒体设备的媒体端口上,从而形成一个媒体设备的拓扑结构。它负责创建和管理媒体设备子系统中的设备节点,以便应用程序可以通过设备节点与媒体设备进行通信。

2023-06-18 22:24:12 2322

原创 【V4L2】 v4l2框架分析之v4l2_fh

🔺相关源码文件:在V4L2中,结构用于保存V4L2框架中使用的文件句柄(File Handle)的数据,即每个打开的视频设备都会对应一个结构体,该结构体包含了与该设备相关的各种信息,例如该设备的控制器、缓冲区、状态等等。通过,V4L2子系统能够跟踪设备文件的打开和关闭,并管理与句柄相关的状态和控制操作。

2023-06-17 11:19:36 718

原创 【V4L2】 v4l2框架分析之v4l2_subdev

在linux内核中,许多驱动程序需要与子设备通信,这些子设备用于完成一些子任务,最常见的是:处理音频或视频的播放、编码或解码。传感器和摄像机控制器。这些设备通常是I2C设备(但也不全是)。

2023-06-15 22:47:09 2004

原创 【V4L2】 v4l2框架分析之v4l2_device

对于想要接入V4L2子系统的设备,每个设备实例都由一个表示。对于简单的设备可以只分配这个结构,但大多数情况下,可以把这个结构嵌入到更大的结构中。//指向struct device的指针。//指向struct media_device的指针,值可以为NULL。struct media_device表示一个媒体设备。//用来跟踪注册的子设备。//自旋锁。用于锁定这个结构体;如果这个结构体被嵌入到一个更大的结构体中,也可以被驱动程序使用。

2023-06-12 21:52:55 1139

原创 【V4L2】v4l2框架分析之video_device

本文基于Linux内核版本4.1.15分析V4L2框架下的video_device。

2023-06-11 12:04:39 1226

原创 V4L2-PCI驱动程序样例分析(一)

本文基于linux内核提供的一个PCI驱动程序模板进行分析,驱动程序文件为```v4l2-pci-skeleton.c```,放在linux/samples/v4l目录下。从该驱动程序中,将看到一个PCI驱动程序的总体框架和组成结构,同时该驱动基于V4L2设计,从而也能了解到如何基于V4L2开发视频捕获驱动。

2023-06-10 10:13:38 1356

原创 如何在Windows下搭建Qt安卓开发环境?

本文描述如何在Windows下搭建Qt安卓开发环境,由于Qt维护的安卓开发环境和安卓开发环境在很大程度上不兼容,所以在选择Qt版本的时候需要注意:在JDK和Android SDK环境的选择上需要注意,否则QtCreator会检测不到正确/合适的Android开发环境。

2023-03-13 22:10:35 1561

原创 如何在openKylin操作系统上搭建Qt开发环境

文本描述如何在openKylin操作系统上搭建Qt开发环境。

2023-03-02 22:59:52 1702

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除