09 2024 档案
摘要:背景 某轮测试发现,我们的设备运行一个第三方的App时,卡顿感非常明显: 界面加载很慢,菊花转半天 滑屏极度不跟手,目测观感帧率低于15 对比机(竞品)也会稍微一点卡,但是好很多,基本不会有很大感觉的卡顿 可以初步判定我们的设备存在性能问题,亟需优化,拉平到竞品水准。 最后发现,这个问题实际上是应用
阅读全文
摘要:/sys/kernel/debug/binder/目录下主要节点含义 state 显示binder设备的整体状态信息 包括进程数量、线程数量、待处理事务数量等 stats 展示binder操作的统计信息 如事务数量、内存使用情况等 transactions 列出当前正在处理的binder事务 包括发
阅读全文
摘要:/proc/interrupts 和 /proc/softirqs 两者是相互关联的,但它们各自记录的信息和作用有所不同,反映了硬中断和软中断的两个处理阶段。 两者的关系: 硬中断引发软中断: 硬中断通常由外部设备(如网络卡、键盘等)触发,当 CPU 响应硬中断时,会暂时停止当前正在执行的任务,去处
阅读全文
摘要:NCM介绍 1 功能 USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Device之间交换以太网帧。这些以太网帧可以传输在通信网络上传输的IPv4或IPv6数据报。NCM主要用
阅读全文
摘要:/sys/kernel/debug/tracing/options/irq_info 是 ftrace 中的一个选项,用于启用或禁用有关中断的详细信息的跟踪。 options/irq_info 的具体作用: 1. 启用 IRQ 信息跟踪: 当启用 irq_info 时,ftrace 将捕获与中断相关
阅读全文
摘要:在USB 2.0中,设备成功枚举的标志可以通过观察 D+ (dp)、D- (dm) 和 VBUS 引脚的电压波形来判断。以下是这些信号在USB 2.0枚举过程中常见的状态: VBUS (5V供电): USB设备插入主机时,VBUS引脚应从0V变为5V。这表明主机为设备提供了电源,设备开始上电。 D+
阅读全文
摘要:initrd的全名是 init ramdisk,是一个启动时存在于内存的文件系统。 kernal 到 initrd的流程 在GRUB加载kernel时,kernel会先在内存中制造一个rootfs当做临时的空间供系统使用,接下来,kernel便会将initrd当做是一个系统,将其mount到root
阅读全文
摘要:以Android13 为例:在Android 13中,USB插入拔出事件的通知链从硬件层到应用层,依次经过硬件、内核、HAL、Framework、以及应用广播等多个模块,整个流程涉及的具体文件和逻辑如下: 1. 硬件层(USB PHY / 控制器) 文件: /drivers/usb/phy/phy-
阅读全文
摘要:最近一段时间,项目需求,需要对USB眼图进行摸底测试。测试过程很简单,然而debug之路却很不简单。不简单往往也就意味着带来了不少收获。 示波器跨接在接收滤波器的输出端,调整示波器扫描周期,使示波器水平扫描周期与接收码元的周期同步,此时,示波器作为接收端会受到一连串的脉冲信号(000 001 010
阅读全文
摘要:USB 2.0 和 USB 3.0 都支持低功耗管理机制(LPM,Link Power Management),但两者的实现方式和目标不同。以下是 USB 2.0 的 LPM 和 USB 3.0 的 LPM 之间的主要区别: 1. 协议版本与目的 USB 2.0 LPM (Link Power Ma
阅读全文
摘要:USB可见设备状态,分为连接(Attached),上电(Powered),默认(Default),地址(Address),配置(Configured)和挂起(Suspended)6个状态。所谓可见,即USB系统和主机可见的状态,其他状态属于USB设备内部而不可见。其中有关电源的,大致可分下面三类:
阅读全文
摘要:1 开发UEFI服务 本质Protocol 就是包含属性和函数指针的结构体,功能上来说就是提供者和使用者对服务的一种约定。 2 开发UEFI驱动 一个设备/总线驱动程序在安装时首要找到对应的硬件设备(UEFI中是要找到对应的控制器),然后执行安装操作,将驱动程序安装到硬件设备的控制器上。 一个完整的
阅读全文
摘要:JIT(Just-In-Time)优化在编译过程中有多种编译选项可以支持,不同语言和平台可能有不同的实现。以通用的 JIT 编译器为例,以下是一些常见的编译选项: 编译级别(Compilation Levels) 解释模式(Interpreter Mode):仅执行解释器,不进行编译。 C1 编译器
阅读全文
摘要:JVM开发团队一直在努力,缩小Java与C/C++语言在运行效率上的差距。 本篇博客,我们来谈一谈JVM(HotSpot)为了提高Java程序的运行效率,都实现了哪些激动人心的技术~ 1 JIT编译器的引入 首先我们这篇文章中所说的编译器都是指JVM的组成部分之一 即时编译器(JIT),与生成Jav
阅读全文
摘要:pr_debug 是 Linux 内核中用于打印调试信息的宏,它的行为会根据编译时的配置有所不同。如果定义了 CONFIG_DYNAMIC_DEBUG 配置选项,pr_debug 会扩展为 dynamic_pr_debug,这允许在运行时动态地控制调试信息的输出。如果没有定义 CONFIG_DYNA
阅读全文
摘要:cpu_capacity 在Linux内核中,cpu_capacity 是用于表示每个CPU的处理能力的一个参数,通常用于调度器的负载均衡。它表明不同的CPU核心在计算资源分配中的相对性能,尤其在异构多核架构(如ARM的big.LITTLE架构)中,不同的核心可能具有不同的计算能力。 主要概念 同构
阅读全文
摘要:1.报告描述符的概念和作用 开门见山,报告描述符就是描述报告(HID接口上传输事务中的数据)的一组数据结构。 首先大家可能会问,报告又是什么?我们前面讲过,USB主机一般是以中断的方式向HID设备发送或者索取数据,也就是说USB主机发送一个请求,设备要根据硬件操作,向主机提交自己的状态变化,例如鼠标
阅读全文
摘要:本节主要介绍udc驱动枚举过程,需结合udc驱动、composite.c、function等一同分析整个过程。 udc驱动中断处理函数 当host检测到DP上拉,则认为有新的device插入,此时host将发起进入枚举流程,整个枚举流程大部分是在中断函数中处理,协议对时间有相关的要求,因此整个枚举流
阅读全文
摘要:本节主要分析虚拟串口的tty设备的注册、创建/dev/ttyGSx设备节点、tty相关接口的实现。 tty的申请与注册 源码:drivers/usb/gadget/function/u_serial.c static const struct tty_operations gs_tty_ops =
阅读全文
摘要:本文介绍了 App 开发者不经常接触到但是在 Android Framework 渲染链路中非常重要的一个类 Choreographer。包括 Choreographer 的引入背景、Choreographer 的简介、部分源码解析、Choreographer 与 MessageQueue、Chor
阅读全文
摘要:名词缩写 ASID:Address Space ID 地址空间标识符 CD:Context Descriptor; 上下文描述符; CTP:Context-table pointer 上下文表指针 EPT:Extended Page Table 扩展页表 GPA:Guest Phyical Addr
阅读全文
摘要:上一节的文章【USB3.0协议学习】Topic2·USB3.0的LTSSM分析中我们详细分析了USB3.0协议中的链路训练状态机(LTSSM)的各状态和跳转条件,覆盖了所有LTSSM状态。本文我们将从Roothub port和Device Port的角度讨论其Port Connect 状态机。该状态
阅读全文
摘要:USB3.0中的三种Reset Events 1. PowerOn Reset PowerOn Reset被用来代指上电复位,当一个device接入到root hub或者外置hub的时候,该device检测到Vbus信号从无效变为有效,会自动执行复位。(注意,self powered device不
阅读全文
摘要:一、什么是LTSSM,处于USB层次中的哪个位置? LTSSM是链路训练状态机的简称,位于USB3.0协议的link layer,共有12种状态,在链路的两端,也就是Downstream port和Upstream port中各有一个LTSSM,二者通过握手信号一起配合控制着这条链路的状态。(由链路
阅读全文
摘要:一、USB3.0 Hub的单播(非广播)机制 Hub通过解析下行packet header中的Route String字段识别packet要传递的终点,其中4'b0000代表hub本身,4'b0001-4'b1111分别代表hub的各downstream port,由于USB3.0规定Host Co
阅读全文
摘要:1.简介 USB2.0总线采用轮询模式,即总线事务开始时,都要先发送IN或者OUT令牌包,以通知端点或者查询端点是否准备好。而USB3.2采用了异步通知模式,若端点没有准备好,则主机无需轮询,端点准备好后会通知主机,而对于OUT端点,主机会直接发送DP数据包,相当于将USB2.0中的OUT和DATA
阅读全文
摘要:1.概述 USB Hub提供了连接USB主机和USB设备的电气接口。USB Hub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为Root Hub,下行口连接下一级Hub的上行口或者USB设备。经过Hub的扩展,一个USB主机可以和多个USB设备通信。US
阅读全文
摘要:1.概述 RK3588有2个USB3.0 DRD控制器,2个USB2.0 Host控制器。USB3.0 DRD控制器既可以做Host,也可以做Device,向下兼容USB2.0和USB1.0。USB3.0 DRD控制器的内部结构如下图所示;总线接口为AXI或AHB;USB3.0和USB2.0及USB
阅读全文
摘要:1.概述 USB设备枚举、请求处理、数据交互都涉及USB设备控制器中断。当有事件发生时,USB设备控制器首先将事件信息通过DMA写入到事件缓冲区中,然后向CPU发出中断,随后CPU调用中断处理函数开始处理中断事件。 2.事件 dwc3 USB设备控制器事件使用dwc3_event数据结构描述,由4个
阅读全文
摘要:1.概述 如下图所示,Linux内核中USB主机体系结构由五部分组成,分别为Application Software、USB Class Driver、USB Core((USB Driver)、USB Host Controller Driver、USB Host Controller。应用程序处
阅读全文
摘要:1.简介 USB Gadget Driver定义了很多trace event,使用者可以在用户空间通过ftrace接口,追踪USB Gadget Driver的行为。 USB设备控制器驱动定义的trace event如下,用户空间接口路径为/sys/kernel/debug/tracing/even
阅读全文
摘要:1.概述 UVC(USB Audio Class)定义了使用USB协议播放或采集音频数据的设备应当遵循的规范。目前,UAC协议有UAC1.0和UAC2.0。 UAC2.0协议相比UAC1.0协议,提供了更多的功能,支持更高的带宽,拥有更低的延迟。Linux内核中包含了UAC1.0和UAC2.0驱动,
阅读全文
摘要:系统表 对UEFI应用程序和驱动程序开发人员来讲,系统表是最重要的数据结构之一,它是用户空间通往内核空间的通道。有了它,UEFI应用程序和驱动才可以访问UEFI内核、硬件资源和I/O设备。 1 在应用程序和驱动中访问系统表 计算机系统进入DXE阶段后系统表被初始化,因而系统表只能用于DXE阶段以及以
阅读全文
摘要:第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口) 常见缩写及描述: 缩略词 全名 描述 UEFI Unified Extensible Firmware Interface 统一的可扩展固件接口 BS Boot Services
阅读全文
摘要:systemd-analyze简介 systemd-analyze是Linux自带的分析系统启动性能的工具。 systemd-analyze可使用的命令: systemd-analyze [OPTIONS…] [time] systemd-analyze [OPTIONS…] blame syste
阅读全文
摘要:USB的u0、u1、u2和u3代表不同的电源状态或低功耗状态,主要用于USB 3.0及其更高版本,目的是在不活动时减少功耗,同时保证设备能够迅速恢复到工作状态。这些状态的具体作用如下: U0(Active State): 这是USB设备的正常工作状态,数据可以正常传输,设备完全活跃。 U1(Low
阅读全文
摘要:1 .inf文件 以下面 .inf文件为例 [Defines] # 块用于定义模块的属性和其他变量,块内定义的变量可被其他块引用 INF_VERSION = 0x00010006 #INF 标准的版本号, 前半部分主版本号,后半次版本号 BASE_NAME = Main #模块名字字符串,不能包含空
阅读全文
摘要:一、引言 计算机的世界里,CPU任务分为CPU bound和IO bound。而实际场景下往往是两者混合型任务。针对性能的优化,普遍关注点都在CPU上(不论是CPU的频点和CPU的选核), 往往忽略对IO bound的任务的优化。而DDR作为SOC芯片代码运行空间和数据缓存空间,在不同应用状态下,S
阅读全文
摘要:在 Android 中,Render 线程(也称为渲染线程)是一个专门用于处理 UI 绘制和动画的线程。它的主要职责是确保用户界面在屏幕上流畅且高效地呈现。这个线程的引入是为了将渲染任务从主线程(UI 线程)中分离出来,以避免主线程因过多任务阻塞而导致界面卡顿或无响应的情况。 Render 线程的主
阅读全文
摘要:在 Android 中,VSYNC(Vertical Synchronization)是一个垂直同步信号,用于协调显示刷新和绘图操作。VSYNC 信号的主要作用是控制屏幕刷新频率与图形渲染的同步,以确保画面显示平滑且没有撕裂现象。 VSYNC 的工作原理 显示刷新周期:屏幕的刷新率(通常为 60Hz
阅读全文
摘要:balance_dirty_pages_ratelimited分析 nr_dirtied_pause:当前task的脏页门限; dirty_exceeded:全局的脏页数超过门限或者该bdi的脏页数超过门限;(dirty_exceeded = (bdi_dirty > bdi_thresh) &&(
阅读全文
摘要:usb_composite_driver的创建于注册 源码:drivers/usb/legacy/serial.c //创建usb_composite_driver static struct usb_composite_driver gserial_driver = { .name = "g_se
阅读全文
摘要:configfs 和 functionfs 是 Linux 内核中用于配置和管理 USB 设备行为的两种不同的文件系统,它们各自的用途和工作方式有所不同,但在 USB Gadget 子系统中可以结合使用。以下是它们的区别和关系: 1. configfs: 用途: 用于配置和管理 USB 设备的整体功
阅读全文
摘要:之前在linux移植udc驱动的时候,没有深入的理解整个gadget驱动框架,现在重新再屡屡gadget驱动,以便后期再次学习。本系列的文章以虚拟串口进行分析,相关源码均是基于linux4.19.123。 gadget驱动框架 gadget源码主要在:drivers/usb/gadget,以虚拟串口
阅读全文
摘要:gadget驱动框架(三) usb_udc与usb_gadget_driver的绑定 usb_udc与usb_gadget_driver,在注册的时候分别被添加到udc_list和gadget_driver_pending_list中,无论这两者先后顺序如何,都将会动态的去识别及匹配到具体设备中,绑
阅读全文
摘要:FunctionFS (Function Filesystem) 是 Linux USB Gadget 框架的一部分,专门用于从用户空间实现和控制自定义的 USB 功能。它提供了一种文件系统接口,使用户能够在用户空间中直接定义 USB 设备的接口、端点和描述符,并管理 USB 数据的传输。Funct
阅读全文
摘要:概述 USB Linux Gadget是一种具有UDC (USB设备控制器)的设备,可以连接到USB主机,以扩展其附加功能,如串口或大容量存储能力。 一个gadget被它的主机视为一组配置,每个配置都包含一些接口,从gadget的角度来看,这些接口被称为功能,每个功能代表一个串行连接或一个SCSI磁
阅读全文
摘要:BC v1.2充电规范 Battery Charging Specification USB port 如何识别不同的Charger类型 USB Charger类型 USB_SDP_CHARGER POWER_SUPPLY_TYPE_USB ( Standard Downstream Port )
阅读全文
摘要:流式 DMA(Streaming DMA)和一致性 DMA(Consistent DMA)是两种不同的内存映射模式,用于 DMA(直接内存访问)操作。它们的主要区别在于缓存一致性、性能和使用场景。以下是这两者的详细区别: 1. 流式 DMA(Streaming DMA) 缓存一致性: 流式 DMA
阅读全文
摘要:slabinfo - version: 2.1 # name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdat
阅读全文
摘要:MemTotal: 688576 kB 总内存 MemFree: 153736 kB 空闲内存 MemAvailable: 339884 kB 可用内存 Buffers: 16 kB 给文件的缓冲大小 Cached: 267672 kB 高速缓冲存储器 SwapCached: 36 kB 被高速缓冲
阅读全文
摘要:USB LFPS:低功耗状态下的高速数据传输 什么是USB LFPS? USB LFPS(Low-Power Signaling)指的是USB接口在低功耗状态下的一种高速数据传输技术。传统上,USB接口在低功耗模式下,数据传输速率会大幅降低,以节省功耗。而LFPS技术则通过优化信号传输方式,使得US
阅读全文
摘要:USB TCPM(Type-C Port Manager)的主要作用是管理 USB Type-C 端口的连接和电源传输协议(USB Power Delivery, PD),确保设备正确识别、协商和切换数据传输和电源供应的角色。TCPM 在 USB Type-C 连接中起到关键管理作用,主要职责包括:
阅读全文