- 博客(87)
- 收藏
- 关注
原创 人脸识别的框架
人脸识别框架与指纹框架并无太大差别(指安卓原生,因为具体项目中架构可能会被修改)人脸识别HAL层的state machine,IBiometricsFace.hal文件中可以查看到HAL层需要实现的相关的接口函数(指纹同样,在IBiometricsFingerprint.hal接口文件中)参考:https://source.android.com/security/biometric/face-authentication?hl=zh-cn...
2020-12-15 19:26:28 1994 1
原创 指纹(生物识别)的软件框架
指纹(生物识别)HAL层以上的软件框架(注意跨进程通信的交界)指纹验证的整体框架(应当结合第一张图片一起看,图中圈红的已被替换)
2020-12-15 19:12:52 756 1
原创 指纹识别
指纹识别是啥?直接见维基百科:https://zh.wikipedia.org/wiki/%E6%8C%87%E7%BA%B9%E8%AF%86%E5%88%AB在移动设备开发中常用的是电容指纹、光学指纹,超声波指纹不常用;光学指纹一般会作为屏下指纹使用,同OLED屏搭配;电容指纹一般为后置指纹、侧边指纹;...
2020-12-15 15:50:04 474 2
原创 指纹相关的小知识
一个指纹IC一般有以下几个引脚:RST 复位引脚INT 中断引脚MISO 主输入从输出MOSI 主输出从输入SPI CLK SPI时钟CS/SS 片选引脚VDD 数字供电VDDIO I/O供电VDDOTP OTP供电为什么要进行晶振校准?(Oscillator Calibration)内部系统时钟在传感器芯片之间会显现过程变化。(讲人话:存在误差)可以对晶振(振荡器)进行校准以获得最佳的SPI性能。...
2020-12-15 15:28:37 810
原创 Fingerprint
Android原生hal层fingerprint模块:http://androidxref.com/9.0.0_r3/xref/hardware/libhardware/include/hardware/fingerprint.hhttp://androidxref.com/9.0.0_r3/xref/hardware/libhardware/modules/fingerprint/Android.bphttp://androidxref.com/9.0.0_r3/xref/hardware/l
2020-12-15 13:31:07 304
原创 Linux下的input子系统
https://elixir.bootlin.com/linux/v4.14.212/source/include/linux/input.h#L337https://elixir.bootlin.com/linux/v4.14.212/source/drivers/input/input.c#L1789input设备的注册:1.调用input_allocate_device()函数分配一个input_dev结构体2.初始化input_dev结构体3.调用input_registe...
2020-12-15 13:27:22 147
原创 查看、设置CPU工作频率的命令
之前遇到过功耗问题,朝着CPU工作频率方向思考,发现功耗过高的原因:为了性能让程序跑在大核上以下为查看、设置cpu动态工作频率的命令:查看cpu0的当前工作频率:cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq查看cpu0的最大工作频率:cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq查看cpu0的最小工作频率:cat /sys...
2020-12-14 22:09:48 4082
原创 正则表达式的使用
正则表达式(学会组合使用)用的好,可以提高效率(常用的):^ 匹配输入字符串的开始位置;^ABC 当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合;[^ABC]|表示或*可用来表示任意个字符“.” 表示任意一个字符[A-Z]、[a-z]表示一个区间note:多看看shell脚本,里面常用参考:https://www.runoob.com/regexp/regexp-tutorial.html...
2020-12-14 21:25:38 240
原创 用户空间调试GPIO的方法
可以在用户空间对导出、设置GPIO的状态(通过sysfs文件系统暴露出的接口):echo gpio_num > /sys/class/gpio/exportecho gpio_num > /sys/class/gpio/unexport
2020-12-14 19:59:46 150
原创 Android的输入系统
JAVA层:https://www.androidos.net.cn/android/10.0.0_r6/xref/frameworks/base/services/core/java/com/android/server/input/InputManagerService.javaNative层:https://www.androidos.net.cn/android/10.0.0_r6/xref/frameworks/base/services/core/jni/com_andr...
2020-12-14 16:57:15 226 1
原创 Android源码中的C库、C++库
https://www.androidos.net.cn/android/10.0.0_r6/xref/bionic
2020-12-14 15:18:35 414
原创 objdump工具的使用
objdump是什么?objdump是gcc工具链中的反汇编工具;(什么是反汇编?将二进制文件反汇编成汇编语言)objdump以可执行命令工具,在Linux下可以自己找寻源码及定位工具位置,参看:https://blog.csdn.net/JoggingPig/article/details/108098077objdump一般什么时候需要用?个人觉得需要看C文件对应的汇编代码,可以用这个工具;objdump怎么用?用find命令找到objdump工具所在的..
2020-12-14 14:33:18 936
原创 设备树基本知识
设备树是什么?设备树是用于描述硬件的数据结构;在系统启动时将这些描述硬件的数据传递给操作系统解析;The devicetree is used by OpenFirmware, OpenPOWER Abstraction Layer (OPAL), Power Architecture Platform Requirements (PAPR) and in the standalone Flattened Device Tree (FDT) form.(这就是为什么Linux内核中提供用来解...
2020-12-14 13:59:42 598
原创 I2C总线驱动
I2C驱动由3部分组成:I2C核心、I2C总线驱动、I2C设备驱动。一个i2c总线上挂了几个器件,i2c总线需要驱动, 器件也需要驱动。一个i2c器件被定义为i2c_ client对象;https://elixir.bootlin.com/linux/latest/source/include/linux/i2c.h#L314一个i2c器件需要绑定的驱动被定义为i2c_drvier对象;https://elixir.bootlin.com/linux/latest/...
2020-12-07 21:17:02 619
原创 Man手册的使用
Man手册由多个section组成:第1节 用户命令(man 1ls)介绍了用户命令和工具,例如文件操作工具,shell,编译器,Web浏览器,文件和图像查看器和编辑器等。第2节 系统调用系统调用是应用程序和Linux内核之间的基本接口。系统调用是Linux内核的入口点。通常,系统调用不直接调用:相反,大多数系统调用具有相应的C库包装函数,这些函数执行所需的步骤(例如,捕获到内核模式)以调用系统调用。因此,进行系统调用看起来与调用普通库函数相同第3...
2020-12-07 02:36:03 413
原创 Linux内核目录结构
https://elixir.bootlin.com/linux/latest/source.├── arch //存放特定平台的芯片对Linux内核进程调度、内存管理、中断等支持;基于架构的具体实现,都应该在该目录下寻找├── block //块设备驱动程序I/O调度├── certs ├── CREDITS├── crypto //常用加密算法(非对称加密算法RSA、对称加密算法AES)、散列算法(又称hash算法、消息摘要算法,MD5、SHA)、HMAC(HASH...
2020-12-07 00:06:49 312
原创 FPGA
FPGA(现场可编程门阵列)基于LUT(查找表)工艺。查找表本质上是一片RAM,当用户通过原理图或HDL(硬件描述语言)描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路所有可能的结果,并把结果事先写入RAM。...
2020-12-06 21:44:18 128
原创 SPI协议
SPI(Serial Peripheral Interface,串行外设接口)总线系统是一种同步串行外设接口;SPI(Serial Peripheral Interface,串行外设接口)可以使CPU(SoC,主设备)与各种外围设备(从设备)以串行方式进行通信以交换信息;SPI接口一般使用4条线:SCLK(Serial Clock):串行时钟线MISO(Master InSlave Out):主机输入/从机输出数据线、MOSI(Master Out Slave In):主机...
2020-12-06 20:41:54 179
原创 内核同步有哪些机制?这些机制如何使用?
内核同步有哪些机制?1.原子操作(不可分割)原子操作是其他同步方法的基石;原子整数最常见的用途就是实现计数器;2.自旋锁(spin lock)自旋锁的特性:自旋锁最多只能被一个执行线程持有;若有执行线程去尝试获取已经被持有的自旋锁,会自旋(占着cpu空转);利用自旋锁的特性:为多处理器机器提供了防止并发访问所需的保护机制;使用自旋锁的初衷:在短时间内进行轻量级加锁;处理对锁争用的方式:让请求锁的执行线程睡眠,直到请求的...
2020-12-04 22:08:00 232
原创 为什么内核需要同步?哪些情况下需要同步?
同步:同步指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。本意是指某人或某事同时进行;同时产生,比如音画同步、动作同步等。同步(英语:Synchronization),指对在一个系统中所发生的事件(event)之间进行协调,在时间上出现一致性与统一化的现象。保护数据不被并发访问!!!为什么需要同步?为了保护共享的数据资源;(群狗抢食---同时访问共享资源,出现争抢;)多个执行流(线程)并发访问同一个资源通常是不安全的;需要避免并发访问、竞争条件...
2020-12-04 18:58:37 380
原创 文件与目录操作基本命令:ls
ls (list缩写)命令语法:ls [选项] [参数]功能:显示目录内容常用命令ls -a ./:列出当前目录下所有文件ls -l ./:以长列格式显示当前目录下的内容列表ls -i./:显示文件的索引节点号(inode);一个索引节点代表一个文件;ls -F./:在输出项后追加文件类型标识符;"*"表示具有可执行权限的普通文件(可执行程序);"/"表示目录;"@"表示符号链接;"|"表示命名管道FIFO;"="表示sockets套接字;..
2020-11-29 12:52:06 2493
原创 根文件系统
根文件系统 一种文件系统具有普通文件系统的存储数据文件的功能;特殊:内核启动时挂载的第一个文件系统;内核的镜像文件保存在根文件系统中,系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab)和服务加载到内存中去运行。文件系统和内核是完全独立的两个部分。它文件系统的”根“,那么如果没有这个根,其它的文件系统也就没有办法进行加载的。根文件系统包含系统启动时所必须的目录和关键性的文件,以及使其他文件系统得以挂载(mount)所必要的文件。ini...
2020-11-28 18:44:49 108
原创 Linux中的系统调用
当用户态的进程调用一个系统调用时,cpu切换到内核态并开始执行一个内核函数。内核实现了许多不同的系统调用,进程必须传递一个名为系统调用号(system call number)的参数来识别所需的系统调用,eax寄存器就用作此目的。所有的系统调用均返回一个整数值。系统处理程序与其他异常处理程序的结构类似:在内核态保存大多数寄存器的内容 调用名为系统调用服务例程的相应的C函数来处理系统调用 退出系统调用处理程序:用保存在内核栈中的值加载寄存器,cpu从内核态切换回到用户态。...
2020-11-28 18:30:18 168
原创 Linux中的poll
系统调用poll() //传入带监听的所有文件描述,以及相应数量和超时事件将用户空间的文件描述等数据转存到内核空间的poll_list中遍历每一个文件描述,并调用文件描述的poll()方程返回每一个文件描述的IO准备情况,0-为准备好,1-准备好根据是否有文件准备好或者超时判断当前poll调用是否结束;如果不结束,则开始睡眠;否则poll系统调用返回...
2020-11-28 14:08:58 165
原创 Linux中的epoll机制
Linux中的epoll机制的作用用于一次监听多个描述符的可读可写状态,而不需要为每个描述符创建一个线程。相关的APIint epoll_create(int max_fds)传递的参数为可监听的最大描述符数量,返回一个epoll对象描述符。int epoll_ctl(int epfd, int op, int fd, struct epoll_event* event)注册待监听的描述符int epoll_wait(int epfd, struct epoll_even..
2020-11-28 14:03:18 157
原创 Linux中的inotify机制
Linux中INotify机制的作用用于检测文件系统的变化。可以用于单个文件,也可以用于检测整个目录。如果是整个目录的话,目录本身及目录中的内容都会是检测的对象。
2020-11-28 13:57:02 238
原创 SOCKET编程
socket编程分为server端和client端。在server端的基本流程为:创建socket(socket())->绑定端口(bind())->监听端口(listen())->阻塞等待(accept())-> 对socket读/写(read(),write())-> 关闭socket(close())在client端的基本流程为:创建socket(socket())-> 连接服务器(connect())->对socket读/写->(rea.
2020-11-28 13:54:12 90
原创 LCD帧率读取命令
LCD读取帧率的命令dumpsys SurfaceFlinger | grep -Ei "MaxBrightness|fps"在命令行中输入以下shell命令,可循环读取帧率,也可将以下命令封装成一个简单的shell脚本:while true ;dosleep 2;dumpsys SurfaceFlinger | grep -Ei "MaxBrightness|fps";done...
2020-11-28 12:45:41 448
原创 Linux中的特殊进程:idle进程、init进程、kthreadd进程
Linux中的三个特殊进程:idle进程: 该进程是Linux中的第一个进程(线程),PID为0; idle进程是init进程和kthreadd进程(内核线程)的父进程;init进程: init进程是Linux中第一个用户空间的进程,PID为1; init进程是其他用户空间进程的直接或间接父进程;kthreadd(内核线程): kthre...
2020-11-27 19:24:18 1876
原创 LCD相关术语
LABC:LightAdaptive Brightness Control //根据环境光变化调整屏幕亮度达到省电的目的(需要光感的支持;需要调制合适背光曲线)CABC:Content Adaptive Brightness Control //根据显示内容调整屏幕背光达到省电的目的(一般都是往屏幕IC里下供应商提供的参数)...
2020-11-27 12:15:51 1142
原创 Android性能调试工具:Systrace(二)浏览和解读Systrace报告
查看systrace报告的键盘快捷键键 说明 W 放大跟踪时间轴。 A 在跟踪时间轴上向左平移。 S 缩小跟踪时间轴。 D 在跟踪时间轴上向右平移。 E 以当前鼠标位置为中定位跟踪时间轴。 M 高亮当前选区。 1 将当前正在使用中的选择模型更改为“选择”模式。对应于鼠标选择器工具栏中显示的第 1 个按钮(请参见右图)。 2 将当前正在使用中的选择模型更改为“平移”模式。对应于鼠标选择器工具栏中显示的第 2 个
2020-11-23 22:03:15 1157
原创 Android性能调试工具:Systrace(一)命令行工具的安装
Systrace 是平台提供的旧版命令行工具(Android 10以上用的都是Perfetto工具),可记录短时间内的设备活动,并保存在压缩的文本文件中。Systrace 工具会生成一份报告,其中汇总了 Android 内核中的数据,例如 CPU 调度程序、磁盘活动和应用线程。Systrace命令会调用Systrace工具,您可以借助该工具收集和检查设备上在系统一级运行的所有进程的时间信息。如何搭建运行Systrace命令的环境?配置python环境pytho...
2020-11-23 20:57:14 4466 1
原创 Android性能调试:系统跟踪应用---Perfetto
什么是系统跟踪应用?“系统跟踪”应用是一款用于将设备活动保存到跟踪文件的 Android 工具。多用于分析性能问题;什么是Perfetto?Perfetto 是 Android10 中引入的全新平台级跟踪工具。Android10(API 级别 29)或更高版本的设备上,跟踪文件会以 Perfetto 格式保存;生成的跟踪文件存储在设备的“/data/local/traces”目录下,文件的后缀名为“.perfetto-trace“;用于解析“.perfett...
2020-11-23 13:16:26 15835 1
原创 ServiceManager(二)构建
Client:发送请求的一方Server:接收请求并提供服务的一方ServiveManager自身也同样是Binder Server;在Android系统中Binder Server另一个常见的称谓是"xxx Service",如Camera Service、MediaPlayer Service;ServiceManager启动的很早,能够保证是系统中第一个向Binder驱动注册成“管家”的程序;http://androidxref.com/9.0.0_r3/xref/fr...
2020-11-18 23:16:02 149
原创 ServiceManager(一)简介
C/S(Client/Server)架构的应用在安卓中随处可见;ServiceManager在安卓中承担着管理Server的责任;Client在向Server发起请求之前需要先定位Server;举个形象的例子,工作中需要发邮件,发邮件之前得先在邮箱列表中找到收件人,才可以准确地进行交互;Client如何定位的Server?ServiceManager可类比为"DNS"服务器,该服务器自身的“IP地址为0”;ServiceManager帮助Client路由到Server;..
2020-11-18 22:05:06 1692
原创 程序在运行期间保存数据的6个区域
程序在运行期间有六个地方可以保存数据:(1) 寄存器寄存器是(cpu读取数据速度)最快的保存区域,因为寄存器处于处理器(这里特指cpu)内部。但寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。程序员对(用于保存数据的)寄存器分配没有直接控制权,也不可能在自己的程序(高级语言编写的程序)里找到寄存器存在的任何踪迹。(2) 堆栈(逻辑上的概念)驻留于常规RAM(随机访问存储器---物理上的概念,对应实际的存储器件)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指.
2020-11-14 14:08:22 1043 1
原创 Binder机制初识
Binder是Android系统中大量使用的IPC(Inter Process Communication,进程间通信)机制;lBinder在Android中的使用情景:应用程序对服务器的请求;应用程序自身提供对外服务;Unix/Linux下传统的IPC机制有哪些?管道、消息队列、共享内存、信号量、Socket等;为什么在Android中会大量使用Binder机制?(传统的IPC ,socket会用)Binder本身是C/S架构的,更符合Android系统架构;...
2020-10-27 22:02:14 139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人