- 博客(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
原创 [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
原创 [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
原创 [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]Ubuntu搭建RP2040开发环境
一、下载SDK和编译链下载SDK下载交叉编译链配置在最后追加二、编译实例工程新开一个终端,进入目录编译blink编程编译完成同级目录下生成:blink.uf2、blink.elf、blink.bin
2024-04-23 17:13:35
1118
原创 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
原创 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
原创 [Android 13]Input系列--触摸事件在应用进程的分发和处理
Android 13前面我们已经梳理了input事件在native层的传递,这一篇我们接着探索input事件在应用中的传递与处理,我们将按键事件和触摸事件分开梳理,这一篇就只涉及触摸事件。
2023-07-24 22:13:34
1364
1
原创 [Android 13]Input系列--EventHub获取事件
Android T从前面inputflinger的启动分析中,我们知道事件来源是在, 所以我们重点看下这个方法的流程来了解事件是如何从驱动上报中获取的。
2023-07-12 21:15:45
1370
原创 [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
原创 [Android 13]开机动画原理分析
开机动画跑起来除了需要自身进程的启动外,还肯定以来显示系统的相关进程,即一定需要SurfaceFlinger的进程的合成和送显,所以这里需要启动SurfaceFlinger服务和bootanim服务,两者是在init.rc中启动。上面的构造方法中仅仅中只是获取了SF的session代理对象, 真正的加载逻辑在这个对象的第一次引用回调方法中(在前面的sp指针实例化时被回调)。的情况,这个名字也是很直白,开机动画的实现是图片逐帧动画,和电影的那种原理相同。获取对应的目标的rc文件,并将rc的内容。
2023-06-15 17:28:22
6443
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅