自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (5)
  • 收藏
  • 关注

原创 基于UMDF2 获取DSDT硬件资源(Finding and Mapping Hardware Resources) Windows 驱动程序

1. 背景作为一位标准的 WINDOWN 驱动开发人员最痛苦并快乐着就是如何获取DTDS的硬件资源,并操作GPIO。,UMDF2 框架的特殊性,并不能直接获取硬件资源和操作GPIO(后期再详解),硬件资源文件DSDT在启动的时候被KERNEL获取和解析,然后通过API的方式UMDF2才能通过KMDF映射并获取资源。因此,基于此基础上,就有了本文的撰写目的。2. 概要2.1 环境约定运行环境:WIN10/WIN11开发工具:VS2019SDK版本:wdksetup.exe驱动框架:UMDF2

2022-01-12 10:37:39 409

原创 基于UMDF2将 WPP 软件跟踪添加到 Windows 驱动程序

1. 背景作为一位标准的 WINDOWN 驱动开发人员最痛苦并快乐着就是构建驱动框架时都喜欢构架自己的LOG框架,直接调用系统的接口函数显得太生涩和苦逼了;而 window 驱动的原生态log API 调用又繁琐且麻烦。因此,基于此基础上,就有了本文的撰写目的。2. 概要2.1 环境约定运行环境:WIN10/WIN11开发工具:VS2019SDK版本:wdksetup.exe驱动框架:UMDF22.2 参考文档 `[1] https://docs.microsoft.com/zh-cn

2021-12-03 14:07:36 7365

原创 Linux IRQ Sub System VI

GIC-V3分析GIC-V3概述GIC:The Generic Interrupt ControllerARM架构下GIC支持好几个版本,GIC-v1, GIC-v2, GIC-v3, GIC-v4在此重点聚焦在GIC-V3版本,而GIC-V3版本的典型代表就是GIC-500.关于GIC-500的特性.GIC-500可以最大支持128Cores.GIC-500目前只支持ARMv8架构.GIC支持四种中断类型.支持CPU-Interface, Distributor如下,GIC-500和C

2021-11-14 22:41:23 680

原创 Linux IRQ Sub System V

驱动申请中断APIrequest_irq框架流程图如下所示:具体流程如下所示;request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) return request_threaded_irq(irq, handler, NULL, flags, name, dev);/*/** * request_threaded_irq - allocate

2021-11-14 22:29:52 593

原创 Linux IRQ Sub System IV

High level irq event handler综述当外设触发一次中断后,一个大概的处理过程是:1)具体CPU architecture相关的模块会进行现场保护,然后调用machine driver对应的中断处理handler2)machine driver对应的中断处理handler中会根据硬件的信息获取hwirq,并且通过irq domain模块翻译成virq3)调用该virq 获取对应中断描述数组,并获取对应的handle_irq,在这个high level的handler中,会通过

2021-11-14 22:23:23 612

原创 Linux IRQ Sub System III

IRQ number和中断描述符综述在linux kernel中,对于每一个外设的IRQ都用struct irq_desc来描述,我们称之中断描述符(struct irq_desc)。linux kernel中会有一个数据结构保存了关于所有IRQ的中断描述符信息,我们称之中断描述符DB。当发生中断后,首先获取触发中断的hwirq,然后通过irq domain翻译成virq,然后通过virq就可以获取对应的中断描述符(以virq为数组irq_desc[virq]的下标获取对应的irq_desc)。调用中

2021-11-14 22:19:24 588

原创 Linux IRQ Sub System II

IRQ Domain概述在 linux kernel中,我们使用下面两个ID来标识一个来自外设的中断:1)IRQ number,即virq.CPU需要为每一个外设中断编号,我们称之IRQ Number。这个IRQ number是一个虚拟的interrupt ID,和硬件无关,仅仅是被CPU用来标识一个外设中断。2)HW interrupt ID,hwirq.对于 interrupt controller 而言,它收集了多个外设的中断信号并向上传递,因此,interrupt controller 需要

2021-11-14 22:13:23 215

原创 Linux IRQ Sub System I

引言目的一个合格的linux驱动工程师需要对kernel中的中断子系统有深刻的理解,只有这样,在写具体driver的时候才能:1)正确的使用linux kernel提供的的API,例如最著名的request_threaded_irq(request_irq)接口2)正确使用同步机制保护驱动代码中的临界区3)正确的使用kernel提供的softirq、tasklet、workqueue等机制来完成具体的中断处理基于上面的原因,我希望能够通过本篇文档来描述清楚linux kernel中的中断子系统方

2021-11-14 21:56:51 849

原创 linux 内核与用户空间通信之netlink原理与应用

linux 内核与用户空间通信之netlink原理与应用1. 概述2. 背景与应用3 Netlink机制及其关键技术4. 其他相关说明5. API5.1 用户态API5.2 内核态API6. Netlink 实例应用6.1 应用层代码6.2 内核代码1. 概述 本文是基于MTK6779 Android Q (kernel-4.9)内核版本来分析的。Linux中的进程间通信机制源自于Unix平台上的进程通信机制。Linux实现了以下几种主要的IPC机制:管道(Pipe)及命名管道(Named Pi

2020-06-03 17:09:28 766

原创 Android P: 系统启动流程之init进程II

Android P: 系统启动流程之init进程II1. 概述2. 创建进程会话密钥并初始化属性系统2.1 keyctl2.2 property_init2.3 CreateSerializedPropertyInfo2.4 __system_property_area_init2.5 process_kernel_dt();2.6 property_set2.7 process_kernel_cmdline();2.8 export_kernel_boot_props();//其他属性设置3. 进行SEL

2020-05-26 17:58:37 498

原创 Android P: 系统启动流程之init进程I

Android P: 系统启动流程之init进程I1. 概述2. ueventd/watchdogd跳转及环境变量设置2.1 ueventd_main2.2 watchdogd_main2.3 install_reboot_signal_handlers3. 挂载文件系统并创建目录3.1 mount3.2 mknod3.3 其他命令4. 初始化日志输出、挂载分区设备4.1 InitKernelLogging4.2 InitLogging4.3 KernelLogger4.4 DoFirstStageMou

2020-05-22 19:11:31 896

原创 电池测试的几个误区

[FAQ11648] 电量测试误区内容 (2016-08-03)[DESCRIPTION] 实际电池测试存在一些电量跳变问题,对一些由于电池特性引起的跳变,做如下解释。[SOLUTION]多次连续开关机或者recovery,导致电量跳变。– 这是因为电池的特性,电池恢复回原始电压需要30min.– 多次开关机会造成电池电压一直再下降,而电量会在头几...

2020-04-30 17:11:08 660

原创 等待队列概念以及使用

等待队列概念以及使用1.等待队列 wait_queue_head_t2.使用过程3.简单例子4.总结1.等待队列 wait_queue_head_t 等待队列用于使得进程等待某一特定事件的发生,无需频繁的轮询,进程在等待周期中睡眠,当事件发生后由内核自动唤醒。 等待队列是一种实现阻塞和唤醒的内核机制,很早就作为一个基本的功能单位出现在Linux内核中,它以队列为基础数据结构, 与进...

2020-04-30 17:03:52 789

原创 高分辨率定时器

高分辨率定时器1.定时器的工作模式2.高分辨率kernel定时器使用流程3.高分辨率定时器的一个简单使用例子1.定时器的工作模式enum hrtimer_mode { HRTIMER_MODE_ABS = 0x0, /* Time value is absolute */ 绝对时间 HRTIMER_MODE_REL = 0x1, /* Time value is relative to...

2020-04-30 17:00:56 572

原创 怎样基于power supply class编写PSY driver

(1)根据硬件spec,确定PSY设备具备哪些特性,并把他们和 enum power_supply_property 对应。(2)根据实际情况,实现这些 properties 的 get/set 接口。(3)定义一个struct power_supply 变量,并初始化必要字段后,调用power_supply_register或者power_supply_register_no_ws,...

2020-04-30 16:57:03 190

原创 MT6580 Android N Battery框架总结

MT6580 Android N Battery框架总结1.概念2.相关文件关系3.硬件原理图4.充电框架总结1.概念 ZCV:开路电压 OCV: 开路电压 VC:闭路电压 CAR:库伦计 DOD: 放电深度,100-DOD 即电容容量 Cmax/Qmax: 电池容量2.相关文件关系 ...

2020-04-30 16:53:08 576

原创 BC协议总结

BC协议总结1、 问:为什么要引入这个规范?答:原有USB2.0规范并没有考虑到使用USB接口为便携式设备的电池进行充电的需求,而这样的需求却越来越多。BC规范要解决的就是这个问题,符合规范的设备和系统即向下兼容USB2.0标准,又针对充电做出了特别的优化。2、 问:BC的内容是什么答:BC规范的核心内容就是引入了充电端口识别机制。3、 问:便携式设备有几种USB充电接口?答:有三...

2020-04-30 16:23:35 1464

原创 V4L2框架分析

V4L2框架分析NO_1. 术语讲解 V4L2 即: video for Linux version 2 uvc: usb video class NO_2. 硬件相关的 uvc_driver.c static int __init uvc_init(void) ret = usb_register(&uvc_driver.driver); struct u...

2020-04-23 14:22:14 265

原创 MT6580 Android N camera 框架分析

MT6580 Android N camera 框架分析整个框架分为三个部分:hal部分逻辑调用,kernel层的通用驱动sensorlist.c 和具体IC的驱动xxxx_mipi_raw.c 。 kernel起来后不会直接去访问硬件sensor,而是会注册相关的驱动,之后Android系统起来后会启动相关的服务如: camera_service ,在camera服务中会直接去访问hal,...

2020-04-23 14:19:02 490

原创 UART通信协议

硬件连接:通常有三根线,分别为TXD,RXD,GND。通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。UART通信在工作中相当常见,项目中需要生成uart信号,在博客中记录下。uart是异步通信,因为它只有一根线就可以数据的通信。不像SPI,I2C等同步传输信号。所以串口的传输速度和其它协议的速度相比是比较慢的。下面具...

2020-04-23 14:07:17 2666

原创 IIC通信协议总结

IIC通信协议总结处理器和芯片间的通信可以形象的比喻成两个人讲话:1、你说的别人得能听懂:双方约定信号的协议。2、你的语速别人得能接受:双方满足时序要求。看IIC协议先:两条线可以挂多个设备。IIC设备(稍微有点智能的)里有个固化的地址。只有在两条线上传输的值等于我(IIC设备)的地址时,我才作出响应。开始信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由高变低就表示一个开始信...

2020-04-23 14:02:40 810

原创 Linux Kernel 序列文件(seq_file)接口实战

@[TOC](Linux Kernel 序列文件(seq_file)接口实战)1.PROC文件系统简介使用 /proc 文件系统来访问 Linux 内核的内容,这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口:/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux内核空间和用户间之间进行通信。在/proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中...

2020-04-20 18:21:34 1303

原创 Linux Kernel IIC 实战

Linux Kernel IIC 实战1.驱动源码2.测试源码1.驱动源码#include <linux/module.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include...

2020-04-20 15:31:51 196

原创 Linux Kernel IRQ 实战

Linux Kernel IRQ 实战1.驱动实例2.测试实例1.驱动实例备注:1.0 以mtk平台为参考点;2.0 以按键的IRQ方式为用例参考#include <linux/module.h>#include <linux/sched.h>#include <linux/kernel.h>#include <linux/fs.h>...

2020-04-20 15:14:53 418

原创 Linux kernel定时器timer_list

Linux kernel定时器timer_list1.简单介绍一下定时器timer_list:2.实例演示3.总结1.简单介绍一下定时器timer_list:1.0 所在头文件:linux/timer.h1.1 结构体: struct timer_list { /* * All fields that change during normal runtime grouped to...

2020-04-20 11:10:17 755

原创 Android O/P/Q SELinux avc dennied权限问题分析与解决

Android O/P/Q SELinux avc dennied权限问题分析与解决1.概述2.确认SELinux问题3.案例分析案例1案例2案例3案例44.万能公式5.归纳6.第三方进程改新增全新的te文件并赋予权限6.1新设备节点增加访问权限6.2新文件/目录增加访问权限1.概述Android SELinux是Google从android L 开始,强制引入的一套非常严格的权限管理机制,主...

2020-04-16 18:25:03 2103

原创 MT6580 Android N MODEM调试

MT6580 Android N MODEM调试1.单软多硬2.DEBUG1.单软多硬即,一个版本的modem配置多个频段的3G/2G。通过检测特定GPIO的电平状态,形成排序,从而选择多个频段信号。开关:moly/custom/modem/ul1_rf/CUSTOM_MT6580RF_UMTS_FDD$ vim ul1d_custom_rf.h#define RF_SETTING_BY...

2020-03-31 22:43:11 526

原创 MT6580 Android N SIM卡调试

MT6580 Android N SIM卡调试1.配置单卡2.热拔插配置1.配置单卡MTK_MULTI_PARTITION_MOUNT_ONLY_SUPPORT = no-MTK_MULTI_SIM_SUPPORT = dsds +MTK_MULTI_SIM_SUPPORT = ss MTK_MULTI_STORAGE_SUPPORT = yes2.热拔插配置vim device/ze...

2020-03-31 22:34:08 610

原创 MT6580 Android N RecoveryMode调试

MT6580 Android N RecoveryMode调试1.DEBUG1.1修改进入 RECOVERY MODE 不进入选择菜单,按 POWER+VOL 直接进去小机器升级画面1.DEBUG1.1修改进入 RECOVERY MODE 不进入选择菜单,按 POWER+VOL 直接进去小机器升级画面alps/bootable/recovery/ui.cppalps/bootable/re...

2020-03-31 22:13:18 1176

原创 MT6580 Android N battery调试

MT6580 Android N battery调试1.硬件原理2.FG 原理3.软件框架3.1common 层充电函数的位置:3.2客制化的地方3.3电池曲线客制化3.4电池状态查询4.DEBUG4.1关机充电不显示低电界面,改为显示 LOGO,避免误解4.2更改为高压电池充电1.硬件原理术语注释:VBUS :USB 正极VCDT :充电电压检测脚ISENSE :充电电流检测电阻的正...

2020-03-31 12:56:22 1179

原创 MT6580 Android N camera调试

MT6580 Android N camera调试1.硬件原理2.平台配置3.kernel配置3.1config配置3.2 dts3.3driver code3.4 闪光的控制4.hal配置4.1camera配置4.2闪光的效果调试5.Android层配置6.DEBUG6.1成像方向的修改6.2 成像效果调试6.3压力测试概率黑屏卡死等问题6.4前置 camera 没有搭配闪光灯,如何关闭闪光灯图...

2020-03-29 01:59:42 1082

原创 MT6580 Android N TP 调试

MT6580 Android N TP 调试1.硬件电路2.kernel 配置2.1config配置2.2driver code移植2.3DTS配置3.DEBUG3.1 TP跳点/效果优化3.2 TP兼容3.3 TP固件刷新1.硬件电路如下图所示,主要是iic、rst、int、avdd的配置。2.kernel 配置2.1config配置以下一墩泰TP为例:vim kernel-3.1...

2020-03-24 18:01:28 441

原创 git 创建分支并关联远程分支

git 创建分支并关联远程分支1. 切换到被copy的分支(master),从服务器拉取最新版本2. 从当前分支copy出新的开发分支 命名 fingerprint 分支3. 把新建的分支push到远端4. 拉取远端分支5. 关联6. 再次拉取 验证git 创建分支并关联远程分支从master分支,重新拉取出一个新的分支,名字为fingerprint,具体命令如下:1. 切换到被copy的分...

2020-03-24 17:11:37 555

原创 MT6580 Android N LCM移植

MT6580 Android N LCM移植1. LCM 硬件连接2.平台配置3.kernel配置3.1config配置3.2driver code 添加4.LK配置4.1平台配置4.2driver code 添加5.BUG归纳5.1背光亮度调节5.2帧率的计算5.3在屏亮和背光之间延迟 50MS 使开机瞬 间水波纹看不到5.4LCM180 度翻转方案5.5 ESD1. LCM 硬件连接硬件线...

2020-03-23 15:50:15 982

原创 MT6580 Android N flash移植

1.FLASH移植MTK平台FLASH的移植总体来说相对于较为简单,因为MTK在平台上已经集成了对应的FLASH支持型号。方案商要做的是,就是从官网下载其平台所支持的FLASH型号时序在对应文件里填充就行了。FLASH的时序是出于pl层上。在如下所示对应目录填充时序即可。涉及两个文件:alps/vendor/mediatek/proprietary/bootable/bootloader/p...

2020-03-23 15:09:47 306

原创 SPI硬件协议

SPI硬件协议1.SPI协议2.SPI数据传输时序3. SPI总线工作方式4.协议总结1.SPI协议SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。在手机行业上使用率...

2020-03-23 14:49:07 895

原创 MTK |Android KK&L 平台TP调试

MTK Android KK&L 平台TP调试一. 简介二. 硬件电路三. 添加TP的简单流程(以GT9XX为例)3.1首先在Projecconfig.mk定义的TP宏控3.2如果是第一次调试,需要在alps\mediatek\custom\common\kernel\touchpanel添加对应的TP驱动代码,3.3根据具体的项目的分辨率和硬件信息,需要在tpd_custom_xx.h中...

2020-03-16 10:47:33 2582

原创 MTK Android kk&L 平台LCM调试SOP

MTK Android kk&L 平台LCM调试SOP1. 简介2. 调试流程步骤2.1 准备工作2.2 LCM驱动2.3 LCD效果调试2.4 LCD backlight驱动3 异常分析3.1 黑屏3.2 白屏3.3 花屏3.4 闪屏3.5 退出睡眠时候的白屏4 经验总结1. 关于LCD ID获取的处理2. 效果确认,刷屏帧率3. pwm参数4. porch计算5. 参数下载格式5 参...

2020-03-16 10:29:30 1750

原创 条件量与互斥锁的简单使用实例

#include <stdio.h>#include <stdlib.h>#include <pthread.h>static pthread_mutex_t m_lock;static pthread_cond_t m_worker_cond;static pthread_t pthread_a;static pthread_t pthread_...

2019-11-07 10:18:24 195

Android编译环境搭建.pdf

对于每一个Android开发来说无疑就难的就是环境的搭建,万丈高楼,有了环境才能创造更多的奇迹,本文基于此基础编写,意在于帮助广大Android开发爱好者搭建并理解搭建过程。经实际验证是可行的。

2020-03-13

Samba服务器搭建.pdf

在程序员实际开发中经常要在window和Linux系统实现资源共享,而Samba就是因此而诞生的,本文档基于此基础而编写,通过实际验证,是可行的。

2020-03-13

gitweb搭建与配置.pdf

git是代码管理中常使用的工具,然后纯属的git查看代码有期极限性,在实际企业开发中都会辅助gitweb以便以查看代码,此问题就是基于此缘故而编写,经实际操作验证,是可行的。

2020-03-13

Ubuntu_18.04创建Git远程仓库.pdf

关于Ubuntu18.04本地搭建远程git仓库的过程以及注意事项。通过实际的搭建并已经验证通过,是可行的。

2020-03-13

空空如也

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

TA关注的人

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