- 博客(242)
- 资源 (8)
- 问答 (1)
- 收藏
- 关注
原创 指纹驱动调试
在kernel初始化前驱动程序,生成指纹节点,系统Biometrics服务启动后,指纹so库(指纹厂商一般把它叫CA库)和TA库加载完成后,用户在设置界面点击录入指纹菜单时,会下发指令调用指纹CA库的预录入接口,进行各项初始化,包括初始化CA和TA环境(主要是启动HAL工作线程,比如监视驱动上报的中断事件之类的,给TA或CA申请内存,准备好后续会用到的各结构体之类的事情),采样次数的设置以及生成记录本次操作的Token(防止第三方操作的篡改)。
2024-10-26 12:08:09 80
原创 Kernel Memory分解
从该部分可以了解是否有orphaned buffer, 这个buffer是谁alloc的, leakage的pid是多少, buffer的fd是多少, 然后从上面5.2.2.6的pid(alloc_pid) comm(client) 这几个字段可以了解到最近access这个buffer的user的pid和process name;所以可以用DMA - BUF的值来做简单的参考,但是因为该值有包含kernel driver分配的dmabuf,所以也会比实际的EGL PSS 计算的要偏大一点。
2024-10-24 21:02:35 873
原创 内存基础相关
可以了解系统详细的memory使用的情况,通过dumpsys meminfo 可以得到系统中各个process占用的内存情况,各种adj情况下的process的内存分布,总体的memory的使用统计等信息。kernel 里面的leak大都是driver不合理的memory 使用导致的可以使用page owner来抓,判断native的process是否有leak,就是可以根据上述的native process里面是否有使用内存异常的process来判断。这部分内存drop cache可以被回收。
2024-10-24 20:30:00 171
原创 MTK的ATA工厂PCBA贴片验证测试
为节省工厂测试的人力,MTK提供的自动测试助手,在生产线上自动进行MMI测试。图示大概如下:MTK SP_ATA tool用于工厂板级BSP测试,验证贴片并烧录软件后的各个硬件功能模块的基本功能是否正常。实际测试时,PC端ATA tool通过USB或UART线与DUT连接进入工厂模式,工具发AT命令给DUT告知要测试哪一项;DUT测试完成后将结果返回给PC ATA tool,在PC工具上显示测试成功或失败。
2024-08-25 12:30:00 282 1
原创 充电IC ETA6937的一次log分析过程
VMREG与寄存器2的VOREG比较,取较小值作为电池CV电压值,本案VOREG值更小为4.4V,如后图3。ICHG结合寄存器4的ICHG可知:10011对应电流为2.45A 如后图1;ICHG需要与寄存器5的ICHG结合。寄存器0x0: 0x1101 0000 (寄存器0x7: 0x00000 0000(寄存器0x3: 0x0101 0100(寄存器0x4: 0x0011 0010(寄存器0x5:0x1001 0100(
2024-05-19 12:45:00 204
原创 充电与电池
电池BC1.2识别错误很多时候是波形受到干扰,所以首先要确认硬件收到的波形是否正确。CDP:DCP:SDP:Design notice中的介绍,其中寄存器的BAT_COMPVCLAMPdefault是0,指的是ic默认是0。Code初始化时会去拿mt6370.dtsi中的值设置进RG中。
2024-05-17 18:05:57 129
原创 MTK的软件下载
在Option->Tracing->DA_log选项中,将DA_log_channel设为usb. DA_log_level有三个选项:info,debug,trace, 三个选项的区别是log量的多少,从log量从少到多的顺序为info->debug->trace。一般用于debug,选择debug即可。设置完成之后,直接做下载操作即可。如果没能找到相应的解决办法,需要提CR,详细描述问题现象,问题必现的路径,做过的对比试验等,并提供download fail的tool log和uart log。
2024-05-06 21:28:21 541
原创 踩内存问题分析方法
比较麻烦的在于程序奔溃点在之后的某个时间出现。此时array为全局数组,则被踩坏的内存也属于全局数组(除非array定义在全局区域的边缘),此种情况比较容易查找,通常也是由于index越界引起,可通过被踩坏内容的特征往前推,大致推导开始踩的位置,找出对应的全局变量后检查代码逻辑,看是否存在溢出。看到func没有对参数i做范围检查,极可能传进的i超过10,甚至是负数,这就无法知道被踩坏内存位置和自己内存位置,此种问题也是最难查的,因为可能每次奔溃的情况都不一样。1.1.2. 栈溢出。
2024-01-06 16:44:27 1852
原创 死机重启不开机
这种情况的原因是panic或HWT流程卡住导致HW reboot了,需要参考last kmsg,按普通的kernel panic或HWT分析,找问题的原因。HW reboot没走任何软件流程,是直接复位的,无法知道CPU处于什么状态,因为重启后什么都丢了,不像kernel panic或HWT有详尽的CPU寄存器和调用栈参考。1/5:表示HW reboot(如果fiq step不为0则是有发生panic然后才发生的HW reboot,此时应该先看panic),看门狗发出FIQ还是无法得到响应,只能硬件复位。
2024-01-05 14:02:26 996
原创 CAMERA调试
1.1. kernel-4.19\arch\arm\configs\k39tv1_bsp_1g_k419_debug_defconfig 与 kernel-4.19\arch\arm\configs\k39tv1_bsp_1g_k419_defconfig。在config_static_metadata.sensor.xxx.h文件中将 CONFIG_ENTRY_VALUE(MTK_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME, MUINT8)改为。
2023-12-14 18:27:43 284
原创 NVRAM相关
假设修改的是NVRAM_EF_IMS_PROFILE_LID这只NVRAM的默认值,它的文件名前缀MT79,升级前的NVRAM_EF_IMS_PROFILE_LID_VERNO号是000,修改默认值后将NVRAM_EF_IMS_PROFILE_LID_VERNO修改为001,那么Download Only升级前/data/nvram/md/NVRAM/NVD_DATA/目录中就有MT79_000这只文件。里面存的是普通NVRAM,2G RF driver NVRAM,3G RF driver NVRAM。
2023-12-07 14:34:32 467
原创 TP触摸屏调试
在系统亮屏或灭屏时,会调用回调tpd_fb_notifier_callback,并通过参数data实时传入FB_BLANK_UNBLANK(亮屏)与FB_BLANK_POWERDOWN(灭屏)的值,从而在亮屏时queue_work调度任务touch_resume_work运行并执行敦泰的resume(g_tpd_drv->resume(NULL)),灭屏时cancel_work_sync挂起任务touch_resume_work并执行敦泰的suspend(g_tpd_drv->suspend)。
2023-11-11 15:54:35 1592
原创 LCD调试
BOOT_LOGO = hd720 --- 根据屏分辨率来选择开机logo 位置在 vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo。后续所有围绕lcd的驱动处理,都会回到上面nt35521_hd_dsi_vdo_truly_nt50358_lcm_drv中所注册的函数。lcm_drv->init_power 对应 lcm_init_power --- 上电。--- 主要是跑屏初始化列表寄存器。
2023-11-04 16:16:42 251
原创 Flash ddr调试
流程:先确认所使用DDR类型(eMCP或分离式DDR+eMMC,可与项目经理确认),确认完DDR类型后,在官网online上面QVL查询是否有对应时序,若无,则可让flash供应商提供时序。大概意思为先读取eMMC firmware的emmc id,再与解析后的xlm时序表中的emmc id做遍历,若找到,则初始化ddr。--- CUSTOM_CONFIG_MAX_DRAM_SIZE的大小不能小于实际DRAM大小,DRAM会自适应物理DRAM的size。背景: Android T。
2023-06-17 17:18:13 624
原创 Keil v5小红叉消除
1. Project中的小红叉,如:去除方式:右键 --> Update Config File(Ver:0.0.0 -> 1.0.0):2. 代码中的红叉,如:以上红叉并不影响正常编译与程序的执行,可通过以下方式消除:
2022-03-25 15:16:40 3826
原创 keil编译报错找不到core_cm3.h文件
安装一次CubeMx后,可编译的工程报错:.\platform\Start_up\stm32f10x.h(478): error: #5: cannot open source input file "core_cm3.h": No such file or directory因为缺失CMSIS
2022-01-18 09:09:38 7034 3
原创 简单的链式队列
链式队列为使用链表来实现队列的存储结构。它创建两个指针top与rear分别指向链表头与链表尾部。下面是一个头节点的示意图:此时队列中未存储数据,top与rear指针同时指向头节点。添加一个新节点示意图:1. rear->next指向新添加的节点node2. 新添加的节点node成为新的rear节点删除一个元素示意图如下:完整代码如下:#include <stdio.h>#include <string.h>#includ...
2021-11-12 14:31:40 781
原创 SELinux
1.何为SELinux:SEAndroid是SELinux in Android的缩写。SELinux全称Security Enhanced Linux,即安全增强版Linux,它并非一个Linux发布版,而是一组可套用在类Unix操作系统(如Linux、BSD等)的修改,主要由美国国家安全局(NSA)开发,已经被集成到2.6版的Linux核心之中,现已有十几年的开发和使用历史,是Linux上最杰出的安全子系统。标准的UNIX安全模型是“自主访问控制“DAC(Discretionary Access..
2021-08-25 17:33:08 242
原创 property_get_bool 获取系统属性并强制转为bool
int8_t property_get_bool(const char *key, int8_t default_value);根据键key所设置的值来判定返回一个bool值,若未对键key设置值,则返回默认值default_value。若key所设置的值为以下值时,函数返回true:"1", "true", "y", "yes", "on"若key所设置的值为以下值时,函数返回false:"0", "false", "n", "no", "off"若是值为" off",其中带有一个空格,则为非
2021-07-02 14:33:45 3731
原创 芯片制程与功耗,运算速度关系
首先芯片制程越小,功耗越少,运算速度越快。芯片内部实际计算单元用到的都是二极管。二极管是什么?二极管是一种半导体,实际它是单向通电的,和我们普通电线做对比,普通电线正负极对调仍然可以通电,只不过是电流方向改变了而已,但是二极管是只有在正负极接对时才通电,解反是不通电的。下面以水管止逆阀为例,该阀门只能朝一个方向打开,若水流与打开方向不一致时,则阀门就会自动闭合上。如下图所示,有两个1米高的水桶,当向A中倒水时,止逆阀就会闭合,水流不会像C桶流动;当向C桶倒水时,止逆阀就会自动打开,水流就会顺着管子向
2020-08-11 15:32:07 7721
原创 u-boot之logo show
位于u-boot\drivers\video\drm\rockchip_display.c 函数display_logo:static int display_logo(struct display_state *state){ struct crtc_state *crtc_state = &state->crtc_state; struct connector_state *conn_state = &state->conn_state; struct l..
2020-06-09 16:23:22 977
原创 uboot驱动之udevice
struct udevice --> driver的一个实例该结构保存关于设备的一些信息,这个设备是驱动绑定的某个端口或外设,在本质上它也还是个driver实例。可通过调用bind函数创建一个device,使用U_BOOT_DEVICE()宏实现(在这种情况下,platdata为非空)或在设备树中创建一个节点(在这种情况下of_offset大于0)。在后一种情况下,是将设备树信息保存到platdata中去的,保存操作的函数为驱动的ofdata_to_platdata方法(当设备是一个设备树节点形式
2020-06-04 19:36:29 3568 1
原创 Makefile赋值符 = := ?= +=
[ = ] 与c语言类似,有一个特点就是在Makefile完全展开后,变量取最后一次的赋值。如:x = fooy = $(x) barx = abc此时y值是abc bar,而不是foo bar。[:=] 与前面[=]对比,[:]表示变量值取决于它在makefile中的位置,而不是等makefile展开后的值。如:x := fooy := $(x) barx := abc此时y值时foo bar,而不是abc bar。[?=] 表示若变量没有被赋值过,则就赋等号后面的值,如:foo .
2020-06-03 11:58:47 222
原创 unexport export locale LC_X
export: 表示将当前make中声明的变量和值传给sub makeunexport: 表示不要将当前make中声明的变量传给sub make。LC 是 locale的意思,它是根据计算机用户所使用的语言,所在国或地区及当地文化习俗所定义的一个runtime语言环境。比如中国大陆通常讲“文件系统”,而台湾或香港地区则使用“档案系统”,因此就需要有一套为各地区服务的本地化系统。locale根据使用习惯分为了12大类:1.LC_CTYPE 表示语言符号及其分类,控制字符处理方式,包括字符编码,字符.
2020-06-03 11:09:17 1066
原创 System.loadLibrary动态库加载
System.loadLibrary先查找APK中的so目录,再查找系统目录/system/lib(64),/vendor/lib(64), Android中动态库的加载与Linux本质上是一样的,最终都是调用了dlopen,dlerror,dlsym, dlclose方法,通过动态库句柄和所需调用的函数名来调用动态库中对应的函数。...
2020-05-28 15:58:33 1437
原创 libcardboard_jni.so missing and no known rule to make it
需要编译一下sdk。编译方式如下:
2020-05-27 19:48:03 528 1
原创 PS8622 DP转LVDS
DP转LVDS转换器:1. 1 Lane DP输入,1 Lane LVDS输出PS8622是一款DP转LVDS的器件。DP信号或eDP信号来自于带GPU的PC机,转换后的LVDS输入到一个显示面板去显示。2.功能:1. 使能LVDS显示面板,源视频设备有着DP或eDP接口2.支持视频格式色深18位 高达1680x1050@60Hz或色深24位 高达1440x900@60fps3. 采用普瑞的CystalFree技术,无需额外的晶体或时序参考4. 单一3.3V或2.5V供电,功耗低,普通
2020-05-15 14:27:24 2727
原创 TI快充芯片-BQ25890
它是一个针对单个锂电池和聚合物锂电池的,5A开关模式电池充电芯片。它集成输入反转模块FET(RBFET-Q1),高端开关FET(HSFET-Q2),低端开关FET(LSFET-Q3)和电池FET(BATFET-Q4)。在高端门驱集成升压二极管。功能描述:1. 设备POR(Power-On-Reset)VBUS和BAT给内部偏置电路供电,当VBUS大于Vvbus_uvloz或BAT大于Vb...
2020-04-30 10:19:06 9329 1
原创 散列表(哈希表)
数组特点是查找容易,插入删除困难;链表特点是查找困难,插入删除容易。而散列表可以取数组与链表的优点。散列表就是把key通过一个固定算法函数(哈希函数)转换成一个整型数字,在将该数字对数组长度取余,取余的结果就当做数组下标,后将value存储在以该取余结果为下标的数组中。公式: 存储位置 = f(关键字)实例:#include "stdafx.h"#include <stdlib...
2020-04-16 15:53:59 379
原创 双向循环链表
双向链表节点有两个指针域,一个前驱指针,一个指向后继指针。且链表中第一个节点前驱节点为NULL,最后一个节点后继节点为NULL// myLink.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdlib.h>typedef struct bidir_link_list { struct bidir_lin...
2020-04-16 11:28:47 318
原创 notify通知链机制
notifier是一种异步通信机制,比如模块A对事件E感兴趣,但事件E是由模块B产生的,则A可通过通知链机制从B获取事件E。notifier结构体在文件kernel\include\linux\notifier.h中声明:1. notifier回调函数声明, action即为发生的事件,data为携带的结构数据信息:2.notifier通知链表3.优先级,数字越大优先级越高,表示任务执行...
2020-04-15 13:11:01 762
原创 devm_regmap_init_i2c
内核在3.1版本加入了regmap模块,主要是给I2C,SPI总线的读写提供一个统一的接口,后来陆续添加了以下接口的支持:1. 支持SPMI,MMIO2.Spinlock和客制化lock机制3.Cache支持4.字节序转换5.寄存器范围检查6.IRQ支持7.只读和只写寄存器8.Precious寄存器和volatile寄存器9.寄存器页两个最重要的结构体struct regm...
2020-04-14 17:16:12 6154
原创 devm_kzalloc
devm_kzmalloc()是资源管理版本的kzalloc(),它与设备关联,来进行内存的申请与释放。也就是设备从系统中剥离,设备驱动被卸载后,使用该函数申请的内存会自动释放。void * devm_kzalloc(struct device *dev, size_t size, gfp_t gfp);参数:dev --> 需要申请内存的设备size --> 申请的内存大...
2020-04-14 15:58:07 995
原创 Android Kernel 等待队列waitqueue --NFC PN54x的处理过程
等待队列中存放的是被阻塞的进程。而唤醒进程,就是从等待队列中把进程放到就绪列表中去等待运行。1.声明等待队列:2.probe中初始化等待队列:3.等待队列中去睡眠,其中又分为有条件睡眠和无条件睡眠,一般使用有条件睡眠:有条件休眠函数:wait_event_interruptible(queue, condition)当condition为true(BOOL值)时,立即返回;否则让进程进...
2020-04-13 15:22:53 419
原创 dtsi属性
各符号含义如下:/ --> 表示根节点@ --> 指定设备地址& --> 引用节点: --> 冒号前的是节点别名label,一般是以&label方式使用。如上面vdd_gpu所示。, --> 都好可用于属性名称中,如上面compatible属性可知,以逗号分隔开。# --> 表示reg属性的格式,比如address-cells...
2020-04-08 19:15:10 1650
原创 Flash烧录工具SuperPro Model610P 操作记录
a. 1个电源adapter供电,1根USB数据线插入到PC的USB端口1个烧录座子,以Flash WINBOND W25Q32FW芯片为例,实物安放如下:b.操作软件:1.快捷键图标:2.界面,主要操作步骤:文件打开,选择器件以及Auto:a.打开文件:b.器件选择,可选多个厂商芯片配置。...
2020-03-26 10:11:53 3435
原创 RK3399PRO的字符spi设备驱动
Linux 4.4内核SPI驱动特性:①默认采用摩托罗拉SPI协议②支持8位和16位③软件可编程时钟频率和传输速率高达50MHz④支持SPI 4中传输模式的配置⑤每个SPI控制器支持一个到两个片选1. 首先申请设备号(动态):int alloc_chrdev_region(dev_t *dev,unsigned baseminor,unsigned count,const cha...
2020-03-16 11:55:02 1037
原创 RK3399Pro ueventd.rockchip.rc
1. 该文件位于 rk3399pro\device\rockchip\common\ueventd.rockchip.rc, rc只是一个资源文件,类似于xml,以gps为例:/dev/ttyS1 0660 gps gps分别对应设备节点,设备权限,设备所有者,设备所有者所在组。2. 在它被解析使用前,还有一个init.rc文件会用到,位于rk3399pro\sys...
2020-02-28 11:48:07 1159
原创 RK3399Pro DTSI PIN-CTRL
1. 类似IOMUX的如下配置含义: i2c3_gpio: i2c3_gpio { rockchip,pins = <4 17 RK_FUNC_GPIO &pcfg_pull_none>, ...
2020-02-13 11:20:05 1654
glfw-3.3.2.bin.WIN64.zip
2020-04-21
套件php 集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader
2020-03-12
客户端断开服务端就会产生异常并断开
2018-01-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人