自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 全志T507配置GPIO失败问题排查

本文记录了一个LCD适配过程中GPIO配置问题的排查过程。开发者按照全志标准接口配置PD28为输出高电平模式,但GPIO子系统显示仍为输入模式。通过分析设备树解析流程和驱动代码,发现寄存器配置已生效但GPIO子系统缓存未更新。最终通过在disp_sys_gpio_request函数中主动更新GPIO状态解决问题,并用示波器验证实际电平正确。关键结论:1)直接寄存器操作会绕过GPIO子系统缓存;2)硬件调试必须用示波器验证。整个过程展示了Linux GPIO子系统缓存机制与实际硬件状态可能不一致的典型案例。

2026-06-05 11:19:44 183

原创 BSP 全志T507 LCD适配

本文记录了全志T507公版适配LVDS屏幕时遇到的问题及解决方法。主要遇到屏幕倒转和点触不精准两个问题:屏幕倒转通过修改ctp_exchange_x_y_flag参数解决;点触不精准问题是由于LCD的HBP参数过小导致画面偏左,通过调整HBP和HFP参数使画面居中。文章详细解释了LCD绘图相关的HSYNC、VSYNC、HBP、HFP等概念及其在全志配置中的对应关系,最终通过计算调整参数解决了显示偏移问题。

2026-05-12 09:53:02 350

原创 Android 10开机拉起指定的应用

摘要:本文探讨了Android机顶盒开机自启应用的实现方案调整。在Android 9系统中,通过修改AMS的getHomeIntent方法,直接指定目标应用包名和类名即可实现开机自启。但在Android 10系统中,由于新增了user_unlock保护机制,原有方案会导致黑屏问题。作者提出的解决方案是通过UserManagerInternal服务检测用户解锁状态:当设备未解锁时,让系统正常启动fallbackhome完成初始化流程;当检测到设备已解锁(user_unlocked)时,再通过系统属性获取配置的

2026-05-06 11:06:44 255

原创 Amlogic红外识别驱动

本文深入分析了Amlogic红外遥控驱动实现,重点围绕NEC协议展开。驱动采用中断+定时器+input子系统架构,通过硬件解码获取红外信号。核心亮点包括: 使用柔性数组动态分配键值映射表内存,实现高效存储 联合体设计巧妙处理32位和16位数据的转换 二分查找优化键值查询效率 设备树配置实现多协议支持 驱动通过中断获取信号,定时器检测按键释放,最终通过input子系统上报事件。分析展示了Linux驱动中数据结构优化和设备树适配的优秀实践。

2026-04-03 16:08:08 442 1

原创 Linux驱动 GPIO子系统

本文介绍了Linux内核中GPIO子系统的常用API接口。主要内容包括:1) 传统GPIO操作函数如gpio_request、gpio_direction_output等;2) 新版gpiod_系列接口,包括devm_gpiod_get、gpiod_set_value等;3) GPIO中断和配置相关函数;4) 设备树配置示例和驱动实现方法。文章对比了新旧API的差异,指出新版API具有自动处理有效电平、简化配置等优势。最后强调GPIO子系统负责引脚电平特性,而pinctrl管理引脚的电气特性,两者在Linu

2026-03-09 17:30:58 467

原创 Linux Pinctrl子系统

摘要:Linux内核中的Pinctrl子系统负责芯片引脚的管理与配置,主要解决引脚复用和配置问题。其核心概念包括引脚(Pin)、引脚组(PinGroup)、功能(Function)和配置(PinConfiguration)。Pinctrl分为核心层、控制器驱动层和使用者三层架构,通过设备树(DTS)实现引脚配置的声明与使用。调试时可查看/sys/kernel/debug/pinctrl/下的pinmux-pins和pinconf-pins文件获取引脚状态和电气特性配置信息。该系统实现了硬件描述与驱动代码的解

2026-03-09 09:42:02 445

原创 Linux 设备树插件(Device Tree Overlays)

摘要:本文介绍了Linux 4.4引入的动态设备树(设备树插件)功能,它允许在不重新编译整个设备树的情况下,通过"补丁"方式动态修改设备树。文章详细说明了两种设备树插件格式(标准格式和简化格式),并给出了添加LED节点的具体示例,包括修改pio配置和关闭原有leds节点。最后讲解了编译流程(修改Makefile、单独编译设备树)和部署方法(将dtbo文件放入boot分区并修改uEnv.txt)。该功能为硬件调试提供了便利,只需针对特定设备编写插件即可实现设备树更新。

2026-03-05 15:14:19 682

原创 如何编译和加载设备树

本文介绍了在野火全志H618平台上的编译流程:1)在完成内核编译后,通过指定参数单独编译设备树(dtb);2)在sdk目录下执行build.sh脚本选择更新u-boot,或使用命令行参数编译;3)通过安装deb包和nand-sata-install命令更新u-boot;4)最后通过检查/proc/device-tree目录验证设备树节点更新是否成功。文中以添加wzb_led节点为例,展示了完整的编译和验证过程。

2026-03-05 15:09:08 70

原创 使用平台设备驱动来完成点亮LED的实验

本文介绍了如何使用Linux平台设备模型改造LED驱动代码,适配野火全志鲁班猫A1开发板。主要内容包括:1) 平台设备注册,通过DEFINE_RES_MEM宏定义GPIO寄存器资源;2) 平台驱动实现,利用devm_kzalloc自动管理内存,使用devm_ioremap映射寄存器地址;3) 驱动与设备的匹配机制,通过id_table实现自动匹配;4) 字符设备操作接口实现,包括open、write等操作函数。文章详细说明了平台设备和驱动的初始化流程,并提供了完整的驱动源码。该方案实现了LED设备的平台化驱

2026-03-04 09:38:54 427

原创 Linux平台设备驱动

摘要:本文介绍了Linux设备驱动模型的核心机制,通过总线、设备和驱动三部分实现代码解耦。总线作为连接桥梁,设备存储硬件信息,驱动处理硬件逻辑。该模型支持热插拔场景,通过匹配规则动态加载驱动。重点讲解了平台设备(platform_device)和驱动(platform_driver)的结构体及注册方法,包括资源管理、匹配机制等。平台总线在系统启动时自动注册,提供四种匹配方式:设备树、ACPI、id_table和字符串比较,优先级依次递减。这种模型提高了代码复用性和开发效率,适用于各类硬件场景。

2026-03-04 09:26:55 400

原创 Linux驱动 点亮LED灯

本文介绍了在Linux系统下通过字符设备驱动控制LED的实现过程。首先通过查看硬件原理图确定LED连接的GPIO引脚(PF6),并查阅芯片手册获取相关寄存器配置信息。在驱动程序中,使用ioremap将物理地址映射为虚拟地址,并通过ioread32/iowrite32函数操作寄存器。驱动实现了open、write等文件操作接口,在open中配置GPIO为输出模式,在write中通过写入'0'或'1'控制LED亮灭。实验成功实现了通过字符设备文件控制LED的功能,展示了Linux驱动开发中硬件操作的基本流程和方

2026-02-26 09:41:36 644

原创 Linux驱动 一个驱动支持多个设备

本文介绍了Linux驱动开发中实现单一驱动控制多个设备的两种方法。第一种方法通过inode结构体中的次设备号(iminor)进行区分,在open函数中使用switch-case对不同设备做处理,将设备缓冲区地址存储在file结构的private_data中。第二种方法利用container_of宏从inode的i_cdev成员获取自定义设备结构体,通过结构体中的缓冲区实现设备区分。两种方法都演示了如何注册多个设备节点,并详细说明了设备号分配、字符设备初始化和节点创建的完整流程。文章还提供了完整的驱动代码示例

2026-02-24 14:54:51 561

原创 Linux字符设备驱动

本文详细介绍了Linux字符设备驱动的实现过程。字符设备是以字节流方式顺序访问的硬件设备,通过设备文件(如/dev/ttyS1)与用户空间交互。主要内容包括:设备号的获取方式(静态分配register_chrdev_region或动态分配alloc_chrdev_region);文件操作结构体file_operations的实现;字符设备结构体cdev的初始化与注册流程。最后提供了完整的驱动代码示例,涵盖设备号分配、设备注册、节点创建等关键步骤,并说明了模块的加载和卸载方法。该驱动实现了open、relea

2026-02-14 15:13:54 604

原创 Linux驱动符号导出宏EXPORT_SYMBOL

本文介绍了Linux内核驱动中的符号共享机制。通过EXPORT_SYMBOL宏可以将变量和函数导出,供其他模块调用。测试代码展示了如何导出静态变量和函数,并在另一个模块中成功调用。文章还探讨了模块依赖关系的处理方法,包括使用modprobe命令自动加载依赖项,以及将模块放入标准目录并重建依赖关系的方法。最后验证了通过符号共享机制实现模块间调用的可行性,完成了简单的符号共享功能实现。

2026-02-11 11:22:33 329

原创 Linux驱动内核模块传参module_param

本文介绍了Linux内核模块参数传递机制。通过module_param()函数可以定义模块参数,支持多种数据类型(byte/int/bool/charp等),并设置sysfs文件权限。文章详细说明了参数传递的实现方法,包括静态参数注册和动态回调机制。通过module_param_cb()可以注册回调函数,在参数修改时执行特定操作。文中提供了完整代码示例,展示了如何定义参数、处理参数更新,并指出字符串参数传递时的注意事项。这种参数传递机制为Linux驱动开发提供了灵活的配置方式,通过sysfs接口实现用户空间

2026-02-10 16:49:14 656

原创 Linux驱动环境初始化与Hello mode

摘要:本文记录了在Ubuntu 20.04系统下为LubanCat全志H618开发板搭建Linux驱动开发环境的过程。重点解决了apt自动更新导致的锁冲突问题,通过关闭unattended-upgrades服务解决。详细描述了内核源码获取(基于野火linux-5.4.125分支)和编译流程,包括配置加载、交叉编译等步骤。通过一个简单的HelloWorld驱动模块示例,展示了驱动代码结构、Makefile编写及模块加载/卸载测试方法。文章最后指出开发环境搭建是主要难点,并肯定了野火开发板配套资料的完整性。

2026-02-09 16:16:14 713

原创 LangChain安装与第一个Hello Word输出

System.Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "你的key哦", [System.EnvironmentVariableTarget]::User)这里deepseek的收费还是很便宜的,我试了2次,收了我0.001元不到,当然也可能和我这个操作的token使用不大有关,是一个很简单的api调用,所以收费很便宜。充钱之后,打印不会报错了,然后也能看到相关的打印,他准确的将我手动输入的英语翻译成了中文。

2025-11-12 11:02:57 1214

原创 C语言#号的作用

本文总结了C语言中#符号的三种特殊用法:1)单个#可将宏变量转为字符串,但仅适用于常量;2)双##用于宏变量拼接;3)#@可将宏变量转为字符。这些技巧在日常编码中较为少见,属于C语言的冷门知识点。

2025-11-11 14:22:15 475

原创 Android 双击菜单键仅发送广播

本文针对机顶盒菜单键需求,提出了一种单击发送键值、双击仅发送广播的实现方案。设计通过拦截原始按键事件并统一销毁,利用定时器区分单双击:首次按键启动350ms延时,若超时则模拟发送单击事件,若检测到第二次按键则发送双击广播。关键实现包括:1)在PhoneWindowManager中拦截按键并设置标志位;2)使用Handler延时消息判断双击;3)通过injectInputEvent注入模拟按键并添加特殊标记避免重复处理。该方案有效解决了Android系统原生无法直接区分单双击的问题,并通过事件转换确保应用兼容

2025-11-11 10:55:38 772

原创 快速按待机按键出现设备死锁问题

摘要:机顶盒设备在快速按待机唤醒键时出现系统挂死,分析日志发现死锁问题。死锁涉及WMS进程和AMS系统服务,形成Binder_4、Binder_2和InputReader间的环形等待。问题根源在于PMS模块1099行的代码设计缺陷,该处不必要地持锁执行发送广播操作。解决方案为优化加锁逻辑,仅在wakeUpNoUpdateLocked函数需要时持锁,避免无关操作占用锁资源,从而解决死锁问题。

2025-11-10 17:59:39 916

原创 修改Android烧录包和升级包内的某个文件权限

摘要:针对机顶盒需求要求修改system/etc/dhclient*文件权限从751改为755的问题,可通过修改Android系统配置文件system/core/libcutils/fs_config.cpp实现。该文件维护了系统文件权限列表,只需在列表中修改dhclient对应的权限值为755,或参照格式新增条目。修改后重新编译SDK即可使目标文件获得所需权限。此方法适用于系统预置文件权限的批量修改,相比手动修改更加规范高效。

2025-11-10 17:41:21 408

原创 Jni的使用方法

Jni我的理解他其实就是一个跨环境的调用工具,Java和C通过他来完成信息的交互一般来说,使用Jni他有静态注册和动态注册两种方法,所以其实看他的描述来看动态注册会是主流.但我们就学习来说都学了比较好。

2025-11-01 22:34:27 1202

原创 JNI native调用java层梳理

本文介绍了JNI中native层调用Java方法的实现过程。主要内容包括:1)获取和修改Java静态成员变量;2)修改Java类成员变量;3)调用Java静态方法;4)调用Java成员方法。核心流程包括通过JNIEnv获取类引用、查找方法/字段ID、执行方法调用或字段操作等步骤,并强调内存管理和异常处理的重要性。文中提供了完整的代码示例,展示了如何在native代码中操作Java对象,包括参数传递、字符串转换等常见场景。最后总结了动态注册JNI方法的模板,为native与Java交互提供了实践指导。

2025-11-01 22:17:38 374

原创 Android 问题排查指南

本文总结了Android机顶盒开发中的问题定位方法:1) 通过修改Toast相关代码暴露发布者信息;2) 分析Window层级确定弹窗来源;3) 在SettingsProvider中添加调用者PID记录;4) 利用uboot保存重启原因;5) 通过init监控属性修改记录。这些方法有效解决了Toast、弹窗、设置变更、异常重启和属性修改等问题的溯源难题,大幅提升了调试效率。其中特别对Toast和Settings的修改实现了完整的调用链追踪,而通过uboot保存重启信息的方法避免了重复复现问题。

2025-10-23 15:34:29 728 1

原创 C盘大文件查找方法

电脑磁盘空间不足时,可以使用工具快速查找大文件。SpaceSniffer能直观显示各文件大小占比,但搜索速度较慢;相比之下,WizTree搜索更快,还能自动分类并提供可视化结果,更推荐使用。这两个工具都能帮助用户快速定位占用空间的文件,解决磁盘空间不足的问题。

2025-09-10 17:00:12 1698

原创 Android调用关系打印

Android开发中可通过堆栈打印和PID获取来追踪函数调用关系。Java中调用new Throwable()即可打印调用栈,C/C++需导入CallStack库并调用相关方法。获取调用者PID在Java中使用Binder.getCallingPid(),在C中通过IPCThreadState实现。这些方法可帮助开发者清晰了解函数调用流程及调用者信息,便于调试和问题排查。

2025-09-10 16:38:51 353

原创 在驱动内增加一个可操作GPIO的节点

本文介绍了在Linux驱动中创建可读写类属性节点的方法。通过CLASS_ATTR_RW宏定义属性,使用class_create和class_create_file函数创建类和属性文件。同时需要实现show和store函数,分别处理用户空间的读取和写入操作。show函数返回"hello world"字符串,store函数则接收用户输入。这种方法可以在用户空间通过文件操作(如cat/echo)与内核驱动交互,适用于需要通过驱动节点控制硬件(如GPIO)的项目需求。

2025-09-10 15:36:00 225

原创 通过dumpsys获取广播相关信息的方法

文章摘要:本文分享了Android广播调试的实用方法,包括判断应用是否收到广播(通过查看DELIVERED日志)、查询历史广播记录(使用dumpsys命令分析Historicalbroadcasts)、查看进程监听的广播(搜索Non-DataActions)、判断定向广播(检查Package参数)以及区分有序/无序广播(添加打印日志)。重点介绍了如何利用系统日志和dumpsys命令快速定位广播分发状态、耗时和接收情况,特别适用于处理广播超时、阻塞等调试场景。

2025-09-10 14:58:34 723

原创 解决在运行Android studio的模拟器时出现的无法启动的问题

首先找到自己的模拟器相关的.android文件在哪里打开之后他会跳转到这个模拟器相关的文件夹位置,但我们要的不是他,而是他的上一级目录.android跳转到这个.android目录的上一级将他放到你想要放的位置完成后需要进行环境变量的新增,如果没有进行环境变量的新增的话是找不到这个位置的直接在这里新增这一栏,完成之后保存环境变量的配置.然后进行重启Android studio操作,再次尝试之后就可以看到模拟器正常运行了起来。

2024-10-13 16:23:40 4610 2

原创 Android系统配置默认应用默认切换动画

Android系统修改默认动画效果

2023-12-08 20:20:50 1320

空空如也

空空如也

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

TA关注的人

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