自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

转载 MotionEvent 详解

Android MotionEvent详解: https://www.jianshu.com/p/0c863bbde8ebhttps://www.diycode.cc/topics/392Android 将所有的输入事件都放在了 MotionEvent 中,随着安卓的不断发展壮大,MotionEvent 也开始变得越来越复杂,下面是我自己整理的 MotionEvent 大事记:版本号...

2018-07-23 17:23:40 4005

转载 Linux Device和Driver注册及配对过程

 *** 原文来自http://blog.csdn.net/thl789/article/details/6723350 ***Linux 2.6的设备驱动模型中,所有的device都是通过Bus相连。device_register() / driver_register()执行时通过枚举BUS上的Driver/Device来实现绑定,本文详解这一过程。这是整个LINUX设备驱动的基础,PLATF...

2018-06-29 10:31:42 2627

转载 Linux加载DTS设备节点的过程

原文地址:http://www.cnblogs.com/LoongEmbedded/p/5298222.htmlDTS是Device Tree Source的缩写,用来描述设备的硬件细节。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的pla...

2018-06-28 17:26:36 2914

原创 Linux驱动开发---gpio和gpiod

一、旧的gpio_api在GTX5驱动中兼容了两种获取GPIO、IRQ资源的方法,在老的内核版本中是通过of_get_named_gpio(node,"goodix,reset-gpio", 0)方法去获取GPIO资源的资源号(一个int型的数值),然后再使用如下方法(代码段1)对GPIO资源进行操作。代码段1r =devm_gpio_request_one(&core_data->p

2017-08-07 17:54:31 13278

原创 ASL Code中的_DSM方法

一、HID I2C设备的”_DSM”方法_DSM方法一共有4个参数,分别为Arg0、Arg1、Arg2、Arg3。该方法的具体定义以及每个参数的含义请参看ACPI 5.0规范的9.14.1小节(可直接参看本文最后附录)。该方法主要是提供了一些与设备相关的数据和操作方法,以供驱动去调用。根据微软给出的"WindowsACPI Design Guide for SOC Platforms”

2017-08-07 17:40:38 3238

原创 MTK开发板设备树的修改---I2C设备 3.18内核

修改kernel-3.18\drivers\misc\mediatek\mach\mt6797\amt6797_evb_m\dct\dct\codegen.dws目录下的DWS文件,在对应的I2C_CHANNEL上添加GOODIX的设备,并设定I2C的地址,如下代码段1中所示: 代码段1kernel-3.18\drivers\misc\mediatek\mach\mt6797\amt6

2017-08-07 17:35:24 5143

转载 Linux在文件夹下查找指定字符串

转自:http://151wqooo.blog.51cto.com/2610898/1162118如果你想在当前目录下 查找"hello,world!"字符串,可以这样: grep -rn "hello,world!" * * : 表示当前目录所有文件,也可以是某个文件名-r 是递归查找-n 是显示行号-R 查找所有文件包含子目录

2017-08-03 17:40:11 6362

转载 Linux i2c_client和i2c_driver的创建与绑定

linux下i2c驱动笔记1. 几个基本概念1.1. 设备模型由 总线(bus_type) + 设备(device) + 驱动(device_driver) 组成,在该模型下,所有的设备通过总线连接起来,即使有些设备没有连接到一根物理总线上,linux为其设置了一个内部的、虚拟的platform总线,用以维持总线、驱动、设备的关系。因此,对于

2017-07-13 12:27:44 7001 1

转载 linux驱动注册过程分析--driver_register(一)

http://blog.csdn.net/richard_liujh/article/details/45825333kernel版本3.10.14driver_register顾名思义,是驱动程序的注册。但是很少是由我们写的驱动直接调用的,例如framebuffer中调用platform_driver_register,i2c中调用i2c_add_driver

2017-07-07 17:19:23 9589 1

转载 linux platform设备驱动全透析

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://21cnbao.blog.51cto.com/109393/3376091.1 platform总线、设备与驱动在Linux 2.6的设备驱动模型中,关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反

2017-07-07 17:03:41 317

转载 LPCTSTR LPCWSTR LPCSTR区别

#ifdef UNICODE #define LPCTSTR LPCWSTR #else #define LPCTSTR LPCSTR #endif      LPCTSTR A 32-bit pointer to a constant character string that is portable for Unicode and DBCS. An LPCWSTR

2017-03-09 12:18:41 847

转载 overlapped I/O 运用详解

重叠IO overlapped I/O 运用详解2009年02月21日 星期六 下午 07:54I/O设备处理必然让主程序停下来干等I/O的完成,对这个问题有方法一:使用另一个线程进行I/O。这个方案可行,但是麻烦。                即 CreateThread(…………);创建一个子线程做其他事情。      Readfile(^…………);阻塞

2017-03-08 11:59:23 1048

转载 MFC 控件随窗口大小变化

首先放一下参考的链接。。http://blog.sina.com.cn/s/blog_4b5039210100dzkd.htmlhttp://bbs.csdn.NET/topics/350153879http://blog.csdn.Net/liuy_yy/article/details/7219616以上第一篇文章博主的方法虽然可以实现控件按比例跟随窗口变大变小,但问

2017-02-20 10:15:32 3598 1

转载 CString成员函数

CString的构造函数CString( );例:CString csStr;CString( const CString& stringSrc );例:CString csStr("ABCDEF中文123456");    CString csStr2(csStr);CString( TCHAR ch, int nRepeat = 1 );例:CString

2017-02-20 09:58:22 365

转载 CString转十六进制数字

借用strtol函数可以直接将一个CString对象转化为任意数制的整数。比如:CString st = "20";int n = strtol(st,NULL,16);strtol函数原型:long int strtol(const char *nptr,char **endptr,int base);参数base范围从2至36,或0。参数base代表

2017-02-16 16:50:29 21953 7

转载 Cstring Unicode转非Unicode

使用UNICODE字符集编程时,总是需要使用那些不支持UNICODE的库,例如sqlite3,Lua等必须使用char*类型的。这个时候用CStringA是最好的。另外CStringA与CString可以灵活地随意转换赋值,注意不能这样用:CString str1;CStringA str2=str1;而要这样用:CStringA str2;str2=str1;

2017-02-16 15:43:59 480

转载 error C3646: 未知重写说明符

一、编译出现  error C3646: 未知重写说明符1.h  1.cpp2.h  2.cpp在1.h 中#include了 2.h ,然后在2.h 中又#include了 1.h ,然后这个错误就出现了二、出现这个提示,一般情况是:本错误所在文档加载的某个头文件中,文件的最后缺失了一个分号。比如://a.cppinclude

2017-02-15 15:40:38 39124

转载 vector的成员函数解析

vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问元素,还可以使用指针的偏移方式访问,和常规数组不一样的是,vector能够自动存储元素,可以自动增长或缩小存储空间,vector的优点:1.       可以使用下标访问个别的元素2.       迭代器可以按

2017-02-09 10:03:39 558

转载 MakeFile一篇通俗易懂的好文章

最近在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。            于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。           后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,只是这篇文章从一个实例切入,在有些地方比

2016-09-22 17:24:01 437

转载 #pragma alloc_text

1、转自 :http://hi.baidu.com/billbeggar/blog/item/e884ce1acb10f49a6438db43.html2、编译时控制分页能力   有时,驱动程序的某些部分必须驻留内存而另一些可以被分页,这就需要一种能控制代码和数据是否分页的方法。通过指导编译器的段分配可以实现这个目的。在运行时,装入器通过检查驱动程序中的段名, 把段放到你指定的

2016-08-05 11:13:04 1121

原创 WDFQUEUE的回调函数

在创建一个WDFQUEUE对象之前,可以通过设定WDF_IO_QUEUE_CONFIG,来注册队列的回调方法。WDF_IO_QUEUE_CONFIG是一个结构体,它的具体结构如下:typedef struct _WDF_IO_QUEUE_CONFIG {    ULONG                                       Size;

2016-07-29 12:36:05 1196

转载 NTSTATUS Code

These are from the Windows .NET Server 2003 RC2 DDK. 00000000STATUS_SUCCESS00000000STATUS_WAIT_000000001STATUS_WAIT_100000002STATUS_WAIT_2

2016-07-25 10:16:03 1286

转载 设备节点和设备堆栈

在 Windows 中,设备由即插即用 (PnP) 设备树中的设备节点来表示。通常,向设备发送 I/O 请求时,一些驱动程序会帮助处理该请求。这些驱动程序中的每一个都与一个设备对象相关联,这些设备对象在堆栈中进行排列。设备对象的顺序与它们的关联驱动程序一起被称为设备堆栈。每个设备节点都有自己的设备堆栈。设备节点和即插即用设备树Windows 在称为“即插即用设备树”或简称为“设备树

2016-07-15 12:20:43 655

转载 静态局部变量

在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其 初始化为0。静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量

2016-06-27 16:02:37 581

原创 汇编语言中循环语句的实现

一、概述C语言中有许多不同的结构,比如if-else、do-while、while、for、swich等等,这些结构的汇编实现都是一层一层在前者的基础上进行构建的。比如if-else是基于jmp命令实现的,do-while是基于if-else的汇编结构的,而while又是基于do-while的。所以说jmp在汇编中有着特别重要的作用,它是实现多种C语言结构的基础。二、jmp命令三、

2016-06-21 15:48:59 46256

转载 AT&T与Intel汇编语法的比较

GCC采用的是AT&T的汇编格式, 也叫GAS格式(Gnu ASembler GNU汇编器), 而微软采用Intel的汇编格式. 语法上主要有以下几个不同. 1、寄存器命名原则在 AT&T汇编格式中,寄存器名要加上 '%'作为前缀;而在 Intel汇编格式中,寄存器名不需要加前缀。AT&TIntel说明%eax

2016-06-01 17:48:29 4190

转载 esp和ebp寄存器

一、概括说明esp是栈指针,是CPU机制决定的,push、pop指令会自动调整esp的值又因为函数的参数和局部变量,其实是与进入函数那时的esp相关的,但由于esp在函数运行中会不停的变,因此保存当前esp到一个ebp中保持不变,后续用ebp来访问参数和局部变量就很清楚。而且还方便于调试器分析函数调用过程中的堆栈情况。这个ebp也不是必须的,实际esp虽然不停在变,但具

2016-05-26 18:05:15 2273 1

转载 eax, ebx, ecx, edx, esi, edi, ebp, esp等通用寄存器的作用

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。比方说:add eax,-2 ;   //可以认为是给变量eax加上-2这样的一个值。这些32位寄存器有多种用途,但每一个都有“专长”,有各自的特别之处。EAX 是"累加器"(ac

2016-05-26 17:49:03 1314

原创 Computer Hardware ID(CHID)及驱动推送

以往Windows Update(WU)在进行驱动推送时,都是依据HWID(Hardware ID)进行的,机器上每个设备,比如声卡、网卡、触控芯片等等,都有自己的HWID。但WU却无法对不同型号的机器进行区别。比如同一款声卡,它可能被安装在联想S330这款机器上,也可能被安装在华硕A200这款机器上,WU在进行驱动推送时只能针对这一款声卡推送同样的驱动,却做不到对联想和华硕推送不同的驱动。

2016-04-12 16:36:21 5745

原创 U盘安装Windows

以往使用U盘安装Windows时,要先制作出一个特定的U盘,然后再从U盘启动,才可以进行安装。在Windows 8.1以后可以直接使用U盘进行安装,无需额外的操作,具体步骤和操作过程如下:1、将Windows安装用的IOS文件直接解压到U盘的根目录下,包含的文件主要有:注意!所有的文件都必须放在U盘的根目录下,否则UEFI将无法正确引导进入安装。整个安装过程中,最近重要

2016-04-12 15:20:03 430

原创 KMDF版本以及库文件的命令规则

一、KMDF版本号与WDK和OS的对应关系KMDF的版本号基本上都是伴随着WDK的发布而更新的,而WDK的更新一般又是和OS是同步的,比如:Win7对应WDK7,Win8对应WDK8,Win8.1对应WDK8.1,Win10对应WDK10从VS2012开始支持建立驱动工程。VS2012支持WDK 8.0,对应的KMDF默认版本是1.11。VS2013支持Win 8.1,对应的KMDF默认版

2016-01-25 16:41:30 2267

原创 KMDF中未分页内存的类型选择

在内核驱动程序中,内存空间的动态分配不能使用C语言的malloc等函数,取而代之的是ExAllocatePoolWithTag()和ExFreePool(),使用方法举例如下:#defineTEST_POOL_TAG            (ULONG)'test'PUCHAR tempBuf = NULL;tempBuf = ExAllocatePoolWithTag ( Non

2016-01-25 11:27:31 1236

原创 解决内核驱动开发中设备名称显示不正确的问题

为了让驱动与上层应用程序可以通信,我们定义了一个工具接口。当该接口被打开时,驱动会专门创建一个设备并挂载在Sample driver下面,它就是用来与应用程序进行通信的接口。但之前,该设备在设备管理器中的显示一直是有问题的,一直被标识成一个Unknown Device。后来参考MSDN的Sample Code:“Keyboard Input WDF Filter Driver (Kbfil

2016-01-14 18:06:59 671

原创 内核驱动中改写寄存器值

在Kernel Model的驱动程序中向给定的寄存器地址、内存地址或IO端口地址等16进制的地址写入指定的值。主要依靠的是MSDN中提供的MmMapIoSpace函数进行的。该函数将一个十六进制的物理地址映射到一个指针,然后针对该指针进行操作即可改变对应的物理单元内的数据。该函数的具体描述可参看微软的MSDN:https://msdn.microsoft.com/zh-cn/office/

2016-01-14 18:00:04 1894

原创 设备协安装程序

CoInstaller,也称协同安装程序,是微软公司开发的win32的DLL,它是用来帮助在Windows 2000以后的系统上进行设备安装。它被Setup API调用作为类安装程序的“助手”。例如,供应商可以提供协同安装程序将特定设备信息写入INF文件无法处理的注册表中。协同安装程序可以是设备专用或类专用的。Setup API只在安装协同安装程序为其注册的设备时才调用一个设备专用的协同安装程

2016-01-14 17:56:57 872

原创 Win10快速签名

非HLK/HCK的驱动签名是win10之后新出现的签名方式,也即快速签名机制。该方式最大的特点是微软不再强制要求进行HLK/HCK的测试了,可直接将驱动包上传到Sysdev进行签名。该流程与前面的HLK/HCK签名流程是完全不同的:1、HLK/HCK的驱动签名要提交的HLKX/HCKX类型的文件,而非HCK/HLK类型的签名所要提交的CAB类型的文件;2、这两者在Sysdev上的提交位

2016-01-14 17:47:57 4767

原创 HCK驱动签名

一、HLK/HCK签名这种类型的驱动签名需要先进行HLK/HCK的测试,其中HCK(HardwareCertification Kit)是win8、win8.1的驱动测试工具;而HLK(Hardware Lab Kit)是微软随win10而新推出的驱动测试工具。HLK/HCK类型的驱动签名,需要在sysdev上提交的是HLKX/HCKX类型的文件。这些文件正是HCK/HLK的测试结果。1.

2016-01-14 17:31:21 4745 2

原创 生成具有目录结构的CAB文件

一、使用makecab.exe生成CAB文件在微软签名的过程中有时需要提交.cab格式的文件,该格式是使用微软的makecab.exe或Cabarc.exe来进行生成的。这里主要介绍的是使用makecab.exe来生成cab文件的过程。直接打开一个CMD窗口即可调用makecab命令,但需要确保CMD当前的路径是处于C盘下的,不然系统会找不到该命令。使用makecab可将单个的文件压缩

2016-01-14 17:13:01 3072

原创 Windows驱动的彻底删除

由于Windows对于驱动程序会有一个自动备份的功能,当驱动被删除或损坏时,操作系统会自动使用备份的安装文件重新安装驱动程序。但这个功能有时会导致无法卸载一个损坏的驱动,因为OS会一直不停的进行还原操作。想要解决这个问题那么就是彻底的删除OS备份的文件。安装一个驱动时整个操作系统中有以下地方对驱动文件进行了保存/备份:1、在C:\Windows\system32\Driver下面有驱动

2016-01-14 17:08:27 42006 1

原创 Windbg串口联调

使用Windbg进行内核驱动调试时,可以使用的连接方式有很多:USB、网络、串口等。这里主要讲一下串口调试时的连接和设置方法。一、目标机的设置a. 以下是Windbg的帮助文档中给出的设置方法:On the target computer, open a Command Prompt window as Administrator, and enter th

2016-01-14 12:18:40 1945

触摸屏驱动的示例代码

触摸屏驱动sample code,包括驱动的加载,中断申请,数据读取上报

2018-12-04

空空如也

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

TA关注的人

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