- 博客(20)
- 资源 (17)
- 收藏
- 关注
原创 linux I2C驱动详解(3)-I2C Core
本节说明下I2C 核心层->i2c_transfer->适配器驱动master_xfer调用栈是 I2C 核心层提供的一个通用函数,用于发起一系列的 I2C 消息传输。adap:指向要使用的 I2C 适配器的指针。msgs:指向i2c_msg结构体数组的指针,每个i2c_msg结构体表示一个 I2C 消息。numi2c_msg数组的元素个数。I2C 核心层在接收到应用层的 I2C 操作请求后,会调用函数。函数通过结构体获取到对应的结构体,然后调用其中的回调函数,最终由适配器驱动的。
2025-04-02 12:10:32
537
原创 linux I2C驱动详解(2)-控制器驱动
int file;// 测试从机地址if (file < 0) { /* 错误处理 */ }if (ioctl(file, I2C_SLAVE, addr) < 0) { /* 错误处理 */ }// 写后读测试// 寄存器地址// 测试数据= 2) { /* 错误处理 */ }= 1) { /* 错误处理 */ }return 0;
2025-04-02 11:30:50
534
原创 linux I2C驱动详解(1)-设备驱动
以下以ICM-426xx传感器芯片驱动为例讲解Linux(openwrt) I2C设备驱动架构及编写方法,涵盖架构设计、硬件连接、设备树、驱动代码、应用测试及编译方法。所有代码均附带注释,并附流程图。+-----------------------+| User Application | (e.g. 通过sysfs或IIO接口读取数据)+-----------------------+| Linux Kernel || - IIO Subsystem |
2025-04-02 11:19:13
646
原创 读写锁(rwlock)
为避免写线程饥饿(长时间等待),多数实现优先处理写请求(即一旦有写请求等待,后续读请求需等待写完成)。在读多场景下,多个读线程需串行执行,导致性能瓶颈。)是一种同步机制,允许多个线程同时读取共享资源,但在写入时要求独占访问。,结合具体场景选择同步机制(如乐观锁、无锁编程等),以最大化系统性能。:同一时间仅允许一个线程获取写锁,且此时所有读锁和写锁均被阻塞。允许读锁升级为写锁(需原子性保证),或写锁降级为读锁。:持续有读线程获取锁,导致写线程无法及时执行。,消除不必要的等待,显著提升吞吐量。
2025-03-27 16:18:55
215
原创 高通 CamX-CHI 架构中的 Pipeline 与 Linux Media 子系统的关系详解
通过这种映射,高通 CamX-CHI 架构能够利用 Linux Media 子系统的灵活性,将硬件资源抽象为可配置的节点,快速构建复杂的相机处理流程(如 HDR、多帧降噪等),同时保持驱动层的模块化和可扩展性。:通过 Media 子系统的 “道路”,CamX 的 “公交线路” 可以灵活规划,适应不同场景(拍照、录像等),同时确保硬件资源(车站)的高效共享。A:统一管理复杂的硬件连接(如多 Sensor、多 ISP),避免驱动层硬编码连接关系,支持动态配置。
2025-03-27 16:15:29
485
原创 Media 子系统 & V4L2
维度Media 子系统V4L2 架构定位多媒体框架(基建公司)视频专用模块(视频高速公路)核心组件entitylinksubdev, V4L2 API管理范围视频、音频、传感器等所有多媒体设备仅视频相关设备(摄像头、采集卡)接口类型通用设备图操作(Media Controller)专用视频接口(syscall/ioctl)典型场景多设备链路(Sensor→ISP→Encoder)单设备操作(打开摄像头、捕获数据)V4L2 是 Media 子系统的「视频业务线」,提供视频设备的标准化接口(如。
2025-03-27 16:11:33
838
原创 CAMERA MFHR(Multi-Frame High Dynamic Range)
是一种结合多帧降噪(MFNR)与高动态范围(HDR)的混合成像技术,旨在通过多帧融合提升复杂光照场景下的图像质量。通过以上配置与优化,MFHR可在CamX架构中实现高效的多帧高动态范围成像,显著提升复杂光照场景下的用户体验。Sensor → IFE(实时流) → BPS(离线流) → IPE(后处理) → JPEG编码/显示。:根据像素亮度分配权重(高光区依赖短曝光帧,暗区依赖长曝光帧)。-- 输入节点:接收多帧RAW数据 -->-- 输出节点:传递到IPE -->-- 处理节点:对齐与融合 -->
2025-03-27 13:20:31
832
原创 高通camera架构CamX添加自定义node
(自定义Node的保留标识),硬件Node(如IFE、IPE)使用预定义ID(如IFE=65536)6。:将水印处理封装为独立Node,在Usecase XML中插入到IFE和BPS之间。定义输入/输出端口数量、Buffer格式支持(如RAW、YUV等)。中修改像素数据,需注意字节对齐问题(如YUV420的宽度需为偶数)。:运行降噪算法,输出单帧YUV数据到下游Feature。中添加新Node的构建路径,确保编译时包含该模块1。目录下,可参考现有Node(如。:添加水印功能的Node需在。
2025-03-26 22:49:41
847
转载 Android Camera简单整理(二)-Qcom HAL3 Camx架构学习
CAMIF:摄像头接口?//这里的线程cb是CHISession::ThreadJobCallback,为什么呢?//如果是no sink port。
2025-03-26 18:07:56
6
转载 【Android Camera简单整理(一)-Camera Android架构(高通)】
6 Surface本质上是BufferQueue的使用者和封装者,当CameraServer中App设置来的Surface容器被填满了BufferQueue机制将会通知到应用,此时App中控件取出各自容器中的内容消费掉,Preview控件中的Surface中的内容将通过View提供到SurfaceFlinger中进行合成最终显示出来,即预览;应用层开发者需要做的就是按照AOSP的API规定提供的接口,打开相机,做基本的相机参数的设置,发送request指令,将收到的数据显示在应用界面或保存到存储中.
2025-03-26 18:05:57
21
原创 Android HIDL介绍及使用示例
对于遗留的HIDL代码,Google建议逐步迁移至AIDL,尤其在需要支持Android 11及以上版本时,AIDL已成为官方推荐的标准1。AIDL原本用于Android框架层和应用层通信,现扩展至HAL层,减少了Binder和Passthrough模式的分歧,仅需维护一个运行时环境,降低了调试和优化的复杂度1。通过以上步骤,可实现一个完整的HIDL服务,促进Android框架与硬件的解耦,提升系统可维护性。,开发者可直接在现有接口中添加方法或字段,无需像HIDL那样创建新版本目录,避免了冗余代码1。
2025-03-26 11:49:47
640
原创 android camera详解
Android Camera原理之编译Android Camera原理之camera provider启动Android Camera原理之cameraserver与cameraprovider是怎样联系的Android Camera原理之camera service与camera provider session会话与capture request轮转Android Camera原理之camera HAL底层数据结构与类总结Android Camera原理之camera service类与接口关系。
2025-03-26 01:06:27
898
原创 ANDROID JNI 底层原理详解
JNI(Java Native Interface)即 Java 本地接口,它允许 Java 代码与本地代码(如 C 和 C++)进行交互。在 Android 开发中,JNI 扮演着重要角色,它让 Java 代码(位于 Framework 层)能够调用 NATIVE 层的 C/C++ 代码,以实现高性能计算、访问底层硬件等功能。注册 JNI 方法:将 Java 方法与本地的 C/C++ 函数关联起来。Java 代码调用本地方法:在 Java 代码中调用声明为native的方法。JNI 层查找本地函数。
2025-03-25 21:27:06
898
原创 JNI原理学习
这样JNI就可以访问Java层的代码了。为什么能无中生有一个 native_init()呢,是因为前面加载了一个 libmedia_jni库,这里面肯定封装了这个函数,我们加载进来的动作其实就和 import来导包一样,这个成员方法同样的被我导入进来了。首先先判断当前是什么语言,_cplusplus就是C++,如果当前语言是C++,JNIEnv就是 _JNIEnv类型,如果是C,就是 JNIInvokeInterface*这个类型。
2025-03-25 21:11:24
380
原创 JNI详解:使用方法
jni全称java native interface,我把它分为三部分,java代表java语言,native代表当前程序运行的本地环境,一般指windows/linux,而这些操作系统都是通过C/C++实现的,所以native通常也指C/C++语言,interface代表java跟native两者之间的通信接口,jni可以实现java和C/C++通信。它是java生态的特征,所以定义在jdk标准当中。
2025-03-25 20:54:01
758
原创 JNI、Binder、NDK 的关系解析(类比 + 场景化说明)
需求:游戏逻辑(C++,NDK)与渲染(另一个 C++ 进程,NDK)高速通信。方案用 NDK 实现 Native Binder 服务(类似 Java 的 AIDL,但全 C++)。通过 JNI 在 Java 层暴露简化接口(可选)。Binder 驱动负责跨进程数据传输(一次内存拷贝,高性能)。四、对比与总结维度JNIBinderNDK作用跨语言(Java ↔ C/C++)跨进程(IPC)支持 Native 开发(C/C++)层级语言边界进程边界开发工具链协作场景。
2025-03-25 18:43:17
632
转载 Android JNI使用全面讲解
在访问或者设置Java属性的时候,首先就要先在本地代码取得代表该Java属性的jfeldID,然后才能在本地代码中进行Java属性操作,同样,需要调用Java端的方法时,也是需要取得代表该方法的jmethodID才能进行Java方法调用。Java中方法的签名。不知道大家有没有了解过,其实Java中每个方法,都有其对应的签名的。本文是一个 NDK/JNI 系列基础到进阶教程,目标是希望观看这篇文章的朋友们能对Android中使用C/C++代码,集成C/C++库有一个比较基本的了解,并且能巧妙的应用到项目中。
2025-03-25 17:48:06
5
原创 windows安装使用QEMU
QEMU也可以使用MSYS2安装。MSYS2使用pacman管理包。然后使用pacman -Syu命令更新包。对于64位Windows 8.1或更高版本(UCRT64): pacman -S mingw-w64-ucrt-x86_64-qemu。对于64位Windows 7或更高版本(MINGW64): pacman -S mingw-w64-x86_64-qemu。Stefan Weil提供了32位和64位Windows的二进制文件和安装程序。一些与QEMU相关的工具可以在单独的包中找到。
2024-07-05 14:43:33
1040
Protel99入门与提高
2008-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人