自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(526)
  • 收藏
  • 关注

原创 RK3568平台(触摸篇)触摸框调试

UART框:双USB框:IIC框:现在IIC框基本很少使用,UART框和USB框可以定制更多的协议,使用范围更广。

2025-03-15 16:44:50 161

原创 RK3568平台(音频篇)AD82584F功放

功放是功率放大电路,一般是连接着喇叭放大喇叭的声音。功放的调试需要硬件工程师来主导,一般喇叭的阻抗·功率及外围器件的选择,需要看客户喇叭的需求。功放的寄存器配置参数一般需要硬件给出,驱动工程师需要硬件工程师这边给出的寄存器合入,由硬件测试工程师测试功放数据。

2025-03-11 22:18:33 530

原创 RK3568平台(显示篇)HDMI EDID 配置和读取

现在的显示设备比如显示器,电视等都HDMI接口,那通常每个HDMI接口都保留有一份EDID数据,这个数据可以存在程序里面由系统启动过程中来初始化,更常见的做法是每个HDMI口会有一个EEPROM来保存这份数据,这个EEPROM也只是有256bytes大小。外接设备如DVD播放器在HDMI热插拔的时候就会通过HDMI的DDC通道来读取EDID数据。

2025-03-11 21:50:51 418

原创 RK3568平台(音频篇)audio_policy_volumes_drc.xml解析

是 Android 系统中用于配置音频策略和音量的 XML 文件。它定义了音频流的音量曲线、动态范围控制(DRC)参数以及音频设备的音量设置。该文件通常位于或目录下,是 Android 音频框架的重要组成部分。以下是对文件的详细解析。:定义不同音频流类型的音量曲线(如音乐、通话、通知等)。:配置音频的动态范围控制参数,以优化音频输出。:为不同类型的音频设备(如扬声器、耳机、蓝牙设备)设置音量范围。音量曲线定义了音频流类型与音量值之间的映射关系。每个音频流类型(如音乐、通话、通知)都有一个独立的音量曲线。

2025-03-08 22:43:51 436

原创 RK3568平台(camera篇)camera3_profiles_rk3588.xml解析

是一个与 Android 相机 HAL(硬件抽象层)相关的配置文件,通常用于定义 Rockchip RK3588 平台上的相机设备及其功能。该文件基于 Android 的Camera3HAL 框架,用于描述相机的配置、流配置、分辨率、帧率、格式等信息。以下是对文件的详细解析。的主要作用是为 Android 相机 HAL 提供相机设备的配置信息,包括:支持的相机设备(如前置摄像头、后置摄像头)。每个相机设备的能力(如分辨率、帧率、格式)。流配置(如预览流、拍照流、视频流)。

2025-03-08 17:05:47 449

原创 RK3568平台(camera篇)media_profiles_default.xml 解析

media_profiles_default.xml 是 Android 系统中用于定义摄像头和其他多媒体设备配置的文件。它通常位于 /system/etc/ 目录下,包含了摄像头、音频、视频等设备的默认配置参数。这个文件是 XML 格式的,结构清晰,便于解析和修改。

2025-03-08 16:10:51 498

原创 RK3568平台(GPIO篇)Android平台集成libgpiod库

是一个用于与 Linux GPIO(通用输入输出)子系统交互的用户空间库。它提供了一组简单且高效的 API,允许开发者通过用户空间程序控制 GPIO 引脚,而无需编写内核模块或直接操作。是 Linux 内核推荐的 GPIO 访问方式,取代了旧的。:是 Linux 内核推荐的 GPIO 访问方式。:支持 GPIO 输入、输出、事件检测等功能。:提供简洁的 C API 和命令行工具。:不支持复杂的事件检测(如边沿触发)。上来是下载好的libgpiod的源码。:每次操作都需要文件读写,效率较低。

2025-03-06 23:49:14 207

原创 RK3568平台(内存篇)EEPROM芯片BL24C02

BL24C02是一款基于 I2C 接口的 2Kbit(256 字节)串行 EEPROM 存储器芯片。它由BELIN公司生产,广泛应用于需要非易失性存储的嵌入式系统中。以下是关于 BL24C02 的详细介绍。

2025-03-05 22:46:51 148

原创 RK3568平台(GPIO篇)libgpiod的使用

libgpiod是一个用于与 Linux GPIO 子系统交互的用户空间库。它提供了一组简单的 API,允许开发者通过用户空间程序控制 GPIO 引脚,而无需编写内核模块。libgpiod是替代旧的sysfsGPIO 接口的推荐方式。

2025-03-04 23:22:50 822

原创 RK3568平台(网络篇)RTL8111网卡

RTL8111 是 Realtek 推出的一款高性能千兆以太网控制器芯片,广泛应用于 PCIE 网卡中。

2025-03-04 22:51:59 728

原创 RK3568平台(USB篇)recovery下U盘升级

1.检查recovery下能否识别到U盘。进入recovery模式下。2.检查U盘格式文件系统:确保U盘格式化为FAT32文件系统。Rockchip设备通常只支持FAT32格式的U盘。也可以在recovery下添加NTFS或者exFAT格式的U盘。3.检查U盘连接USB接口:尝试使用不同的USB接口或U盘,确保USB接口和U盘本身没有问题。USB线:如果使用USB线连接,确保USB线质量良好且连接稳定。4.查看设备节点:5.试试挂载U盘:U盘挂载失败,报selinux权限错误。

2025-03-03 22:46:03 735

原创 RK3568平台(平台总线篇)Gsensor STK8BA50

Gsensor,即加速度传感器(Accelerometer),是一种用于测量物体加速度的电子设备。以下是其关键点:1.工作原理MEMS技术:大多数Gsensor基于微机电系统(MEMS),通过检测质量块的位移来测量加速度。压电效应:部分Gsensor利用压电材料在受力时产生电压的特性来测量加速度。2.主要功能加速度测量:测量物体在X、Y、Z三个方向上的加速度。倾斜检测:通过重力加速度判断设备的倾斜角度。运动检测:识别设备的运动状态,如静止、移动、晃动等。震动检测:感知设备的震动或冲击。

2025-02-23 16:16:39 182

原创 C语言 关键字volatile作用

在嵌入式编程中,硬件寄存器和内存映射设备常常需要使用volatile关键字,以确保编译器不会对其进行优化,从而保证与硬件的交互是准确的。这段代码试图直接访问物理地址0x12345678,这个地址是一个GPIO端口的地址。在大多数现代操作系统中,用户空间的程序是不能直接访问物理内存的,这是由操作系统的内存保护机制所决定的。当程序试图直接访问一个它没有权限访问的内存地址时,操作系统会产生一个段错误(Segmentation Fault)。在这段代码中,和这两行代码都试图直接访问物理地址0x12345678。

2025-02-13 00:36:39 420

原创 Android 系统面试问题

Android GKI(Generic Kernel Image)和非GKI内核的主要区别在于内核设计和模块化程度,具体如下:1. 内核设计GKI:采用通用内核设计,与设备硬件分离,核心功能统一,厂商通过模块添加设备特定功能。非GKI:设备厂商深度定制内核,通常与硬件紧密集成,导致碎片化严重。2. 模块化GKI:内核模块化,核心功能与设备驱动分离,厂商通过加载模块支持特定硬件。非GKI:内核和驱动紧密耦合,模块化程度低,修改和更新复杂。3. 更新和维护。

2025-02-11 23:34:41 949

原创 RK3568平台(基础篇)maskrom 模式无法升级

1. Loader模式定义:Loader模式是嵌入式系统中的一种特殊模式,用于固件的升级和烧写。进入条件:系统在烧录过固件后,上电启动时会进入Loader模式。操作:在Loader模式下,bootloader会等待主机的命令,进行固件的升级和烧写。2. MaskRom模式定义:MaskRom模式是系统在未烧录固件或固件数据被清除时的初始状态。使用场景:主要用于bootloader损坏时的系统修复。

2025-02-11 22:27:58 1168

原创 嵌入式面试题 C/C++常见面试题整理_7

不可行,如果在头文件中定义静态变量,会造成资源浪费的问题,同时也可能引起程序错误。因为如果在使用了该头文件的每个C语言文件中定义静态变量,按照编译的步骤,在每个头文件中都会单独存在一个静态变量,从而会引起空间浪费或者程序错误所以,不推荐在头文件中定义任何变量,当然也包括静态变量。

2025-02-07 23:15:14 1324 3

原创 RK3568平台(内存篇)DDR bin文件合入

DDR的全称为Double Data Rate SDRAM(双倍速率的SDRAM),就是我们平时说的内存颗粒,也就是内存芯片。DDR在原有的SDRAM的基础上改进而来,SDRAM在一个CLK周期传输一次数据,而DDR在一个CLK周期传输两次数据,分别在上升沿和下降沿各传输一次数据。随着技术的发展,DDR经历了多轮技术迭代,发展出了DDR2、DDR3、DDR4、DDR5,从DDR到DDR5主要的区别是在于传输速率的不同,随着时钟周期的不断降低,传输速率也不断提高。DDR的发展历程‌。

2025-01-20 22:57:08 276

原创 RK3568平台(基础篇)Android开机动画的制作

Android 开机 logo 是可以动态显示或者静态显示的。如果是静态显示,循环播放一章图片,直到系统启动。如果是动态显示,那么开机 logo 由多张图片组成,并且按照规定的帧率来播放。可以播放一轮或者循环播放。

2025-01-17 22:07:21 199

原创 RK3568平台(音频篇)lineout无声调试

硬件HP_MUTE已强制拉低。

2025-01-16 23:14:22 585

原创 RK3568平台(电源篇)RK806长按power键强制关机

本文适用于RK3588+RK806(电源管理芯片)的方案,power(电源)键是直接控制RK806来控制RK3588的上下电,可以实现短按开机、长按强制断电关机的功能,可以通过控制RK806的寄存器来设置长按的时间长短。

2025-01-16 22:38:34 713

原创 RK3568平台(文件系统篇)文件系统常用操作

点击U盘右键格式化,弹出以下对话框可以查看U盘文件系统类型:点击文件系统下拉框可以选择文件系统类型,点击开始可以格式化文件系统。

2025-01-11 01:17:27 139

原创 RK3568平台(文件系统篇)文件系统基本概念

文件系统是操作系统用于组织和存储文件以及对文件进行管理的一种机制。它提供了一种结构化的方式,使得计算机系统能够有效地存储、检索和管理文件数据。常规认知中,文件系统包括以下重要的概念:根目录: 文件系统的最顶层目录,包含了所有其他目录和文件的起始点。在根目录下可以有多个子目录和文件。目录: 文件系统中的目录类似于文件夹,用于组织和存储文件。目录可以包含其他子目录和文件。文件: 文件是存储数据的基本单位。文件可以包含文本、图像、音频、视频等各种类型的数据。

2025-01-09 23:40:03 83

原创 RK3568平台(USB篇)禁用USB端口

这里可以知道插入的android的端口号为3-1.3。

2025-01-09 23:09:10 323

原创 RK3568平台(基础篇)系统调用

在 Linux 操作系统中,系统调用(System Call)是用户程序与内核交互的主要方式。操作系统内核负责管理硬件资源,而用户程序(如应用程序)只能访问用户空间中的资源。系统调用通过提供一个接口,使用户程序能够请求操作系统执行特权操作(例如文件操作、内存分配、进程管理等)。

2025-01-03 23:16:21 159

原创 RK3568平台(平台总线篇)I2C senser传感器

sensor_register_device 是一个在嵌入式 Linux 系统中常见的函数,通常用于将传感器设备(如温度传感器、加速度计、湿度传感器等)注册到系统的传感器框架中。通过这个注册过程,内核可以识别并与传感器设备进行交互,从而提供对硬件传感器的访问接口。这个函数的作用是将一个新的传感器设备加入到系统中,使得内核能够管理它、获取数据或提供配置。该函数通常会出现在设备驱动程序中,特别是针对特定硬件传感器的驱动程序中。

2025-01-01 13:52:54 152

原创 RK3568平台(USB篇)USB网络共享

RNDIS 是微软定义的一种协议,它允许通过 USB 接口实现网络连接。通过 RNDIS,USB 设备可以充当网络适配器,允许主机通过 USB 与设备进行网络通信。它通常用于嵌入式设备、智能手机或其他设备,通过 USB 接口向计算机提供网络连接。常见场景:Android 设备通过 USB 连接到电脑,启用“USB 网络共享”功能(USB tethering),就是使用了 RNDIS 协议。另一个常见例子是在嵌入式 Linux 系统中,将设备通过 USB 连接到主机,并作为一个网络接口进行数据交换。

2024-12-30 22:10:03 541

原创 RK3568平台(内存篇)vmalloc虚拟内存管理

1.vmalloc()函数为了把物理上不连续的页面转换为虚拟地址空间上连续的页,必须专门建立页表项。还有,通过vmalloc()获得的页必须一个一个的进行映射(因为它们物理上不是连续的),这就会导致比直接内存映射大得多的缓冲区刷新。因为这些原因,vmalloc()仅在绝对必要时才会使用——典型的就是为了获得大块内存时,例如,当模块被动态插入到内核中时,就把模块装载到由vmalloc()分配的内存上。

2024-12-29 20:26:24 119

原创 RK3568平台(内存篇)mmap原理

既然mmap是实现内存映射的接口,那么内存映射是什么呢?如下图所示:每个进程都有独立的进程地址空间,通过页表和MMU,可以将虚拟地址转换为物理地址,每个进程都有独立的页表数据,这就可以解释为什么两个不同进程相同的虚拟地址却对应着不同的物理地址。

2024-12-24 00:19:28 136

原创 RK3568平台(Kbuild篇)vmlinux 编译过程

vmlinux 是 Linux 操作系统的内核映像文件,它包含了 Linux 内核的所有功能代码和必要的数据结构。这个文件通常是没有经过压缩和符号表去除的原始可执行文件。具体来说,vmlinux 文件是编译后的 Linux 内核的最终产物,通常是 ELF(可执行和可链接格式)格式的文件,包含了内核的机器码、符号信息、调试信息等,主要用于调试和开发阶段。最终在启动时,这个内核映像文件会被压缩成 vmlinuz(即 "v" 表示压缩)文件,后者是 Linux 系统启动时加载的实际文件。

2024-12-19 23:19:49 245

原创 RK3568平台(KBuild篇)KBuild编译体系

从Linux内核2.6开始,Linux内核的编译采用Kbuild系统,这和过去的编译系统有很大的不同,尤其对于Linux内核模块的编译。在新的系统下,Linux编译系统会两次扫描Linux的Makefile:首先编译系统会读取Linux内核顶层的Makefile,然后根据读到的内容第二次读取Kbuild的Makefile来编译Linux内核。kbuild,即 kernel build,用于编译 Linux 内核文件。

2024-12-19 00:19:07 167

原创 RK3568平台(内存篇)内存管理架构

物理内存被分割成相同大小的组,内核用页来表示这个组,页是内核管理内存的基本单位,尽管处理器的最小可寻址单位通常是字, 但是, 内存管理单元MMU通常以页为单位进行处理. 因此,从虚拟内存的上来看,页就是最小单位.页帧代表了系统内存的最小单位, 对内存中的每个页都会创建struct page的一个实例. 内核必须要保证page结构体足够的小,否则仅struct page就要占用大量的内存.体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。

2024-12-17 00:06:51 242

原创 RK3568平台(基础篇)io命令支持

io” 命令通常用于显示 Linux 系统中的 I/O 统计信息。它提供了有关磁盘读写操作的详细信息,包括每个块设备的读写次数、读写扇区数、读写延迟等。io命令可以直接操作某个寄存器,用于查看设置某个GPIO 引脚配置了什么iomux。

2024-12-16 23:41:13 623

原创 RK3568平台(input篇)input子系统事件处理层代码分析

Linux 提供了一个通用的事件处理层代码,即 evdev.c。比如在设备驱动层的 input_dev 结构体由 input_register_device 函数所注册input_register_device函数里面会去遍历输入处理程序链表,将输入设备与每个处理程序建立关联。evdev_handler 结构体定义了处理输入设备事件的函数指针,在 Linux内核中, evdev_handler 结构体定义在kernel-5.10\drivers\input\evdev.c。

2024-12-13 01:02:13 732

原创 git 分支管理

git 分支管理

2024-12-13 00:27:56 325

原创 git diff 查看差异

git diff 命令,默认查看的就是 工作区 和 暂存区之间文件的差异1.git diff : 查看工作区和暂存区之间所有的文件差异2.git diff -- 文件名:查看具体某个文件 在工作区和暂存区之间的差异3.git diff -- 文件名1 文件名2 文件名3:查看多个文件在工作区和暂存区之间的差异【注意】:查看具体文件的时候 -- 和文件名 之间有一个 空格,文件名1 和 文件名2 和 文件名3之间也有空格。

2024-12-13 00:20:39 544

原创 git冲突解决

冲突的成因:Git冲突通常发生在合并分支时,如果两个分支都修改了同一个文件的同一部分,则Git无法自动合并这些更改,需要手动解决。vi两个有冲突的文件,可以找到里面有等字符,修改冲突文件,达到自己想要的结果。冲突的手动解决:识别Git的冲突标记(例如),以及如何选择或合并代码。这时候git reset 到冲突的前一个commitID,解决好的冲突顺利的会到工作区。git status可以看到两个冲突文件。

2024-12-11 23:01:09 501

原创 git查看文件提交信息

2.使用git show +commitID 显示出了上次提交的commit id、作者信息(邮箱和姓名)、提交日期、commit message、代码diff等。1.使用git show +前面的几个commitID号码,能查询是否有这个commitID号的提交。4.使用git log --grep "占空比" 搜索提交历史关键字。3.使用git log查看提交历史。

2024-12-11 22:53:27 901

原创 git 撤销修改

这个命令会撤销工作区中指定文件的所有未提交修改,恢复到最近一次提交的状态。

2024-12-11 22:44:50 524

原创 RK3568平台(调试篇)addr2line定位so奔溃信息

从日志中看出是在[email protected]发生的奔溃,奔溃地址为0000000000006a7c。最后问题暴露在ImwManager.cpp中的第246行。查看对应的源代码,free函数回收时发生了错误。

2024-12-09 23:12:43 476

原创 RK3568平台(调试篇)vmlinux进行反汇编分析

可以看到unhandled_signal在/kernel-5.10/kernel/signal.c:560行。这里我们选择的是unhandled_signal,他的寄存器地址是ffffffc010182900。1.在kernel-6.1目录下找到编译后产生的 vmlinux。4.利用llvm-addr2line来找到调用的地方。3.debug.s文件中搜索想要反编译的函数。生成 debug.s。

2024-12-09 22:49:48 585

空空如也

空空如也

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

TA关注的人

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