自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ip0417的博客

个人知识整理

  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 RK3588 HDMI转DVI黑屏问题排查与解决

摘要:RK3588开发板通过HDMI转DVI转接器连接显示器时出现冷启动黑屏问题,但热插拔后正常。排查发现DVI转接器的I2C总线初始化比HPD信号慢1-2秒,导致系统启动时读取EDID失败。最终通过保留设备树中的force-output属性(删除/delete-property/force-output行),强制标记HDMI为已连接状态,完美解决问题。该方案不影响热插拔和多屏切换功能,说明理解硬件时序差异和善用现有设备树机制的重要性。

2026-02-12 15:14:04 812

原创 【RK3588 Android12】等待队列

Linux内核等待队列是实现进程阻塞和唤醒的基础机制,广泛应用于驱动开发中的阻塞I/O操作。本文详细介绍了等待队列的工作原理、API接口和使用场景,包括初始化、等待函数(wait_event系列)、唤醒函数(wake_up系列)以及手动操作方法。通过多个代码示例展示了如何实现基本阻塞读取、超时等待、非阻塞模式支持等功能,并提供了环形缓冲区的完整实现。文章还总结了使用注意事项(如条件检查和锁的使用)、调试方法,强调了等待队列在实现阻塞I/O中的重要性。这些内容为Linux驱动开发者提供了实用的技术参考。

2026-02-10 14:48:26 321

原创 【RK3588 Android12】Tasklet与软中断

本文详细介绍了Linux内核中Tasklet和软中断(Softirq)两种中断下半部处理机制。主要内容包括:1)中断处理机制分为上半部(快速响应)和下半部(延迟处理);2)软中断是内核级延迟机制,包含多种预定义类型,具有高并发性;3)Tasklet基于软中断实现,提供简化接口,执行串行化但更安全;4)详细说明了两者的注册、调度和操作方法,并给出完整示例代码;5)介绍了高级应用场景、性能优化技巧和调试方法;6)总结了常见问题解决方案和最佳实践选择建议。这两种机制适用于不同的中断处理场景,开发者应根据具体需求选

2026-02-10 14:47:13 64

原创 【RK3588 Android12】RCU机制

本文详细介绍了Linux内核中的RCU(Read-Copy Update)同步机制。RCU通过无锁读取和延迟释放的特性,特别适合读多写少的场景(读写比例>10:1),其读操作性能可达传统锁机制的30倍。文章系统讲解了RCU原理,包括读者无锁访问、写者复制更新、宽限期等待等核心机制,并提供了详细的API使用说明和内存屏障注意事项。通过设备管理驱动和链表/指针保护的完整示例,展示了RCU在RK3588驱动开发中的实际应用。同时指出了适用场景和常见错误,如读临界区内不能睡眠、必须使用专用API等。RCU在保

2026-02-01 09:56:05 423

原创 【RK3588 Android12】printk调试方法

本文详细介绍了Linux内核调试工具printk的使用方法。主要内容包括:1) 8种日志级别定义和使用;2) printk、dev_xxx和pr_xxx三种输出方式;3) 调试宏定义技巧,包括编译时和运行时控制;4) dump_stack函数调用栈打印;5) 日志查看方法(dmesg/logcat);6) 日志级别控制;7) 动态调试技术;8) 常见问题解决方法。通过合理使用这些调试技巧,可以显著提高内核开发效率。文章为Linux内核开发者提供了全面的printk使用指南。

2026-02-01 09:55:15 116

原创 【RK3588 Android12】Platform总线驱动

本文详细介绍了Linux内核中Platform总线驱动的开发方法。Platform总线作为虚拟总线,通过设备树compatible属性实现设备与驱动匹配。文章阐述了设备树配置方法,包括GPIO和pinctrl设置,并给出了最小驱动框架和GPIO驱动示例。同时介绍了常用API如设备树解析和GPIO操作,以及调试方法和常见问题排查。Platform驱动是Linux内核最常用的驱动框架,本文内容为开发此类驱动提供了实用指导。

2026-01-28 08:20:54 89

原创 【RK3588 Android12】Kernel Makefile与Kconfig

本文介绍了RK3588 Android12平台下Kernel Makefile和Kconfig的使用方法。主要内容包括:1) 内核编译系统概述,包括文件分类和编译流程;2) Makefile语法详解,包括目标定义、多文件模块、目录递归等;3) Kconfig语法说明,涵盖config条目、数据类型、菜单和选择等;4) 添加新驱动模块的完整流程;5) 内核配置与编译选项设置;6) 实战示例演示LED驱动添加;7) 调试技巧和常见问题解决方法。文章为RK3588平台内核开发提供了实用指南。

2026-01-28 08:20:08 62

原创 【RK3588 Android12】GPIO控制

本文详细介绍了RK3588平台的GPIO配置与使用方法。主要内容包括:1)GPIO编号计算公式,通过bank、group和pin计算具体编号;2)设备树配置方法,包括GPIO节点和pinctrl设置;3)驱动层开发框架,包含GPIO申请、方向设置和读写操作;4)应用层控制方式,包括sysfs接口和C语言编程;5)调试技巧和常见问题解决方法。文章提供了完整的代码示例,涵盖了从硬件配置到软件开发的完整流程,是RK3588平台GPIO开发的实用指南。

2026-01-27 15:02:18 237

原创 【RK3588 Android12】字符设备驱动开发

本文详细介绍了Linux字符设备驱动的开发流程,包括设备号分配、cdev结构注册、file_operations实现等核心内容。重点讲解了字符设备驱动框架的五大步骤:设备号分配、cdev初始化、文件操作实现、设备注册和节点创建。通过一个完整的字符设备驱动示例,展示了open/read/write/ioctl等基本操作的实现方法,并介绍了poll/select支持、misc简化设备以及调试技巧。文章还总结了设备节点不存在、权限问题等常见故障的解决方法。字符设备驱动是Linux驱动开发的基础,掌握这些技术对后续

2026-01-27 15:01:31 248

原创 【RK3588 Android12】硬件中断IRQ

本文介绍了RK3588 Android12平台下硬件中断的使用方法。主要内容包括:1. 中断基础知识,包括GIC中断控制器分类和触发方式;2. 中断API函数详解,如request_irq()等核心函数;3. GPIO中断示例,展示设备树配置和驱动代码实现;4. 线程化中断处理方式;5. 中断上下半部划分原则;6. 调试验证方法;7. 常见问题解决方案;8. RK3588 GPIO中断号计算方法。文章提供了完整的代码示例和调试技巧,适用于RK3588平台的嵌入式开发。

2026-01-26 21:14:32 978

原创 【RK3588 Android12】延时工作队列

本文详细介绍了Linux内核中延时工作队列(Delayed Workqueue)在RK3588 Android12平台上的应用。延时工作队列允许在指定时间后执行任务,与普通工作队列相比具有延迟执行的特性。文章从基础概念入手,对比了两种工作队列的区别,详细解析了delayed_work结构体。重点阐述了初始化、调度和取消延时工作的基本方法,包括静态/动态初始化、三种调度方式以及取消和修改延时时间的API。通过三个完整示例展示了周期性任务、超时检测和状态机实现等典型应用场景。此外还介绍了自适应延迟和多阶段任务等

2026-01-26 21:13:22 90

原创 【RK3588 Android12】同步机制选型指南

Linux内核提供了多种同步机制,选择合适的同步机制对驱动性能和稳定性至关重要。本文系统介绍各种同步机制的特点、适用场景和选型决策。优先考虑:能否睡眠、是否在中断上下文性能考虑:临界区长度、读写比例简单优先:能用原子操作就不用锁避免过度:不要过度使用锁测试验证:实际测试性能和正确性选型口诀简单计数用原子中断场景用自旋可睡眠用互斥读多写少用RCU资源计数用信号量。

2026-01-23 10:21:33 1014

原创 【RK3588 Android12】设备树DTS进阶

本文深入解析设备树(DTS)的高级特性,涵盖overlay机制、pinctrl配置、时钟管理、中断控制等核心内容。重点介绍了设备树overlay的动态加载方式、引脚复用与状态配置方法、时钟树结构与频率设置技巧,以及GIC中断控制器配置。同时详细阐述了电源域管理、DMA控制器使用、内存节点定义等关键技术,并提供了实用的调试命令和最佳实践建议。通过系统性地掌握这些高级特性,开发者能够更灵活地配置硬件资源,有效提升嵌入式系统开发效率。文章还包含常见问题解决方法,为实际开发提供参考指南。

2026-01-19 10:39:59 1034

原创 【RK3588 Android12】设备树DTS基础

本文介绍了RK3588 Android12平台下设备树的使用方法,包括设备树的基本概念、文件类型和语法结构。详细讲解了GPIO、中断、I2C等常用节点的配置方式,以及设备树的引用、覆盖和Pinctrl引脚配置。文章还提供了设备树编译调试技巧和常见问题排查方法,并给出实战示例说明如何在驱动中解析设备树。最后总结了节点不生效、引脚冲突等常见问题的解决方案,为RK3588平台开发提供了实用参考。

2026-01-19 10:38:32 248

原创 【RK3588 Android12】内核定时器

本文详细介绍了Linux内核中两种定时器机制的使用方法。普通定时器timer基于jiffies实现,精度为毫秒级,适用于一般定时任务,通过timer_list结构体和相关API实现。高精度定时器hrtimer基于红黑树实现,精度可达纳秒级,适用于高精度定时需求,使用hrtimer结构体和时钟源类型。文章对比了两者的特性差异,并提供了完整驱动示例。注意事项包括回调函数不能休眠、长时间任务应使用工作队列等。两种定时器为驱动开发提供了灵活的定时解决方案,开发者可根据精度需求选择适合的方案。

2026-01-18 21:32:41 103

原创 【RK3588 Android12】工作队列Workqueue

本文介绍了RK3588 Android12平台下Linux工作队列(Workqueue)的使用方法。工作队列是内核中实现延迟执行的重要机制,适合处理耗时操作或中断下半部任务。文章详细讲解了工作队列与定时器的区别、核心API函数、普通工作队列和延时工作队列的实现示例,并提供了调试方法和常见问题解决方案。通过实际应用场景展示,说明工作队列在中断处理和周期性任务中的典型用法,为RK3588平台开发提供了实用参考。

2026-01-18 21:31:41 87

原创 【RK3588 Android12】高精度定时器hrtimer

本文详细介绍了Linux内核中的高精度定时器hrtimer。相比传统低精度定时器(timer),hrtimer提供纳秒级精度,采用红黑树算法实现,适用于PWM模拟、精确采样等场景。文章对比了两种定时器的差异,详细解析了hrtimer的API使用方法,包括初始化、时间设置、启动/取消等操作,并提供了基本使用模板、平台驱动集成和GPIO模拟PWM等实用示例。同时指出了hrtimer在中断上下文执行、精度限制等方面的注意事项,以及调试方法和常见问题解决方案。hrtimer为时间敏感型应用提供了高精度定时支持,但使

2026-01-17 11:01:58 489

原创 【RK3588 Android12】SDK源码下载与编译

摘要:本文详细介绍了RK3588 Android12 SDK的开发环境配置与编译流程。主要内容包括:SDK获取方式(官方渠道/100GB+大小)、目录结构解析、Ubuntu环境配置(JDK8/依赖包安装)、完整编译方法(./build.sh一键编译或分步编译U-Boot/Kernel/Android)、模块编译技巧(mm/mmm命令)以及常见问题排查方案(内存不足/ninja错误等)。该SDK基于Linux 5.10内核和Android 12系统,适用于RK3588芯片开发,推荐使用8核CPU/32GB内存

2026-01-17 11:00:08 592 1

原创 【RK3588 Android12】ADB调试环境配置

ADB (Android Debug Bridge) 是Android开发调试的核心工具,提供了设备与PC之间的通信桥梁。本文详细介绍RK3588 Android12平台的ADB配置、连接方式、权限获取及常见问题解决。

2026-01-15 09:59:40 388

原创 【RK3588 Android12】开发效率提升技巧

本文介绍了RK3588 Android 12开发中的效率提升技巧,主要包括:1)编译加速方法(ccache配置、增量编译和并行编译优化);2)VSCode开发环境配置(必装插件、代码跳转和任务配置);3)快捷编译脚本和自动化测试脚本;4)日志分析工具和性能检查脚本;5)Git工作流优化和远程开发配置。通过合理使用这些技巧,可以显著缩短开发周期,提升50%以上的开发效率。

2026-01-15 09:56:50 98

原创 【RK3588 Android12】固件烧录与启动

本文详细介绍了RK3588开发板的固件烧录方法与调试技巧,涵盖Windows和Linux平台下的多种烧录工具(RKDevTool、upgrade_tool等),包括Loader、Maskrom等烧录模式的进入方式,以及完整固件和分区烧录的具体操作步骤。同时提供了串口调试、ADB连接等实用技巧,并针对常见启动问题给出了排查方法。文章还涉及SD卡启动配置和量产烧录方案,为开发者提供了全面的RK3588开发板烧录指导。

2026-01-14 22:05:57 277

原创 【RK3588 Android12】专栏导读:从入门到独立开发的完整路径

本文是一篇RK3588开发实战专栏介绍,针对嵌入式开发者常见痛点提供系统化解决方案。专栏包含95篇实战导向文章,涵盖环境搭建、内核驱动、外设开发、系统定制等8大模块,提供30000+行可复用代码和10个完整项目案例。特色包括:问题导向的排查方法、真实项目经验分享、持续更新承诺。适合RK3588开发者、嵌入式转Android人员及快速出产品的团队,定价149元(原价199元),提供7天无理由退款。通过16周系统学习,帮助开发者掌握独立开发产品的能力。

2026-01-14 22:01:41 262

原创 RK3588 Camera HAL3 适配 LT6911UXE HDMI转MIPI芯片输出BGR888格式——解决大屏显示图像发灰问题

在 RK3588 平台上使用 LT6911UXE(HDMI转MIPI)芯片进行视频采集时,遇到了一个棘手的问题:当视频帧经过 RGA 从 BGR888 转换为 NV12 格式后,在大屏上显示时图像出现明显发灰现象。本文记录了问题的排查过程和最终解决方案。Camera HAL3 全链路支持 BGR888 格式RGA 颜色空间转换使用正确的 BT.601 Full Range 模式内核驱动强制 LT6911UXE 输出 BGR 格式设备树配置启用 RGB 固件模式。

2026-01-12 16:55:23 957

原创 RK3588 Android 平台 HDMI-IN 状态频繁跳变(抖动)问题排查与修复

在基于 RK3588 的 Android 12 项目调试中,遇到了 HDMI-IN 接入信号源时,CameraService 频繁上报设备状态变化(PRESENT/NOT_PRESENT 瞬间切换)的问题。这种状态“抖动”导致上层 APP 无法稳定预览,甚至引发 `Unknown camera ID` 错误。本文记录了从日志分析、源码追踪到最终在 Framework 层与 Kernel 驱动层双管齐下的修复过程。

2025-12-19 11:48:33 898

原创 Android 13.0 双屏时触摸失效问题排查与修复

摘要:本文记录了RK3588 Android12开发板上主屏触摸失效问题的排查与解决过程。通过分析发现,USB触摸设备被错误关联到辅屏(displayId=3)而非主屏(displayId=0)。解决方案是修改TouchInputMapper.cpp,强制触摸设备使用INTERNAL viewport(主屏),并保持设备在viewport不活跃时仍启用。该修改涉及约40行代码,有效解决了多显示器环境下触摸设备错误映射的问题,同时提供了详细的调试方法和注意事项。

2025-12-02 21:22:22 350

原创 RK3588 HDMI 休眠唤醒性能优化实战:从 6 秒到 100 毫秒的极致优化

记录 RK3588 平台 HDMI 休眠唤醒优化全过程,通过内核 DRM DPMS 优化,将性能从 6 秒提升到 100 毫秒,提升 98%。包含完整代码、测试方法和问题排查。

2025-12-01 18:10:09 875

原创 Android 13.0 MediaProjection 被系统自动停止问题排查与解决

摘要:在Android 13定制ROM上,RTSP直播应用使用MediaProjection进行屏幕录制时,会被H.323视频会议应用意外中断。通过分析发现,根本原因是系统检测到前台服务类型变化后自动停止了MediaProjection。解决方案包括应用层保持FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION前台服务,或系统层添加包名白名单机制修改MediaProjectionManagerService.java。关键词:Android、MediaProjection、RTS

2025-11-26 17:10:22 449

原创 Android Launcher 开发踩坑:USB 设备监听导致文件管理器无法识别 U 盘

摘要:本文分析了Android Launcher在监听USB设备时导致系统文件管理器无法识别U盘的问题。原实现通过libaums库直接访问USB设备导致独占占用,解决方案改为监听系统存储挂载广播(ACTION_MEDIA_MOUNTED等),从系统分配的挂载路径访问文件。关键改进包括:修改广播监听添加file协议,延迟检测确保挂载完成,使用标准File API替代第三方库。该方案避免了设备抢占问题,使Launcher和文件管理器能同时正常访问U盘,提高了系统兼容性。

2025-11-25 15:36:40 1174

原创 Android TV 画中画(PiP)功能完整实现:从启用到触摸交互优化

摘要:本文详细介绍了在AndroidTV智能会议设备上实现画中画(PiP)功能的完整解决方案。针对PiP模式被系统禁用和窗口触摸无响应两大核心问题,提出了系统级修复方案:1)通过修改ActivityClientController.java恢复PiP功能入口;2)采用OverlayView透明拦截层配合PipTouchHandler实现触摸事件处理,通过TYPE_APPLICATION_OVERLAY窗口类型确保事件拦截,并实现60fps的实时位置同步。方案涉及WindowManager配置、坐标转换、物理

2025-11-24 09:16:23 89

原创 Android 13.0 系统级签名伪装:解决 MicroG 无法运行 YouTube 的问题

MicroG提供与 GMS 兼容的 API 接口体积更小,隐私保护更好无需 Google 授权即可使用但需要签名伪装才能被应用识别为真正的 GMS机制作用实现方式白名单限制可伪装的包系统资源配置权限检查防止滥用SDK 版本限制兼容性保护资源读取动态签名从 APK 读取 fake_signature通过这次系统级签名伪装的完善,我们成功解决了 MicroG 无法运行 YouTube 的问题。

2025-11-23 12:24:40 2368

原创 编程学前班系列-04-计算机如何存储文字

Unicode不是一个具体的编码,而是一个概念/标准。UTF-7UTF-8⭐(最常用)UTF-16UTF-32。

2025-11-23 12:23:05 677

原创 Android 13.0 USB 麦克风音频采集优化:解决延时、杂音和无声问题

摘要:本文针对Android智能会议设备中USB麦克风存在的三大问题(录音延时、概率性杂音和无声)进行了深入分析和优化。通过预填充静音帧降低90%启动延时,分离采集/播放互斥锁消除杂音,采用持久化配置解决无声问题,并新增状态通知机制提升用户体验。优化后测试显示:录音延时从1200-2000ms降至100-200ms,故障率降至0%,CPU占用降低30%。该方案适用于各类USB音频设备和视频会议系统,为低延时音频采集提供了可靠解决方案。

2025-11-22 16:41:31 224

原创 Android 13.0 无线投屏图像拉伸问题的完美解决方案

Android智能会议设备无线投屏画面变形问题的解决方案 摘要:针对Android设备无线投屏时出现的画面拉伸变形问题,本文提出了一种基于Letterbox模式的优化方案。通过分析发现,原有RGA硬件加速模块采用强制填满(Fill)模式导致宽高比失调。新方案采用保持源图像宽高比、居中显示并填充黑边的策略,有效解决了画面变形问题。关键技术包括精确计算显示区域、YUV格式对齐处理、硬件加速优化等。该方案适用于各类需要保持原始比例的图像显示场景,在保证画面完整性的同时提升了用户体验。

2025-11-22 16:26:35 96

原创 编程学前班系列-03-计算机的存储单位

摘要:100M宽带实际下载速度约10MB/s,这源于计算机存储单位的差异。基本单位bit(b)是最小数据单元,8bit=1Byte(B)。网络速度用Mb/s表示,而下载速度显示MB/s,换算公式为Mb/s÷8=MB/s。存储单位间以1024进制换算(如1GB=1024MB),这是由计算机二进制特性决定的。理解大小写单位区分(b=bit,B=Byte)是掌握计算机存储概念的关键。(149字)

2025-11-21 13:13:55 790

原创 编程学前班系列-02-什么是二进制

文章摘要:本文从原始人狩猎计数出发,生动讲解进制概念。通过手指比划、符号演变,揭示十进制源于人类十根手指的特点。类比八爪鱼用八进制,引出计算机使用二进制(0和1)的原因。对比不同进制的表示方法,总结C/C++中区分进制的前缀规则(0、0b、0x)。强调进制本质是计数习惯的选择,理解这一点对编程基础至关重要。全文以生活化场景阐释抽象概念,帮助读者建立对二进制等进制的直观认知。(149字)

2025-11-20 15:49:20 585

原创 编程学前班系列-01-为什么C++这么难学

摘要:C++学习困难源于传统教学的误区。看似简单的"Hello World"程序实际包含了大量基础知识(预编译、命名空间、流操作等),造成初学者认知断层。真正的核心问题在于缺少计算机基础铺垫:二进制、内存机制、字符编码等。建议先掌握这些底层概念,才能建立正确的编程思维。改变填鸭式教学方法,循序渐进地打好基础,是解决C++学习难题的关键。

2025-11-20 15:47:02 283

原创 Android13.0 4K输出部分APP显示异常的问题解决

原因是分辨率设置成了4K,但是部分APP没有缩放成4K。

2024-10-21 09:38:11 536

原创 Android13.0 使用MediaCodec Surface+Camera2时限制编码帧率

在使用MediaCodec Surface+Camera2的方式进行硬编码时,由于没有对编码裸数据进行处理,通常编码的帧率会基于Camera的帧率,有时候会出现帧率超预期的情况。

2024-06-07 10:03:15 459

原创 Android13.0 修改应用的屏幕密度

当适配新的系统时,系统的默认dpi可能跟之前开发App时基准屏幕密度不一样,要想APP保持统一显示效果,需要对APP进行屏幕密度配置。如果应用中使用了Fragment和Dialog也进行同样的设置。一般在BaseActivity中进行如下配置。

2023-12-23 16:45:54 1703 1

原创 Android13.0 Ndk崩溃问题定位解决

opt/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line,可自己在服务器设置export变量。4、 在服务器上找到jni编译时,生成在对应obj目录的so库文件,如~/media/trunk_media/jni,对应的obj目录是~/media/trunk_media/obj/local/armeabi-v7a。

2023-12-20 22:41:33 811 1

Android MVP快速开发框架 RxJava Retrofit ViewBinding 电视TV专用

TV 深度定制:集成 Leanback UI,实现类 Netflix 丝滑海报墙。智能焦点管理,完美适配遥控器上下左右操作,拒绝光标乱飞。包含暗黑模式 UI 设计。 企业级架构:经典 MVP (Model-View-Presenter) 分层,业务逻辑清晰解耦。BaseActivity/Fragment 深度封装,一行代码处理生命周期。 硬核技术栈: 网络:Retrofit2 + OkHttp3 + Gson (预置拦截器、日志、Cookie管理) 异步:RxJava2 + RxAndroid (优雅处理线程切换) 视图:ViewBinding (官方推荐) + FragmentationX (单Activity架构) 稳健基建:自动管理 RxJava 订阅 (AutoDispose),彻底告别内存泄漏,低配设备也能流畅运行。

2025-12-11

空空如也

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

TA关注的人

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