-
2021-11-08 23:34:29
驱动开发
枚举进程
参考:
https://cloud.tencent.com/developer/article/1397496未公开函数:
PsGetProcessWow64Process强制读写内存
方案1(R3):直接修改别人内存
最基本的也最简单的就是直接通过WriteProcessMemory 和 ReadProcessMemory对没有进行保护的程序的内存进行修改,一些单机游戏辅助什么的可能会有这种简单方式修改其他进程内存。
方案2(R3): 注入
通过注入的方式想办法进入宿主进程,然后修改他的内存。这里的话姿势就很多了,远程代码注入,APC注入,输入法注入,LSP注入等等。最常用最省事的估计就是输入法注入,最不常用,但是效果最好的我个人感觉是LSP注入,这个之前用过一段时间。甚至直接可以在R3层做网络劫持了。不过LSP坑多,用者慎重。
方案3(R0):KeStackAttachProcess
在驱动里,直接附加到宿主进程内存,然后进行内存修改,强杀进程的时候也经常用这个姿势Attack进去,然后 进程虚拟地址空间擦除 直接干进程。
void KWriteProcessMemory(IN PEPROCESS Process
更多相关内容 -
蔡工RK3288_Android7.1驱动开发入门
2020-02-17 13:13:441、基于RK3288平台,基于Android7.1,kernel4.4的驱动移植、调试和开发,驱动框架分析,跟代码等; 2、讲解RK平台的常用外设模块驱动(例如LCD,TP,GPIO,wifi+BT,IR,... 3、介绍一些Android底层驱动开发知识等; -
Linux设备驱动开发详解
2022-01-20 23:02:12Linux设备驱动开发详解Linux设备驱动开发详解Linux设备驱动开发Linux设备驱动开发详解1. linux设备驱动概述及开发环境搭建2. 驱动设计的硬件基础3. linux内核及内核编程4. linux内核模块5. linux文件系统与设备文件6...Linux设备驱动开发详解
- Linux设备驱动开发详解
- Linux设备驱动开发
- Linux设备驱动开发详解
- 1. linux设备驱动概述及开发环境搭建
- 2. 驱动设计的硬件基础
- 3. linux内核及内核编程
- 4. linux内核模块
- 5. linux文件系统与设备文件
- 6. 字符设备驱动
- 7. linux设备驱动中的并发控制
- 8. linux设备驱动中的阻塞与非阻塞I/O
- 9. linux设备驱动中的异步通知与异步I/O
- 10. 中断与时钟
- 11. 内存与I/O访问
- 12. linux设备驱动的软件架构思想
- 13. linux块设备驱动
- 14. linux网络设备驱动
- 15. linux I2C核心、总线与设备驱动
- 16. USB主机、设备与Gadget驱动
- 17. I2C、SPI、USB驱动架构类比
- 18. ARM Linux设备树
- 19. linux电源管理系统架构和驱动
- 20. linux芯片级移植及底层驱动
- 21. linux设备驱动的调试
- 总结
Linux设备驱动开发详解
体验课(Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈)学习视频链接地址
正课学习视频链接地址
第二个链接是我学习的链接,如果你有兴趣学习,我可以为你推荐,老学员推荐新学员会有相应的折扣 我的QQ号码: 852897652.Linux设备驱动开发详解
最近在学习QQ群里获得了这本书,截取数字图片来进行学习。以前学习整理的
整理知识点 进程管理和内存管理 链接1。
整理知识点 设备驱动和文件系统 链接2。
整理知识点 中断和网络 链接3。
整理知识点 内核实战 链接3Linux设备驱动开发
- linux设备驱动概述及开发环境搭建
- 驱动设计的硬件基础
- linux内核及内核编程
- linux内核模块
- linux文件系统与设备文件
- 字符设备驱动
- linux设备驱动中的并发控制
- linux设备驱动中的阻塞与非阻塞I/O
- linux设备驱动中的异步通知与异步I/O
- 中断与时钟
- 内存与I/O访问
- linux设备驱动的软件架构思想
- linux块设备驱动
- linux网络设备驱动
- linux I2C核心、总线与设备驱动
- USB主机、设备与Gadget驱动
- I2C、SPI、USB驱动架构类比
- ARM Linux设备树
- linux电源管理系统架构和驱动
- linux芯片级移植及底层驱动
- linux设备驱动的调试
Linux设备驱动开发详解
1. linux设备驱动概述及开发环境搭建
2. 驱动设计的硬件基础
3. linux内核及内核编程
4. linux内核模块
5. linux文件系统与设备文件
6. 字符设备驱动
7. linux设备驱动中的并发控制
8. linux设备驱动中的阻塞与非阻塞I/O
9. linux设备驱动中的异步通知与异步I/O
10. 中断与时钟
11. 内存与I/O访问
12. linux设备驱动的软件架构思想
13. linux块设备驱动
14. linux网络设备驱动
15. linux I2C核心、总线与设备驱动
16. USB主机、设备与Gadget驱动
17. I2C、SPI、USB驱动架构类比
18. ARM Linux设备树
19. linux电源管理系统架构和驱动
20. linux芯片级移植及底层驱动
21. linux设备驱动的调试
总结
-
Android驱动开发与移植实战详解,完整扫描版
2014-03-13 21:39:22在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了详细的分析及驱动开发实现。 《Android驱动开发与移植实战详解》适合Android程序员、研发人员及Android爱好者学习,也可以作为相关... -
DDD领域驱动开发
2021-09-15 14:46:02文章目录DDD(Domain Driving Design)领域驱动开发架构对比微服务的问题战略设计(业务层面-业务架构)战术设计(技术层面-系统架构):DDD和微服务 DDD(Domain Driving Design)领域驱动开发 架构对比 单机架构...文章目录
DDD(Domain Driving Design)领域驱动开发
1、微服务设计为什么选择DDD
1、架构对比
-
单机架构:数据驱动架构
-
集中式架构:面向对象的方式(三层架构)
-
分布式微服务架构:应用之间解藕,解决单体用扩展性和弹性伸缩能力不足问题
2、微服务的问题
-
微服务粒度
-
怎样拆分
-
边界是什么
DDD 核心思想是通过领域驱动设计方法定义领域模型,从而确定业务和应用边界,保证业务模型与代码模型的一致性。
3、战略设计(业务层面-业务架构)
建立领域模型、划分领域边界,从业务的视角来划分微服务边界(收敛的过程)
- 实体
- 命令
- 事件
领域模型:指导微服务的设计和拆分。事件风暴是建立领域模型的主要的方法,
事件风暴:
- 从发散到收敛的一整个过程
- 采用方法:用例分析、场景分析、用户旅程分析
- 产出:产出实体、命令、事件等领域对象,将领域对象从不同维度进行聚类形成聚合、限界上下文等边界,建立领域模型
逻辑边界、物理边界
4、战术设计(技术层面-系统架构):
侧重于领域模型的实现,侧重于代码逻辑的设计和实现
实现层面
- 逻辑边界
- 物理边界
5、DDD和微服务
DDD:主要关注从业务领域视角划分领域边界,通过业务抽象建立领域模型,维持业务和代码层面的一致性
微服务:主要是从技术层面,实现去中心化数据管理和去中心化服务治理,关注微服务的独立开发、测试、构建和部署
总结:DDD是一种架构设计方法,微服务是一种架构风格。DDD是一种从业务视角去分离系统建设复杂度的手段,应用于微服务中,DDD解决微服务设计过程中边界难以界定的问题。
2、领域、子域、核心域、通用域、支撑域
-
领域:指一种特定的范围。用于限制业务边界和范围的。
-
子域:对应更小的业务范围
- 核心域:决定产品和公司核心竞争力的子域,业务成功的主要因素和公司的核心竞争力
- 通用域:需要用到的通用系统
- 支撑域:具有企业特性,但不具有通用性
复杂问题拆解细分,建立子域
- 研究对象
- 研究对象细分
领域的核心思想就是将问题域逐级细分,来降低业务理解和系统实现的复杂度。通过领域细分,逐步缩小微服务需要解决的问题域,构建合适的领域模型,而领域模型映射成系统就是微服务了。通过领域划分,区分不同子域在公司内的不同功能属性和重要性(核心域、通用域、支撑域),从而公司可对不同子域采取不同的资源投入和建设策略
3、限界上下文
-
通用语言定义上下文含义,限界上下文则定义领域边界
-
限界上下文就是用来细分领域,从而定义通用语言所在的边界
-
一个限界上下文理论上就可以设计为一个微服务
4、实体和值对象:从领域模型的基础单元看系统设计
DDD 引入值对象是希望实现从“数据建模为中心”向“领域建模为中心”转变。实体和值对象是微服务底层的最基础的对象。DDD 提倡从领域模型设计出发,而不是先设计数据模型。
实体对象(业务层面)
-
实体和值对象是组成领域模型的基础单元。
-
在代码模型中,实体的表现形式是实体类,这个类包含了实体的属性和方法
值对象(数据层面)
在领域建模时,我们可以将部分对象设计为值对象,保留对象的业务涵义,同时又减少了实体的数量;在数据建模时,我们可以将值对象嵌入实体,减少实体表的数量,简化数据库设计。
实体对象VS值对象
- 实体一般对应业务对象,它具有业务属性和业务行为;而值对象主要是属性集合,对实体的状态和特征进行描述。
总结:值对象的引入,保留了业务层面的含义,减少了实体数量,并且在数据建模层面,简化了数据库设计
5、怎样设计聚合?聚合和聚合根
-
聚合就是由业务和逻辑紧密关联的实体和值对象组合而成的,聚合是数据修改和持久化的基本单元,每一个聚合对应一个仓储,实现数据的持久化。
-
聚合在 DDD 分层架构里属于领域层,领域层包含了多个聚合,共同实现核心业务逻辑
聚合根解决了什么问题?
聚合根的主要目的是为了避免由于复杂数据模型缺少统一的业务规则控制,而导致聚合、实体之间数据不一致性的问题
聚合根承担的角色是什么?
如果把聚合比作组织,那聚合根就是这个组织的负责人。聚合根也称为根实体,它不仅是实体,还是聚合的管理者。
如何判断一个实体是否是聚合根?
可以结合以下场景分析:是否有独立的生命周期?是否有全局唯一 ID?是否可以创建或修改其它对象?是否有专门的模块来管这个实体?
6、领域事件
用来表示领域中发生的事件。一个领域事件将导致进一步的业务操作,在实现业务解耦的同时,还有助于形成完整的业务闭环。领域事件来驱动业务的流转
7、中台
-
-
组态王驱动开发包3.0最新版
2011-09-13 14:22:17请将两个(驱动开发包3.0.part1.rar 、驱动开发包3.0.part2.rar )下载后放在一解压 组态王驱动开发包3.0最新版 1. 版权 本开发包版权属于北京亚控科技发展有限公司,任何组织、团体、个人,未经亚控公司允许,不得... -
Windows 驱动开发 新手入门(一)
2021-02-12 17:25:50Windows 驱动开发 新手入门(一)引言驱动介绍Win10 WDK建立一个驱动项目建立MyDriver.cpp理论知识驱动入口派遣函数 MajorFunctionDevice和SymbolicLinkDeviceExtensionIRP 引言 本文是对Windows下的驱动开发有一个...Windows 驱动开发 新手入门(一)
引言
首先祝朋友们新年快乐,然后呢,因为无聊,写2篇文章打发时间,而且太久没弄过windows的东西了,算是回顾了,本文是对
Windows
下的驱动开发
有一个简单的介绍,我尽可能写的小白文
一些,因为大多数的驱动开发书籍对新手来说还是过于难理解。本篇文章通过WDM进行介绍,具体NT式驱动例子看这:
Windows 驱动开发 新手入门(二)本系列所有文章
Windows 驱动开发 新手入门(三)
Windows 驱动开发 新手入门(四)驱动介绍
在介绍
驱动开发
之前,先了解一下基础知识
,驱动
是什么的?驱动
这个词是由Driver
直译的,这和平常开发中的测试驱动开发(TDD)
中的驱动
并不是一个意思。
驱动
是在内核
下工作的,如果你了解过Windows
的一些内核对象
(如Event Mutex等),你也许会认为在Windows
中用户层
也可以随意获取到内核对象。实际上虽然我们在用户层
可以获取到,但这只是通过微软公开的API
获取的。驱动(Driver)
我们可以理解为系统和硬件交互
用的,我们不需要知道底层硬件
是什么样子的,我们不需要为每个硬件单独写一份代码,因为我们可以通过系统
去和硬件交互
,使用系统提供的API
来和硬件交互
,这些操作都是在系统内核中完成
的。它是一套在Windows中的标准,我们不用关心硬件底层是如何实现的,这就像是DLL
是用户层模块
,驱动
就是内核层模块
。设备(Device)
,可以是关联的物理设备,也可以是我们在驱动中创建的虚拟设备,应用层(通过Symbolic Link找到Device)向Device
发送IRP(I/O Request Packet) IO请求包
,此时我们的驱动就可以处理这些请求。我们为了拥有更高的权限,一般会创建一个虚拟设备,仅仅只是为了让代码在内核中工作。符号链接(Symbolic Link)
,Windows中可以通过mklink
直接创建符号链接,它的作用你可以理解为Linux中的软连接,同样我们也可以通过代码创建一个符号链接,只是它指向的是一个Device
,应用层通过符号链接找到设备
,此时通过IRP
就可以和驱动进行交互了。Win10 WDK
Windows Driver Kit 用于开发、测试和部署 Windows 驱动程序(官网原话)
由于我的电脑在去年中旬做过一次系统,所以索性装了VS2019,所以请挑选对应版本的WDK进行安装。
Windows 10 版本 2004 VS 2019 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk其他版本 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/other-wdk-downloads
建立一个驱动项目
在安装完WDK后,新建项目选择Driver你会看见如下这些类型,VS2019中无法快速建立一个NT式驱动。
所以我们选择WDM驱动,我想先从WDM驱动介绍开始
可以清楚的看见只有一个inf文件,这个文件是之后驱动安装的文件,我们先跳过。
建立MyDriver.cpp
在
Source Files
目录建立MyDriver.cpp
,并且将下面的代码拷贝进去,不要急,代码我会挑出关键部分单讲,并且我尽可能写了每行代码的注释。//由于我们建立的是CPP文件,所以引入头文件和入口函数需要extern "C" extern "C" { #include <wdm.h> } #define DEVICE_NAME L"\\Device\\MyWdmDevice" //定义设备名称 #define LINK_NAME L"\\??\\MyWdmLink" //定义符号链接 NTSTATUS DriverAddDevice(PDRIVER_OBJECT pDriverObj, PDEVICE_OBJECT pPhysicalDeviceObject); NTSTATUS DispatchRoutine(IN PDEVICE_OBJECT pDeviceObj, IN PIRP pIrp); NTSTATUS WDMPNP(IN PDEVICE_OBJECT pDeviceObj, IN PIRP pIrp); void DriverUnload(PDRIVER_OBJECT pDriverObj); extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString) { UNREFERENCED_PARAMETER(pRegistryString); //不用将编译警告等级设为3,不使用 就Unreferenced即可 DbgPrint("驱动被加载\n"); //这里和nt驱动的区别是,我们不要去直接给MajorFunction 派遣 IRP_MJ_CREATE之类的 //这里我们需要用到扩展 //在WDM驱动程序中DriverEntry不再负责创建设备,而是交由AddDevice例程去创建设备。 pDriverObj->DriverExtension->AddDevice = DriverAddDevice; pDriverObj->DriverUnload = DriverUnload; //这里不是真实的卸载 //IRP全部派遣到DisPatchRoutine for (int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) { pDriverObj->MajorFunction[i] = DispatchRoutine; } //重写PNP派遣 pDriverObj->MajorFunction[IRP_MJ_PNP] = WDMPNP; //即插即用服务 return STATUS_SUCCESS; } typedef struct _DEVICE_EXTENSION { PDEVICE_OBJECT PDeviceObject; ///< 设备对象 PDEVICE_OBJECT PNextStackDevice; ///< 下层设备对象指针 UNICODE_STRING DeviceName; ///< 设备名称 UNICODE_STRING SymLinkName; ///< 符号链接名 }DEVICE_EXTENSION, * PDEVICE_EXTENSION; NTSTATUS DriverAddDevice(PDRIVER_OBJECT pDriverObj, PDEVICE_OBJECT pPhysicalDeviceObject) { DbgPrint("AddDevice\n"); NTSTATUS status = STATUS_SUCCESS; UNICODE_STRING deviceName; UNICODE_STRING linkName; PDEVICE_OBJECT pDeviceObj = NULL; //创建设备对象 PDEVICE_EXTENSION pDeviceExt = NULL; //设备扩展对象 RtlInitUnicodeString(&deviceName, DEVICE_NAME); //初始化Unicode字符串 设备名称 RtlInitUnicodeString(&linkName, LINK_NAME);//初始化Unicode字符串 符号链接名称 //创建设备 status = IoCreateDevice(pDriverObj, sizeof(PDEVICE_EXTENSION), &deviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDeviceObj); if (!NT_SUCCESS(status)) { return status; } //让扩展对象指向刚刚创建的设备的扩展 pDeviceExt = (PDEVICE_EXTENSION)(pDeviceObj->DeviceExtension); pDeviceExt->PDeviceObject = pDeviceObj; pDeviceExt->DeviceName = deviceName; pDeviceExt->SymLinkName = linkName; // 将设备对象挂接在设备堆栈上 pDeviceExt->PNextStackDevice = IoAttachDeviceToDeviceStack(pDeviceObj, pPhysicalDeviceObject); //创建符号链接 status = IoCreateSymbolicLink(&linkName, &deviceName); if (!NT_SUCCESS(status)) { IoDeleteSymbolicLink(&pDeviceExt->SymLinkName); status = IoCreateSymbolicLink(&linkName, &deviceName); if (!NT_SUCCESS(status)) { return status; } } pDeviceObj->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE; pDeviceObj->Flags &= ~DO_DEVICE_INITIALIZING; DbgPrint("Leave AddDevice\n"); return status; } /// @brief 对默认IPR进行处理 NTSTATUS DispatchRoutine(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp) { UNREFERENCED_PARAMETER(pDeviceObject); DbgPrint("Enter WDMDispatchRoutine\n"); NTSTATUS status = STATUS_SUCCESS; pIrp->IoStatus.Status = status; pIrp->IoStatus.Information = 0; IoCompleteRequest(pIrp, IO_NO_INCREMENT); DbgPrint("Leave WDMDriverDispatchRoutine\n"); return status; } /// @brief PNP移除设备处理函数 /// @param[in] pDeviceExt 设备扩展对象 /// @param[in] pIrp 请求包 /// @return 状态 NTSTATUS PnpRemoveDevice(PDEVICE_EXTENSION pDeviceExt, PIRP pIrp) { KdPrint(("Enter HandleRemoveDevice\n")); pIrp->IoStatus.Status = STATUS_SUCCESS; // 略过当前堆栈 IoSkipCurrentIrpStackLocation(pIrp); // 用下层堆栈的驱动设备处理此IRP NTSTATUS status = IoCallDriver(pDeviceExt->PNextStackDevice, pIrp); // 删除符号链接 IoDeleteSymbolicLink(&pDeviceExt->SymLinkName); //调用IoDetachDevice()把设备对象从设备栈中脱开: if (pDeviceExt->PNextStackDevice != NULL) IoDetachDevice(pDeviceExt->PNextStackDevice); //删除设备对象: IoDeleteDevice(pDeviceExt->PDeviceObject); DbgPrint("Leave HandleRemoveDevice\n"); return status; } NTSTATUS WDMPNP(IN PDEVICE_OBJECT pDeviceObj, IN PIRP pIrp) { PDEVICE_EXTENSION pDeviceExt = (PDEVICE_EXTENSION)pDeviceObj->DeviceExtension; PIO_STACK_LOCATION pStackLoc = IoGetCurrentIrpStackLocation(pIrp); unsigned long func = pStackLoc->MinorFunction; DbgPrint("PNP Request (%u)\n", func); NTSTATUS status = STATUS_SUCCESS; switch (func) { case IRP_MN_REMOVE_DEVICE: status = PnpRemoveDevice(pDeviceExt, pIrp); break; default: // 略过当前堆栈 IoSkipCurrentIrpStackLocation(pIrp); // 用下层堆栈的驱动设备处理此IRP status = IoCallDriver(pDeviceExt->PNextStackDevice, pIrp); break; } DbgPrint("Leave HelloWDMPnp\n"); return status; } /// @brief 驱动程序卸载操作 void DriverUnload(PDRIVER_OBJECT pDriverObj) { UNREFERENCED_PARAMETER(pDriverObj); DbgPrint("Enter WDMUnload\n"); DbgPrint("Leave WDMUnload\n"); }
理论知识
驱动入口
在之前写程序时,程序
入口
函数为main
,参数有argc和argv代表着命令行的参数个数及对应的字符串指针,驱动
也有入口
函数为DriverEntry
,其返回类型为NTSTATUS
。函数的第一个参数
pDriverObj
是刚被初始化的驱动对象指针
,
函数的第二个参数pRegistryString
是驱动在注册表
中的键值。DriverUnload是驱动卸载的回调,如果我们不设置
DriverUnload
,那么此时我们将无法正常的卸载驱动
,系统这么做的原因是为了保证系统的稳定性
。
比如我们在DriverEntry
中添加了某些系统回调,此时我们没有DriverUnload
,因此系统不知道什么时候该移除这些回调
,如果暴力移除驱动,此时系统回调会出问题,系统回调表中存在了一个被移除掉的驱动的回调,当调用时系统蓝屏
。派遣函数 MajorFunction
我们在驱动入口函数中看到了
pDriverObj->MajorFunction
数组,其作用是针对每一个的事件
都有与之对应
的回调函数
。因为
WDM
驱动不在DriverEntry
入口中去创建设备
和对应的符号链接
,而是移到了DriverAddDevice
函数中,所以pDriverObj->MajorFunction
中我们并没有单独指定pDriverObj->MajorFunction[IRP_MJ_CREATE]
和pDriverObj->MajorFunction[IRP_MJ_CLOSE]
,而是将所有的派遣函数指向一个通用的回调函数DispatchRoutine
。Device和SymbolicLink
其中
设备名称
在代码中被我们宏定义
为L"\\Device\\MyWdmDevice"
,符号链接
被我们定义为L"\\??\\MyWdmLink"
。Device
是用来和应用层通信的,应用层程序可以通过SymbolicLink
找到对应的设备。IoCreateDevice
就是创建设备的函数- 第一个参数为
驱动对象指针
- 第二个参数为
设备扩展结构(DeviceExtension)
的大小
- 第三个参数为
设备名称
,具体可以查看微软文档。
IoCreateSymbolicLink
就是创建符号链接的函数- 第一个参数为
符号链接名称
- 第二个参数为
设备名称
DeviceExtension
设备扩展结构,你可以将某些信息保存在扩展结构中,这样可以避免使用全局变量,应用层通信时,可以读取或写入的信息的结构,之后NT式驱动的例子中会用到。
IRP
在通用的派遣函数
DispatchRoutine
中,我们看到了一个参数pIrp
,IRP
的含义是I/O Request Packet
缩写,是在驱动中IO请求的结构体,其具体作用,我决定放在NT式驱动中细说。 - 第一个参数为
-
Linux驱动开发入门与实战.part1.rar 高清PDF版
2012-11-04 15:27:56Linux驱动开发入门与实战 高清PDF版 因为高清版的文件太大,所以分成两个包上传,请下载Linux驱动开发入门与实战.part1.rar 和 Linux驱动开发入门与实战.part2.rar 后再解压即可 -
组态王驱动开发包(自己开发需要的驱动)
2011-08-05 00:26:42组态王驱动开发包,支持6.51及以上版本,组态软件必备工具! -
MCGS_脚本驱动开发工具
2012-10-29 22:36:05MCGS 脚本驱动 开发工具 简单易用 自动生成脚本工具 -
测试驱动开发
2018-11-24 14:14:00测试驱动开发 概述 极限编程是一个轻量级的、灵巧的软件开发方法,同时它也是一个非常严 谨和周密的方法,它从 4 个基本方面对软件项目进行改善:交流、简易、反馈 和勇气。测试驱动开发则是极限编程的最佳... -
【Linux典藏大系】Linux驱动开发入门与实战 郑强.z01
2012-11-22 21:21:09大家注意了,这个压缩包的名字叫“【Linux典藏大系】Linux驱动开发入门与实战 郑强.z01”,还要下载一个“【Linux典藏大系】Linux驱动开发入门与实战 郑强.zip”压缩文件,我是用“好压”这个软件进行压缩分卷的,我... -
不能错过的linux驱动开发的经典书籍推荐
2020-07-09 18:53:59为什么要学习 Linux 环境下的编程 Linux 是一个开放、灵活、跨平台的操作系统,上至庞大的...可以说,上世纪70年代学习的 Unix 知识和技巧,在今天仍然大有用武之地,这与 Windows 平台的开发形成了鲜明的对比。程序 -
关于嵌入式驱动开发,这篇文章让你了解透彻!
2020-09-27 16:48:38嵌入式驱动开发到底学什么 嵌入式大体分为以下四个方向: 一、嵌入式硬件开发:熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力。熟练掌握嵌入式硬件知识,熟悉硬件开发模式和设计... -
基于树莓派驱动开发详解
2020-08-09 20:15:49一、驱动开发认知 1、驱动开发思想 要想进行驱动开发首先我们应该知道,上层到底层是如何进行的,上层调用c库的open函数,首先会发生一次软中断,从用户空间进入内核空间,触发系统调用接口函数sys_call,然后通过... -
嵌入式到底应该选择驱动开发,还是应用开发?
2022-01-01 16:33:22嵌入式到底应该选择驱动开发,还是应用开发? -
竹林蹊径:深入浅出Windows驱动开发(高清完整版).pdf
2012-02-07 13:22:21竹林蹊径:深入浅出Windows驱动开发(高清完整版).pdf -
鸿蒙系统分享----鸿蒙系统硬件驱动开发
2022-02-02 21:18:26第一个:鸿蒙系统驱动开发的过程中,首先要清楚驱动框架是如何布局的,鸿蒙系统內部为开发者提供了驱动框架能力,包括驱动加载、驱动服务管理和驱动消息机制。这样做也是为了,构建一个驱动架构平台,为驱动开发者... -
windows虚拟网卡驱动开发~开源(建议收藏)
2021-06-01 22:33:06但是windows操作系统不像Linux操作系统,它的代码不开源,导致这方面的资料很少,因此花费了较长时间来寻找相关实现框架,最终找到了两款开源项目的虚拟接口驱动: Wireguard项目的Wintun接口 OpenVPN的Tap接口 这... -
嵌入式驱动开发学习路线
2018-04-19 15:40:35ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标: (1)掌握主流嵌入式微处理器的结构与原理(初步定为arm9) (2)必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定) (3)必须... -
固件编程与驱动开发>电子书 pdf 周立功
2011-11-17 16:59:13周立功出的 PDIUSBD12+USB固件编程与驱动开发, 包含书本的绝大部分内容.对初学USB的非常有用.内容朴实明了,讲了USB协议通信过程,D12开发代码,以及详细的在Windows下的USB驱动程序开发. -
嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf
2010-06-22 16:51:337.2.2 字符设备驱动开发 第8章 网络设备驱动程序开发 8.1 网络设备驱动程序简介 8.1.1 device数据结构 8.1.2 sk_buff数据结构 8.1.3 内核的驱动程序接口 8.2 以太网控制器CS8900A 8.2.1 特性 8.2.2 工作原理... -
浅谈驱动开发
2019-06-24 07:43:24驱动开发在很多人眼中都是一项极具挑战性的任务,可当你真正去开发一个驱动时,你也许会发现它并没有看上去那样困难,可对大多数人而言驱动开发是八竿子打不着的话题,故而更增强了驱动开发在许多人心中的神秘感。... -
Android Camera驱动开发入门必备知识
2020-10-31 22:05:48camera驱动开发所需要具备基础知识,如果你还没有了解过camera模块,那么这些基础必备的知识,将会对你比较有用,俗话说“磨刀不误砍柴工”,基本功配置好了,相信你在做camera驱动开发过程中肯定得心应手。... -
Windows驱动开发技术详解(珍藏版).pdf
2011-02-26 20:58:01Windows驱动开发技术详解(珍藏版).pdf Windows驱动开发技术详解(珍藏版).pdf Windows驱动开发技术详解(珍藏版).pdf Windows驱动开发技术详解(珍藏版).pdf -
使用IDE(vs code)进行嵌入式linux驱动开发
2020-08-13 19:13:03早期的ubuntu版本上没有好的可用的IDE,那个时候嵌入式linux驱动开发人员多使用vim进行编码;对于没有图像界面的linux服务器,开发人员更是只能选择vim这一编辑工具。但是,接触过IDE的人会意识到vim的不方便:需要... -
windows 驱动开发使用的一些工具
2021-08-26 17:06:29刚开始学驱动开发,有一些工具在网上搜索的太慢了,找来找去还好多收费的,绝大部分工具可以从微软官网下,就是速度比较慢,不过其体积也小, 官方下载地址:... -
嵌入式Linux驱动开发
2019-05-11 21:05:29说到Linux驱动,尤其是嵌入式Linux驱动,大家可能会望而却步,因为入门太难!很多书上或课程基本是这样的:一上来给我们...从最简单的入手,一步一步,手把手的编写代码,一步步引领你进入嵌入式Linux驱动开发的大门。 -
驱动及驱动开发的简单理解
2019-11-03 17:28:24因此,今天用了一些时间,去简单的了解了一下驱动及驱动开发。如果有错误的理解,请予以指正,不胜感激! 什么是驱动 在计算中,设备驱动程序是一种计算机程序,用于操作或控制连接到计算机的特定类型的设备。驱动... -
Linux驱动开发|块设备驱动
2022-01-14 17:26:41块设备驱动