自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RK3588 Android 12 适配LSM6DS3传感器(gyro部分)(基于RK input sensor HAL 框架)

本文摘要介绍了基于Rockchip HAL框架对LSM6DS3陀螺仪传感器的驱动适配工作。主要内容包括: 驱动移植部分,详细列出了LSM6DS3传感器的寄存器定义和配置参数 实现了sensor_active和sensor_init等关键函数,用于控制传感器工作状态和初始化流程 代码中包含了完整的寄存器地址定义,涵盖加速度计、陀螺仪、FIFO控制等功能模块 驱动支持416Hz采样率配置,并实现了基本的电源管理功能 (字数:148)

2026-01-08 12:22:52 34

原创 RK3588 Android 12 Sensor回调onSensorChanged流程

本文分析了Android传感器服务中数据传输的关键流程。在system_server进程中,SensorService通过HAL接口获取传感器数据后,经过处理分发给各连接的SensorEventConnection。数据通过高效的BitTube机制(基于socketpair实现)进行跨进程传输,采用非阻塞模式避免服务阻塞。应用进程通过注册文件描述符监听,在数据到达时由Looper唤醒处理。整个流程利用二进制兼容的ASensorEvent和sensors_event_t结构体,避免了数据转换开销,实现了高性能

2026-01-02 15:11:01 58

原创 RK3588 Android 12 SensorManager.registerListener

本文分析了Android 12 RK3588平台中SensorManager.registerListener的实现过程。首先检查传感器是否为单次采集模式,然后验证参数合法性并限制监听器数量不超过128个。核心逻辑在SystemSensorManager中实现,通过创建或获取SensorEventQueue来管理传感器事件,其中队列创建涉及Native层的nativeInitBaseEventQueue调用。整个注册流程最终通过JNI桥接至底层C++实现,完成传感器监听器的注册和事件队列初始化。

2026-01-01 16:59:54 70

原创 RK3588 Android 12 getSystemService的流程

本文分析了Android中getSystemService()方法的调用流程。以获取传感器服务为例,调用路径从Activity开始,经过ContextThemeWrapper和ContextWrapper,最终由ContextImpl实现

2025-12-31 21:40:39 60

原创 RK3588 Android 12 SensorDevice分析

本文分析了RK3588平台Android 12系统中SensorDevice的初始化流程。重点研究了HAL 1.0版本的SensorDevice构造过程,包括通过HIDL获取远程服务代理对象、验证HAL服务可用性等关键步骤。详细解释了hw_get_module函数如何根据模块ID加载对应的.so库文件,并介绍了同步协调器mRestartWaiter在处理HAL服务重启时的作用。文章还追踪了从框架层到HAL层的调用链路,展示了Android传感器子系统初始化的完整流程。

2025-12-29 15:00:54 52

原创 RK3588 Android 12 SensorService的启动

本文分析了RK3588平台Android 12系统中SensorService的启动过程。从SystemServer的Java层开始,通过SystemServiceManager启动SensorService,使用反射机制创建实例并调用onStart()方法。关键点在于通过startSensorServiceNative()方法进入Native层,该过程在异步线程池中执行以避免阻塞主线程。Native层中会创建SensorService实例并注册到ServiceManager。整个流程展现了Android系

2025-12-25 17:14:08 68

原创 RK3588 Android 12 适配LSM6DS3传感器(acc部分)(基于RK input sensor HAL 框架)

本文介绍了在RK3588平台上基于Android 12系统适配LSM6DS3加速度传感器的过程。主要内容包括驱动移植部分,详细说明了LSM6DS3传感器的寄存器定义和初始化流程。驱动代码实现了传感器激活控制功能,通过I2C接口配置传感器工作模式(416Hz采样率或关闭状态)。文章还提供了传感器寄存器映射表,涵盖了加速度计、陀螺仪、FIFO控制等多个功能模块的寄存器地址定义。该适配工作基于Rockchip的input sensor HAL框架完成。

2025-12-19 16:18:14 75

原创 RK3588 Android 12 适配BH1750光线传感器(基于RK input sensor HAL 框架)

本文介绍了RK3588平台基于RK input sensor HAL框架适配BH1750光线传感器的驱动移植过程。

2025-12-15 15:09:27 120

原创 Stratum mining protocol

【代码】Stratum mining protocol。

2024-12-27 10:00:21 1347

原创 [RK3566]linux下使用upgrade_tool报错

查看upgrade_tool的log。原因:usb节点的操作权限不足。

2024-08-03 22:44:09 1233

原创 [IMX6ULL]移植NXP Linux Kernel 5.15

仓库[nxp-imx/linux-imx]2. 编译NXP Linux Kernel 5.153. 烧写NXP Linux Kernel 5.15编译生成使用tftp方式下载上面两个文件到板子上(uboot移植看前面的文章)4. 适配正点原子Alpha板子4.1 新建单板配置文件4.2 新建单板设备树文件修改imx6ull-14x14-alpha.dts修改imx6ull-14x14-alpha-emmc.dts修改dts目录下的Makefile, 添加imx6ull

2024-07-21 17:05:23 1548 5

原创 [Debugger]使用openocd+dap-link调试树莓派4B[Cortex-A72]

这里的dap-link使用的是jtag的方式由于使用的是方式连接树莓派,但是OpenOCD的中的是以方式连接,我们要参考它新建一个运行OpenOCD运行GDB运行效果如下:

2024-07-08 14:25:20 829

原创 [Debugger]调试Arm设备

1.2 运行gdb进入gdb环境,连接到设备

2024-07-05 15:48:24 656

原创 [A133]全志u-boot中的I2C驱动分析

IIC是高位(MSB)先传输2.1.1 主机发开始信号2.1.2 主机发从机设备地址2.1.3 主机发送从机寄存器地址2.1.4 主机发送数据到从机2.1.5主机发送Stop信号2.2 主机读数据读操作除了下面的两个操作,其他与写一样restart信号实际上就是start信号,只是restart不会reset总线

2024-07-01 14:09:11 898

原创 [A133]uboot启动流程

init_sequence_f数组中特别注意的是下面的函数,将接下来的链接重定位内存结构息息相关。标签的当前地址,并将其存储在链接寄存器(lr)中。这将是代码重定位后的返回地址。)的低4位清零,以确保栈指针(sp)是16字节对齐的。重定位uboot text&bss&data段到内存中的新地址。中,根据平台架构, 有对应的实现,当前平台是armv8。为即将重定位做的内存分配,此时结构如下。寄存器中,以得到重定位后的最终返回地址。到这里重定位的准备工作都做完了,从下面的汇编到C的map可知是。

2024-06-26 11:15:48 1006

原创 [A133]uboot引导Linux内核启动流程

坂田民工2024-6-17。

2024-06-21 15:41:54 1038

原创 [IMX6ULL]移植lf-v2022.04 U-boot

ALPHA 板子不同于NXP的EVK开发板,它的LCD RESET使用的是硬件上电复位,所以不需要使用软件复位,即不需要单独的Pin去reset,所以注释EVK用到的lcd reset, 节约引脚(软件上,在LCD时序也需要注释掉它调用reset脚的时序点,在下面有讲到)修改arch/arm/dts/Makefile, 添加alpha板子。修改arch/arm/mach-imx/mx6/Kconfig。修改imx6ull-14x14-alpha-emmc.dts。// 将改变覆盖到MMC。

2024-05-07 22:45:23 808

原创 [RP2040]搭建第一个自定义项目

在endif()endif()# sub-dir:led.c。

2024-05-05 00:48:17 858

原创 [RP2040]Ubuntu搭建RP2040开发环境

一、下载SDK和编译链下载SDK下载交叉编译链配置在最后追加二、编译实例工程新开一个终端,进入目录编译blink编程编译完成同级目录下生成:blink.uf2、blink.elf、blink.bin

2024-04-23 17:13:35 1118

原创 [Android 13]Input系列--获取触摸窗口

Android 13。

2024-02-29 14:11:05 2702

原创 LVGL在framebuffer设备上的移植

arm-linux-gnueabihf-gcc: 错误: unrecognized command line option ‘-Wshift-negative-value’gcc编译报错 error: ‘for‘ loop initial declarations are only allowed in。文章参考于网友的经验。

2023-12-31 16:43:07 2682 5

原创 kernel的module目录名疑问

原因:kernel的module目录匹配是由kernel编译时生成的版本决定的,本来制作rootfs时创建module文件夹名字是4.1.15,但是修改了内核,内核的version生成信息变了,相应的源码如下:(kernel的顶层Makefile)当修改内核后重新编译后烧到设备上,启动后发现kernel的module名和uname -r对不上了,导致驱动无法加载,出现如下的错误信息。脚本执行的结果拼接而成,其中$(KERNELVERSION)就是内核原本的版本号4.1.15,而。这里主要分为两个部分。

2023-12-29 21:51:36 1029

原创 配置NPM异常

问题:当配置npm的环境时,即使换了国内的源(例如淘宝源),还是会卡住,有可能时ssl检查的原因。

2023-12-20 14:28:08 585

原创 STM32 MCU的易坑点收集

时钟延长是一个术语,某些从设备可以把时钟线拉低,主设备发现自己释放时钟线之后时钟线还没有变成高电平,就会停止发送数据,然后等待从设备释放时钟线。通过这种方式从设备可以告诉主设备你慢点发,我这边还得准备准备,这在从机速率比主机低的时候会有用,stm32会默认开启时钟延长模式[Clock No Stretch Mode=disbale](这里的disable和No双重否定等于肯定),不过大多数IIC设备没有时钟延长的设定.

2023-12-13 10:32:05 911

原创 [socket]客户端connect成功但是服务端accept()函数返回-1问题

等方法异常时是否也往下走了,要及时退出。现象:当客户端运行时,客户端。第一种情况就需要排查前面的。

2023-11-17 11:06:06 1101

原创 [Socket]Unix socket 运行权限问题

原因:unix socket是基于文件的fd方式访问,socket_path实际上是一个目录+文件(s文件),要确保这个文件有可读写权限。问题:socket只能在当前源码目录运行,如果是服务端,启动则会出现无法bind, 客户端则会出现无法connect。解决方法:在server端listen方法前修改socket_path的文件权限。

2023-11-13 14:41:29 1386 2

原创 buildroot编译问题解决

【代码】buildroot编译问题解决。

2023-11-03 22:45:05 974

原创 [Android 13]PowerManagerService系列1--启动流程和核心方法

Android 13。

2023-07-28 20:09:08 3314

原创 [Android 13]Input系列--触摸事件在应用进程的分发和处理

Android 13前面我们已经梳理了input事件在native层的传递,这一篇我们接着探索input事件在应用中的传递与处理,我们将按键事件和触摸事件分开梳理,这一篇就只涉及触摸事件。

2023-07-24 22:13:34 1364 1

原创 [Android 13]Input系列--InputDispatcher事件分发

Android 13。

2023-07-20 22:00:47 975

原创 [Android 13]Input系列--InputReader事件处理

Android 13。

2023-07-19 22:31:16 1201

原创 [Android 13]Input系列--EventHub获取事件

Android T从前面inputflinger的启动分析中,我们知道事件来源是在, 所以我们重点看下这个方法的流程来了解事件是如何从驱动上报中获取的。

2023-07-12 21:15:45 1370

原创 [Android 13]Input系列--InputFlinger的启动

Android T。

2023-07-11 20:32:59 1045

原创 [Android 13]Binder系列--获取服务

获取服务。

2023-07-10 20:59:34 1063

原创 [Android 13]Binder系列--获取ServiceManager

获取ServiceManager。

2023-07-02 22:25:38 941

原创 [Android 13]Binder系列--启动ServiceManager

ServiceManager的启动hongxi.zhuAndroid 13。

2023-07-01 22:44:43 1387

原创 [Android 13]Binder系列--注册服务

基于Android T 分析客户端进程如何通过Binder向ServiceManager进程注册服务的过程以注册SurfaceFlinger为例,分析客户端进程如何通过Binder向ServiceManager进程注册服务的过程。

2023-06-30 17:33:22 785 1

原创 [Android 13]探索ctl.属性控制服务的实现

从上面可知到当socket对端,也就是属性写入端发来数据时唤醒property-service线程,然后将消息入队,唤醒init主线程处理,第二个问题找到答案了,最后一个问题,属性控制事件怎么来的,谁发送的?搜索,实际是在bionic/libc/bionic/system_property_set.cpp中,属性写入是被libc实现为标准API了,所以每个地方写入属性都会调用到这里。这个队列中的,查找这个队列的流程,得到第二个问题的流程。根据属性的前缀,走不同的分支,我们例子看的是。开头的, 其他的同理。

2023-06-24 16:46:54 2031 1

原创 [aosp文档]bootanimation format

【代码】[aosp文档]bootanimation format。

2023-06-15 17:41:49 653

原创 [Android 13]开机动画原理分析

开机动画跑起来除了需要自身进程的启动外,还肯定以来显示系统的相关进程,即一定需要SurfaceFlinger的进程的合成和送显,所以这里需要启动SurfaceFlinger服务和bootanim服务,两者是在init.rc中启动。上面的构造方法中仅仅中只是获取了SF的session代理对象, 真正的加载逻辑在这个对象的第一次引用回调方法中(在前面的sp指针实例化时被回调)。的情况,这个名字也是很直白,开机动画的实现是图片逐帧动画,和电影的那种原理相同。获取对应的目标的rc文件,并将rc的内容。

2023-06-15 17:28:22 6443 5

空空如也

空空如也

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

TA关注的人

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