自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

岩之有理的博客

嵌入式,linux/android驱动,生活经历感悟

  • 博客(46)
  • 资源 (2)
  • 收藏
  • 关注

原创 LVDS接口和LVDS技术

GMSL英文全称为GigabitMultimedia Serial Link ,是美信推出的一种针对车用的串行传输接口标准,其标准的发展历程如下图4所示,发展到现在,可以支持的最高串行话速率为3.125Gbps,同样支持同轴电缆传输、支持同轴电缆POC供电,同样是成对使用,典型的器件如MAX9291B、MAX9293B、MAX9277、MAX9281等。FPD-LINK 是TI的LVDS方案,FPD-Link方案分为FPD-Link I、FPD-Link II、FPD-Link III。

2023-03-17 15:26:48 3024 1

原创 Android Native crash tomestone trace转换工具stack介绍

Android Native crash tomestone trace转换工具stack介绍

2022-09-20 10:28:06 1084

原创 Android显示系统-GraphicBuffer和Gralloc分析

BufferQueue中的Buffer对象,我们用的都是GraphicBuffer,那么GraphicBuffer是怎么来的呢?接下里我们具体来看这里的流程。Surface是Andorid窗口的描述,是ANativeWindow的实现;同样GraphicBuffer是Android中图形Buffer的描述,是ANativeWindowBuffer的实现。而一个窗口,可以有几个Buffer。...

2022-07-29 15:31:25 2326 1

原创 C++11 之 override

C++11之 override

2022-07-01 16:54:22 1064

原创 SELINUX:Systemproperties.set Unable to set property “xx“ to “xx“: error code: 0x18

1.问题framework增加setprop功能失败2.解决在system_server.te文件中allow system_server { *_prop }:property_service set;其中*_prop是在property_contexts中定义persist.ivi. u:object_r:*_prop:s0

2022-04-26 17:46:31 2282 1

原创 每天学一个设计模式:4-工厂模式

工厂模式:包括简单工厂模式、抽象工厂模式、工厂方法模式简单工厂模式:主要用于创建对象。用一个工厂来根据输入的条件产生不同的类,然后根据不同类的虚函数得到不同的结果。工厂方法模式:修正了简单工厂模式中不遵守开放封闭原则。把选择判断移到了客户端去实现,如果想添加新功能就不用修改原来的类,直接修改客户端即可。抽象工厂模式:定义了一个创建一系列相关或相互依赖的接口,而无需指定他们的具体类。这个写的不错,可以参考:https://zhuanlan.zhihu.com/p/835356781.简单工厂模式

2022-01-28 16:33:41 96

原创 计算机的原码、反码、补码

1.原码原码:是最简单的机器数表示法,用最高位表示符号位(1负数,0正数),其他位存放该数的二进制的绝对值。以带符号位的四位二进制数为例:1010,最高位为1表示这是一个负数,其它三位010,即022+1*21+02^0=2,所以1010表示十进制数-2。原码的表示法很简单,虽然出现了+0和-0,但是直观易懂。于是开始运算——0001+0010=0011,1+2=3;0000+1000=1000,+0+(-0)=-0;0001+1001=1010,1+(-1)=-2。于是可以看到其实正数之间

2022-01-10 11:13:12 432

原创 每天学一个设计模式:3-组合模式

1.定义Composite模式也叫组合模式,是构造型的设计模式之一。通过递归手段来构造树形 的对象结构,并可以通过一个对象来访问整个对象树。组合模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。2.类图角色和职责Component (树形结构的节点抽象)为所有的对象定义统一的接口(公共属性,行为等的定义)提供管理子节点对象的接口方法[可选]提供管理父节点对象的接口方法Leaf (树形结构的叶节点):Component的实现子类Composite(树形结构的枝节点

2022-01-07 13:48:24 66

原创 每天学一个设计模式:2-原型模式

1.定义原型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个 原型对象的方法创建出更多同类型的对象。Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实 例。使用Prototype模式创建的实例,具有与原型一样的数据。由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象, 不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。根据对象克隆

2022-01-05 15:20:25 84

原创 每天学一个设计模式:1-单例模式

1.定义单例模式也称为单件模式,其意图是保证一个类仅有一个实例并提供一个访问它的 全局访问点,该实例被所有程序模块共享。 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的 实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。2.需求在应用系统开发中,我们常常有以下需求: 单例模式有很多的应用场景,比如Windows中的任务管理器、网站的计数器 等。在多个线程之间,比如初始化一次socket资源;比如servlet环境,共享同一个资 源或者操作同一个对象 在整个程序空间

2022-01-04 14:22:30 389

原创 android camera hal增加动态水印

#include <string.h>#include "digital_data.h"void reverse(char *s,int n){ for(int i=0,j=n-1;i<j;i++,j--){ char c=s[i]; s[i]=s[j]; s[j]=c; }}bool CameraDevice::watermarkProcess(void *pFrame) { bool ret = fal

2021-12-31 14:48:17 1308

原创 车载全景影像算法实现

全景影像相关算法实现

2021-12-27 22:43:19 3892 1

原创 MIPI DSI CLK计算

display BSP

2021-12-23 09:53:14 3672

原创 常用工具记录

开源画图工具 PlantUML在线画图:processon

2021-12-15 09:44:31 227

原创 Android显示架构

一.术语二.显示机制2.1 水平和垂直同步信号在早期的CRT显示器,电子枪从上到下逐行扫描,扫描完成后显示器就呈现一帧画面。然后电子枪回到初始位置进行下一次扫描。为了同步显示器的显示过程和系统的视频控制器,显示器会用硬件时钟产生一系列的定时信号。当电子枪换行进行扫描时,显示器会发出一个水平同步信号(horizonal synchronization),简称 HSync当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信号(vertical synchronizat

2021-12-13 14:01:58 768

原创 卡顿、死锁、ANR原理分析

https://www.jianshu.com/p/df257ff1bfec

2021-12-09 13:38:52 302

原创 mmap详解

虚拟内存系统通过将虚拟内存分割为称作虚拟页(Virtual Page,VP)大小固定的块,一般情况下,每个虚拟页的大小默认是4096字节。同样的,物理内存也被分割为物理页(Physical Page,PP),也为4096字节。一、mmap基本原理和分类在LINUX中我们可以使用mmap用来在进程虚拟内存地址空间中分配地址空间,创建和物理内存的映射关系。映射关系可以分为两种1、文件映射磁盘文件映射进程的虚拟地址空间,使用文件内容初始化物理内存。2、匿名映射初始化全为0的内存空间。而对于映射关

2021-12-07 11:00:39 12948

原创 Hypervisor技术

KVM介绍KVM内置于Linux,是内核模块;KVM可以直接利用Linux来做一些在xen中需要利用hypervisor来做的事情,比如任务调度,内存管理等等。所以相比之下,KVM更轻量,更易管理,并且版本更新也可以随着内核的更新。 KVM架构qemu通过libkvm应用程序接口,用fd通过ioctl向设备驱动来发送创建,运行虚机的命令。设备驱动kvm接下来解析命令。虚机运行时,有三种模式:-客户模式:执行非io的客户代码,虚机在这个模式下运行;-用户模式:代表用户执行

2021-12-01 18:58:21 1300

原创 Mipi协议介绍

从 sensor 输出数据到 SOC mipi 接收csi mipi信号解析

2021-11-29 19:56:26 406

原创 Android 底层知识-SMMU

MMU简介MMU是Memory Management Unit的缩写,中文名是内存管理单元。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制。在linux中,用户态使用的内存是虚拟地址(Virtual Address,VA),实际硬件内存称为物理地址(Physical Address,PA)。用户访问内存看到的是VA,内核转化成PA操作实际物理地址。这里要提一下,实际MMU硬件支持2层转化,PA-&

2021-11-29 16:28:08 4741

原创 Android 底层知识-PMEM

最近研究android hypervisor通信,buffer的传输最底层都是调用的PMEM,现整理相关资料。PMEM 基本原理Android Pmem是为了实现共享大尺寸连续物理内存而开发的一种机制,该机制对dsp,gpu等部件非常有用。Pmem相当于把系统内存划分出一部分单独管理,即不被linux mm管理,实际上linux mm根本看不到这段内存。Pmem与Ashmem的区别Pmem和Ashmem都通过mmap来实现共享内存,其区别在于Pmem的共享区域是一段连续的物理内存,而Ashmem的共

2021-11-27 16:47:47 2479

原创 android获取时间戳接口

1.时间单位秒:second毫秒:Millisecond微妙:Microsecond纳秒:nanosecond1秒 = 1000毫秒;1毫秒=1000微秒, 1微秒=1000纳秒,2.获取时间戳native层 nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC); txt:这里返回的就是纳秒java层long now = SystemClock.uptimeMillis();kernel层s64 time = ktime

2021-11-26 14:21:06 2476

原创 Android camera1 l流程分析(基于Android 8)

1.架构根据架构简图可以看到,实际上 Camera 的架构与 Android 架构是一一对应的,上层应用调用 Camera 相关的方法后,指令依次通过框架层、运行时环境、本地库、硬件抽象层,最终到达具体设备。设备执行动作后,获得的数据又会沿着反方向依次发送到最上层。需要注意的是,在本地库这一层中,涉及到一个 C/S 结构:即通过客户端与服务端的交互来传递指令与数据。实际上,只有服务端与 HAL 层进行沟通。由于客户端与服务端是不同的进程,它们之间需要依靠 IPC Binder 机制 来进行通讯。

2021-11-23 18:50:36 119

原创 QCOM camera架构

camx/chi架构深入理解相机八(高通框架)AIS架构高通AIS suspend/resume流程

2021-11-12 16:51:46 6617

原创 android R 两个camera同时预览、画中画

参考的app 的demo:camera2例子:https://github.com/wangshengyang1996/Camera2Demo使用camera2 api打开逻辑多摄来同时打开多个物理摄像头:https://download.csdn.net/download/qq_32503365/12542520后续再写

2021-11-04 17:19:36 2471 1

原创 MIPI、DSI、CSI、D-PHY的简要介绍

转载:https://blog.csdn.net/qq160816/article/details/19555957

2021-09-26 14:15:24 2105

原创 Android 内存管理类GraphicBuffer Gralloc ION

首先介绍下相关概念:GraphicBufferGraphicBuffer是Surface系统中一个高层次的显示内存管理类,它封装了和硬件相关的一些细节,简化了应用层的处理逻辑。Surface是Andorid窗口的描述,是ANativeWindow的实现;同样GraphicBuffer是Android中图形Buffer的描述,是ANativeWindowBuffer的实现。而一个窗口,可以有几个Buffer。GraphicBuffer的左膀右臂,GraphicBufferAllocator和Grap

2021-08-10 18:23:02 1590

原创 Android 11 camera系统调试总结

camera2 debugServiceManager: Permission failure: android.permission.SYSTEM_CAMERA from uid=10134 pid=3155原因:在搭载 Android 11 或更高版本的设备上,Android 框架支持系统相机,这些相机设备仅对具有 android.permission.SYSTEM_CAMERA 权限和常规相机权限的进程可见。Android 11 中引入了 android.permission.SYSTEM_C

2021-08-04 11:01:04 6433 2

原创 repo 相关

1.error: .repo/manifests/: contains uncommitted changes 解决办法出现这个问题的原因是本地代码发生变化,但未commit试着通过 git reset --hard来恢复所有变化的文件之后,依然存在上述问题,最后通过cd .repo/manifests 切换到 .repo/manifests目录下执行git stash命令,并通过git clean -f -d命令删除变化记录目录,然后使用repo sync就可以通过了。2.repo sync [

2021-07-26 12:33:17 302

原创 androidQ input子系统

Android dumpsys input详解Android 输入系统之EventHub篇系统性介绍:Android 中input event的分析

2021-07-23 13:30:06 185 1

原创 unix系统调试信息记录

这里记录下调试过程中发现的测试程序中mmap fail导致的内存崩溃问题。这是测试程序:extern int errno;pdata = mmap(NULL, /*PAGE_SIZE*page_counts*/size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED|MAP_POPULATE, -1, 0); if (pdata == MAP_FAILED) { printf(" mmap errno:%d\n",errno);

2021-06-26 14:42:40 91

原创 如何使用am命令启动Android应用

主要介绍使用am命令启动应用的方法一、使用am命令启动一般的Android App命令格式为:adb shell am start -n package/launch_activity示例:打开设置App命令:adb shell am start -n com.android.settings/com.android.settings.Settings命令的关键在于获取package和launch_activity。有很多种方法,这里列举两种,更多的方法请参考“如何获取Android App的pa

2021-06-08 09:43:31 4171

原创 QNX相关资料整理

入门开发指南安装环境使用软件相关:https://blog.csdn.net/qq_16019185/article/details/80870439?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242display相关openWF display API接口解析:https://blog.csdn.net/Suixing_yuan/article/details/

2021-05-26 15:29:51 327

原创 HIDL服务死亡通知实例 hidl_death_recipient

//申请hidl_death_recipient的子类struct CameraPolicyServiceClient: virtual public hardware::hidl_death_recipient { CameraPolicyServiceClient(sp<hardware::camera::device::V1_0::ICameraDevice> &interface); ~CameraPolicyServi

2021-05-19 11:37:01 1691 2

原创 Android.bp 介绍

概述Android.bp的出现就是为了替换Android.mk文件。bp跟mk文件不同,它是纯粹的配置,没有分支、循环等流程控制,不能做算数逻辑运算。如果需要控制逻辑,那么只能通过Go语言编写。Android 7.0引入ninja和katiAndroid 8.0使用Android.bp来替换Android.mk,引入SoongAndroid 9.0强制使用Android.bp1.语法讲解cc_binary { //编译成可执行文件,cc_library_shared编译

2021-05-11 13:28:06 1831

原创 Android 10编译报错整理

编译Android 10遇到以下不同报错,没有给出明显的错误信息,最后验证出是电脑内存不足导致编译被杀掉,增大电脑内存和Swap分区之后解决。注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。[ 91% 123644/134926] //vendor/qcom/proprietary/interfaces/voiceprint/1.0:vendor.qti.voiceprint-V1.0-java javac [common]注: 某些输入文件使用了未经检查或不安全的操作。注

2021-05-10 09:28:05 3514 1

原创 android binder 基础实例(可运行)

实例:https://download.csdn.net/download/KLYAZWS/17844927参考文章:https://blog.csdn.net/newchenxf/article/details/49359283#insertcode

2021-04-25 15:05:43 94

原创 Qcom camera autoFocus模式总结

Qcom camera autoFocus模式总结enum focusMode_t { FOCUS_MODE_AUTO FOCUS_MODE_MACRO FOCUS_MODE_CONTINUOUS_VIDEO FOCUS_MODE_CONTINUOUS_PICTURE FOCUS_MODE_EDOF FOCUS_MODE_INFINITY, FOCUS_MODE_FIXED, FOCUS_MODE_INVALID = -1} focusMo

2021-04-12 17:43:45 418

原创 移植NDK项目到APP项目中,不能从java跳转到cpp文件问题

移植NDK项目,对应的Cpp文件不能直接复制,因为jni方法名是和项目名关联的,调用native方法会有UnsatisfiedLinkError报错:解决办法:报错中会有提示需要修改为的jni方法,同步就可以解决。原本的方法名:extern "C"JNIEXPORT jstring JNICALLJava_com_×××_transcoder_jni_FFmpegCmd_retrieveInfo(JNIEnv *env, jclass clazz, jstring _path)修改后的e

2021-01-06 14:43:15 133

原创 PyQT5制作adb抓日志工具教程:1.PyQt5(designer)安装及环境搭建

1.环境清单Windows 7/Windows10Python 3.7VSCodePyQt5Qt Designer这里安装Python3建议用Anaconda,因为后面打包之类的还需要安装其他Pyinstaller,会容易出现缺少dll相关的报错。2.安装PyQt5建议使用pip命令pip install PyQt5pip install pyqt5-tools到这一步,PyQt5就安装完成了,你可以通过搜索designer应用程序查看是否安装成功。3.vscode配置(1)安

2020-12-07 11:20:48 499

Android Fastboot驱动(支持win10 ubuntu)

Android Fastboot驱动(支持win10 ubuntu)

2022-05-07

android binder 基础实例(可运行)

android binder 基础实例(可运行)

2021-04-25

空空如也

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

TA关注的人

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