自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MTK(camera篇)驱动层上电时序分析

本文分析了MTK平台Camera驱动中传感器电源管理机制。核心文件imgsensor_hw.c通过宏定义IMGSENSOR_HW_SENSOR_MAX_NUM(默认为8)限制最大上电传感器数量。主要流程包括:1)初始化硬件控制设备;2)通过imgsensor_custom_config数组建立传感器引脚与硬件设备的映射关系;3)从设备树读取传感器使能信息。电源管理函数imgsensor_hw_power_sequence根据预定义序列控制各引脚状态和时序,通过硬件设备的set函数完成具体操作,并处理相应延迟

2025-12-19 23:52:42 107

原创 MTK(camera篇)驱动层设置相机旋转180度

摘要:传感器数据手册展示了通过寄存器0x0101[1:0]控制图像输出的四种模式:正常模式(00)、水平镜像(01)、垂直翻转(10)以及水平镜像+垂直翻转(11)。代码控制路径位于kernel-4.19驱动目录下,具体实现文件为cxt_gc05a2_mipi_raw。

2025-12-19 17:48:07 288

原创 MTK (camera篇)驱动层sensor代码解析

本文介绍了MTK平台下传感器驱动的接口实现方案。主要内容包括:1) 通过SENSOR_FUNCTION_STRUCT结构体实现标准驱动接口,包含open、get_info等核心函数;2) imgsensor_info_struct结构体定义传感器参数,包括分辨率、帧率等关键配置;3) 详细分析了open函数的传感器ID探测机制和控制函数的模式切换逻辑;4) 阐述了帧率设置算法,通过调整帧长度和虚拟行数实现动态帧率控制;5) 介绍了传感器信息获取接口,包括时钟配置、MIPI参数等关键信息的传递。该方案实现了完

2025-12-19 16:20:48 42

原创 MTK(camera篇)Camera整体点亮

本文介绍了在MTK平台上添加新Camera Sensor的驱动开发流程。主要内容包括:1)MTK Camera采用HAL3架构,驱动层主要负责sensor电源控制和寄存器操作;2)详细说明了添加新sensor需要在多个文件中进行的修改,包括设备树配置、内核头文件、驱动列表、电源序列等;3)特别指出需要配置I2C地址表,并导入tuning文件和metadata文件以完善ISP处理流程。文章提供了完整的文件修改清单,涵盖了从内核层到HAL层的完整开发过程,为MTK平台Camera Sensor驱动开发提供了具体

2025-12-17 15:34:14 190

原创 MTK(系统篇) 添加一个config宏用于控制

本文介绍了Linux内核开发的四个关键步骤:1)在xxx_deconfig文件中添加预定义宏;2)通过Kconfig配置宏定义;3)在Makefile中实现宏控制;4)在源代码中添加条件判断。这些步骤共同构成了Linux内核模块开发中宏定义和条件编译的标准流程,确保代码的可配置性和可移植性。

2025-12-17 15:02:42 35

原创 MTK(系统篇)user版本无法使用setenforce 0命令关闭selinux权限

该宏CONFIG_SECURITY_SELINUX-DEVELOP用于开启SELinux子系统的开发调试功能,包括详细日志输出、策略调试接口等,便于开发者分析问题。启用后会带来性能开销和安全风险,因此生产环境应保持关闭状态,仅建议在开发调试阶段使用。

2025-12-13 22:24:12 67

原创 MTK(基础篇)设备树的查看方式

MTK设备树文件主要位于kernel-4.19/arch/arm/boot/dts目录下,其中camera相关配置集中在cust_mt6765_camera.dtsi文件中。虽然设备树看似分散,但实际修改主要在一个dtsi文件中完成。编译后会在out目录生成总的设备树文件,便于查看和管理。

2025-12-13 21:14:33 172

原创 MTK(基础篇)硬件框架和电源树

2025-12-13 21:02:36 71

原创 MTK(基础篇)ROM烧录以及分区的作用

本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简

2025-12-13 20:52:58 299

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

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

2025-03-15 16:44:50 395

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

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

2025-03-11 22:18:33 861

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

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

2025-03-11 21:50:51 862

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

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

2025-03-08 22:43:51 624

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

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

2025-03-08 17:05:47 801

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

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

2025-03-08 16:10:51 685

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

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

2025-03-06 23:49:14 365

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

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

2025-03-05 22:46:51 270

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

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

2025-03-04 23:22:50 1156

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

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

2025-03-04 22:51:59 1280

原创 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 1103

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

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

2025-02-23 16:16:39 378

原创 C语言 关键字volatile作用

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

2025-02-13 00:36:39 487

原创 Android 系统面试问题

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

2025-02-11 23:34:41 1299

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

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

2025-02-11 22:27:58 2104

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

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

2025-02-07 23:15:14 1486 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 579

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

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

2025-01-17 22:07:21 356

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

硬件HP_MUTE已强制拉低。

2025-01-16 23:14:22 803

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

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

2025-01-16 22:38:34 1193

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

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

2025-01-11 01:17:27 216

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

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

2025-01-09 23:40:03 123

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

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

2025-01-09 23:09:10 400

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

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

2025-01-03 23:16:21 203

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

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

2025-01-01 13:52:54 259

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

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

2024-12-30 22:10:03 923

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

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

2024-12-29 20:26:24 196

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

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

2024-12-24 00:19:28 233

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

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

2024-12-19 23:19:49 328

原创 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 265

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

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

2024-12-17 00:06:51 416

空空如也

空空如也

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

TA关注的人

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