首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏嵌入式项目开发

    Linux驱动开发: USB驱动开发

    而高速USB 2.0最初推出时最高传输速率仅为240Mbps,后来USB2.0推广组(USB Promoter Group)在1999年10月将该速率提高到480Mbps,比传统的USB 1.1快40倍 最新一代是USB 3.1,传输速度为10Gbit/s,三段式电压5V/12V/20V,最大供电100W ,新型Type C插型不再分正反。 当设备没有枚举成功时(可以通过一个10K的电阻将USB的电源端和D+或者D-连接起来,电脑会发现一个无法识别的设备,这个设备的PID和VID都是0,根据每个特性可以简单的判定设备的枚举是否成功。 Bit 1..0 :传送类型 00=控制传送 01=同步传送 10=批传送 11=中断传送 所有其它的位都保留。 00b主数据类型, 01b全局数据类型, 10b局部数据类型, 11b保留。 bTag:数据项标签,用于指明数据项的功能。

    77.3K23编辑于 2022-01-12
  • 驱动开发:Win10内核枚举SSDT表基址

    三年前面朝黄土背朝天的我,写了一篇如何在Windows 7系统下枚举内核SSDT表的文章《驱动开发:内核读取SSDT表基址》三年过去了我还是个单身狗,开个玩笑,微软的Windows 10系统已经覆盖了大多数个人 图片那么如果将这个过程通过代码的方式来实现,我们还需要使用《驱动开发:内核枚举IoTimer定时器》中所使用的特征码定位技术,如下我们查找这段特征。 + (ULONGLONG)ByteCode + 7;return addr;}}}return 0;}VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint(("驱动程序卸载成功 ,qword ptr ds:[rdi+r10] |4D:631C82 | movsxd r11,dword ptr ds:[r10+rax*4] ret = scfn(NtApiIndex, ssdt_base_aadress);return ret;}VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint(("驱动程序卸载成功

    89620编辑于 2022-11-18
  • 来自专栏Eureka的技术时光轴

    Win10下VS2015(WDK10驱动开发环境配置

    Visual Studio就集驱动程序开发,编译,安装,部署和调试于一身,使得Windows驱动程序开发会变得更容易。 对于Windows 10和Visual Studio2015驱动开发WDK环境变量的配置,与其它版本的Windows和WDK环境的配置有很大不同。本人也是苦苦探索了近一周的时间才配好。 从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,但是,如果使用DDK来开发WDM,其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易, 由于WDF驱动模型提供了面向对象和事件驱动驱动程序开发框架,大大降低了开发难度。从现在开始,掌握Windows设备驱动程序的开发人员,由过去的“专业”人士,将变为“普通”大众。 5、 开发调试环境配置 5.1 工具及平台环境 平台:Windows 10操作系统 开发环境:Visual Studio 2015 Enterprise 和Windows WDK、Windows

    5.5K62发布于 2019-07-24
  • 来自专栏嵌入式项目开发

    Linux驱动开发: FrameBuffe(LCD)驱动开发

    \n"); } memcpy(fbmem,"123456789",10); //向映射空间拷贝数据 memcpy(buff,fbmem,10 六、OLED显示屏驱动+帧缓冲驱动模板 6.1 OLED简介 OLED,即有机发光二极管( Organic Light Emitting Diode)。 4)OLED屏开发了两种接口的 Demo 板,接口分别为七针的 SPI/IIC 兼容模块,四针的IIC 模块。 u8 y,u8 c); static void OLED_RefreshGRAM(void); /* 函数功能: OLED对应的GPIO口初始化 硬件连接: OLED模块---Tiny4412开发板 7.1 编写S70屏幕驱动 如果自己编写了LCD驱动(S720屏幕),测试LCD驱动之前,先去除内核自带的LCD驱动,编译烧写内核: Device Drivers  --->        

    53.4K13编辑于 2022-01-12
  • 来自专栏嵌入式项目开发

    Linux驱动开发: 块设备驱动开发

    块设备是与字符设备并列的概念, 这两类设备在 Linux 中驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念 在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。 ;//10M--空间容量 #define TINY4412_BLKDEV_BYTES_1 (1024*1024*10) /*设置块设备的大小*/ static unsigned char 10 //命令10,读CID数据 #define SDCard_CMD12 12 //命令12,停止数据传输 #define SDCard_CMD13 16 绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。

    36.7K31编辑于 2022-01-17
  • 1.1 Windows驱动开发:配置驱动开发环境

    在进行驱动开发之前,您需要先安装适当的开发环境和工具。首先,您需要安装Windows驱动开发工具包(WDK),这是一组驱动开发所需的工具、库、示例和文档。 然后,您需要安装Visual Studio开发环境,以便编写和调试驱动程序。在安装WDK和Visual Studio之后,您还需要配置适当的项目设置,以便能够正确编译和构建驱动程序。 图片为了能测试驱动程序运行状态,读者需安装VMWare虚拟机,双击附件中的VMware-workstation-full-16.2.4-20089737.exe安装程序一直点击下一步即可,需要注意的是在如下选项中请在增强型键盘驱动程序上打对勾 ,之后等待安装完毕即可;图片接着打开VMware虚拟机,并在文件处选择新建虚拟机,单机下一步并选中稍后安装操作系统,在操作系统选择页面选择Win10 x64版本。 图片虚拟机模板创建完成后,读者可根据如下配置选择编辑虚拟机设置,并在磁盘位置处将课件中的cn_windows_10_consumer_editions_version_1903_x64_dvd_8f05241d.iso

    1.2K10编辑于 2023-10-14
  • 来自专栏嵌入式项目开发

    Linux驱动开发: 网络设备驱动开发

    ENC28J60 的主要特点如下: 兼容 IEEE802.3 协议的以太网控制器 集成 MAC 和 10 BASE-T 物理层 支持全双工和半双工模式 数据冲突时可编程自动重发 SPI 接口速度可达 10Mbps /选中SP0总线支持*/ (使用的测试开发板是友善之臂的Tiny4412开发板) 因为开发板引出的SPI接口只有SPI0,所以只能配置SPI0总线。 1. 修改驱动端的probe函数,增加对SPI模式配置与中断号获取,正常情况下可以直接在SPI设备端直接修改,驱动端直接获取信息即可。 它们由设备驱动初始化,并且只能被设备驱动访问;高层协议不需要关心这块内存。 以下代码,在上面的网络设备驱动模型里加入了ENC28J60驱动代码,实现了完整的网卡驱动程序。

    18.6K11编辑于 2022-01-27
  • 驱动开发:配置Visual Studio驱动开发环境

    在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境,首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具,在课件内请双击ISO文件并运行内部的vs_ultimate.exe 安装包,Visual Studio的安装非常的简单,您只需要按照提示全部选择默认参数即可,根据机器配置不同可能需要等待一段时间; 配置驱动开发环境 在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境 ,之后等待安装完毕即可; 接着打开VMware虚拟机,并在【文件】处选择【新建虚拟机】,单机下一步并选中【稍后安装操作系统】,在操作系统选择页面选择【Win10 x64】版本。 ,避免重装系统,在后续课程中读者会出现无数次的蓝屏,而虚拟机快照的快速恢复功能则是一个很好的选择; 配置驱动开发模板 1.打开Visual Studio开发工具,然后选择【文件】菜单新建项目,并在已安装模板中选中 4.配置完成后,重新启动系统,在开机的时候选择Windows10 [启用调试程序]则系统会黑屏,说明已经正常进入调试模式了。

    1.7K20编辑于 2023-03-14
  • 来自专栏全栈程序员必看

    windows驱动开发教程_windows内核驱动开发

    对于驱动开发开发指引,微软官方文档网站已经提供了很详细的教程文档,并且在Github上提供了一系列典型的例程源码用于开发人员参考。 就上面5种驱动类型,笔者参考着微软的驱动例子开发过 鼠标键盘设备过滤驱动 和 网络过滤软件驱动程序,所以对驱动开发的理解仍在浅水区,如在阅读过程中发现有误的地方,还请不吝指出。 基于WDF的驱动开发 WDF的开发需要遵循一定的规则,开发实现时需要考虑较多的细节,由于篇幅有限,笔者凭着自己的经验暂且稍做列举,后续将写一篇针对WDF驱动开发的文章。 开发人员熟悉驱动安装逻辑有利于驱动开发,感兴趣可以通过此处进行了解。 6. 生产环境 从Win10开始,驱动文件包不仅需要进行扩展验证 (EV) 代码签名,还需要提交到硬件开发中心仪表盘,具体操作指南可以参考此处,你可以在该文档上找到驱动签名所需的任何内容。

    2.5K21编辑于 2022-09-27
  • 驱动开发:配置Visual Studio驱动开发环境

    在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境,首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具,在课件内请双击ISO文件并运行内部的vs_ultimate.exe 安装包,Visual Studio的安装非常的简单,您只需要按照提示全部选择默认参数即可,根据机器配置不同可能需要等待一段时间; 配置驱动开发环境 在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境 ,之后等待安装完毕即可; 图片 接着打开VMware虚拟机,并在【文件】处选择【新建虚拟机】,单机下一步并选中【稍后安装操作系统】,在操作系统选择页面选择【Win10 x64】版本。 ,避免重装系统,在后续课程中读者会出现无数次的蓝屏,而虚拟机快照的快速恢复功能则是一个很好的选择; 图片 配置驱动开发模板 1.打开Visual Studio开发工具,然后选择【文件】菜单新建项目,并在已安装模板中选中 图片 4.配置完成后,重新启动系统,在开机的时候选择Windows10 [启用调试程序]则系统会黑屏,说明已经正常进入调试模式了。

    2.4K50编辑于 2023-03-13
  • 驱动开发:Win10枚举完整SSDT地址表

    在前面的博文《驱动开发:Win10内核枚举SSDT表基址》中已经教大家如何寻找SSDT表基地址了,找到后我们可根据序号获取到指定SSDT函数的原始地址,而如果需要输出所有SSDT表信息,则可以定义字符串列表 PowerBy: LyShark// Email: me@lyshark.com#include <ntifs.h>VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint(("驱动程序卸载成功 ,qword ptr ds:[rdi+r10] |4D:631C82 | movsxd r11,dword ptr ds:[r10+rax*4] KeServiceDescriptorTable 函数地址// LyShark.com// 4c 8d 15 e5 9e 3b 00 lea r10,[nt! ULONG_PTR)MmGetSystemRoutineAddress(&na);return address;}VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint(("驱动程序卸载成功

    76430编辑于 2022-11-18
  • 驱动开发:Win10枚举完整SSDT地址表

    在前面的博文《驱动开发:Win10内核枚举SSDT表基址》中已经教大家如何寻找SSDT表基地址了,找到后我们可根据序号获取到指定SSDT函数的原始地址,而如果需要输出所有SSDT表信息,则可以定义字符串列表 LyShark // Email: me@lyshark.com #include <ntifs.h> VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("驱动程序卸载成功 ,qword ptr ds:[rdi+r10] | 4D:631C82 | movsxd r11,dword ptr ds:[r10+rax*4] KeServiceDescriptorTable 函数地址 // LyShark.com // 4c 8d 15 e5 9e 3b 00 lea r10,[nt! MmGetSystemRoutineAddress(&na); return address; } VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint(("驱动程序卸载成功

    74110编辑于 2022-12-28
  • 来自专栏嵌入式项目开发

    Linux驱动开发-编写按键驱动

    杂项设备注册函数 这篇文章介绍,如何使用杂项设备框架编写一个简单的按键驱动,完成编写、编译、安装、测试等流程,了解一个杂项字符设备驱动开发流程。 下面是杂项字符设备的接口: struct miscdevice { int minor; /*次设备号 10 20 */ const char *name; /*设备节点的名称*/ const 编写按键驱动 使用杂项设备注册按键驱动,应用层使用read接口读取按键值。 编写驱动之前需要先找到按键的原理图,找到按键接到CPU那个IO上的。 次设备号 */ static struct miscdevice misc= { .minor = MISC_DYNAMIC_MINOR, /*次设备号填255表示自动分配 主设备号固定为10 \n"); } module_init(tiny4412_key_init); /*驱动入口--安装驱动的时候执行*/ module_exit(tiny4412_key_exit); /*驱动出口--

    24.2K31编辑于 2022-04-08
  • 来自专栏sofu456

    驱动开发(WDM)

    ,显卡设备函数地址存储在VIDEO_HW_INITIALIZATION_DATA中,修改函数地址即可自定义设备驱动 三种驱动程序 总线驱动程序(负责和具体的硬件设备交互),单个 I/O 总线设备,并提供与设备无关的单槽功能 ,创建设备对象=>PDO 功能驱动程序(设备功能的具体实现),驱动单个设备,创建设备对象=>FDO 筛选器驱动,筛选设备的 I/O 请求、设备类或总线(使用ObReferenceObjectByHandle 打开设备修改驱动关联的函数),创建设备对象=>DO API Io,IO管理 Ex,内存分配 Ke,内核对象调用函数,不能分页 Rtl,字符串内存操作 Zw、NT,文件和注册表操作 Ps,进程、线程 内核用户层数据交换 setupapi或者cmapi(pnp安装) WDM WDM、WDF(WDM基础上架构的开发框架) NT驱动通过服务安装(服务通过sc命令查询) WDM驱动inf、cat、cer文件安装 windows drv) bus注册和注销,bus_register(struct bus_type *bus) device注册和注销,int device_register(struct device *dev) 驱动安装

    1.7K31发布于 2020-10-26
  • SDD驱动开发

    基于SDD驱动开发方法实践测试请关注微信公众号:阿呆-bot记录基于AI设计与开发工程,实践总结一套方法程序员使用AI开发Top5常见问题1.需求描述不清导致AI理解偏差程序员在给AI描述需求时,常常因为表达不准确或缺乏上下文 基于SDD驱动开发方法AI设计与开发过程中,如何确保AI生成的代码结构化、可控,成为关键难题。 目前业内普遍认识到,仅靠prompt驱动往往结果不可预测,因此逐步转向“设计驱动开发(Specification/SDDDrivenDevelopment,简称SDD)”模式。 “SDD驱动开发”是当前业界最具前瞻性的解决思路。它强调以结构化设计文档为源头,驱动AI实现,而非直接代码生成,让整个开发过程主动可控、可复查。这也是AI工程化的核心趋势之一。 SDD定义SDD(SpecificationDrivenDevelopment,规范驱动开发)是一种以明确规范(Specification/DesignDocument)为基础,驱动AI自动生成设计方案

    85811编辑于 2025-11-16
  • 来自专栏phodal

    README 驱动开发

    README 驱动开发 由于,看不到一个成熟的 RDD 定义,所以我先按我的理解定义出第一个版本的 README 驱动开发: README 驱动开发是一种通过事先编写 README 的方式,以一步步驱动出受用户欢迎产品的软件开发方法论 吸引更多的潜在用户或者是开发者。 做正确的事情。 构建更好的开发者体验。 它远远要比你做完一个开源项目,再去编写 README 来得快速、可靠。

    64310发布于 2020-06-22
  • 来自专栏韦东山嵌入式

    WIFI驱动开发

    Linux 4.9 内核驱动移植 Linux 4.9 BSP 内核驱动 下载驱动后获得驱动的 tar.gz 压缩包 解压后找到如下驱动与文件夹 进入内核,找到 linux-4.9/drivers/net /wireless 文件夹中,新建文件夹aic8800 并且把上面的驱动与文件夹放入刚刚创建好的 aic8800 中。 Linux 5.15 内核驱动 下载驱动后获得驱动的 tar.gz 压缩包 解压后找到如下驱动与文件夹 由于 Linux 5.15 需要保证内核的主线化,不可将非主线的第三方驱动放置于内核文件夹中,所以将驱动放置于 sunxi-btlpm"; uart_index = <0x2>; bt_wake = <&pio PE 9 GPIO_ACTIVE_HIGH>; bt_hostwake = <&pio PE 10 使用上面编译出来的内核与ko驱动,并且将固件放置于 rootfs 对应的 /lib/firmware/ 文件夹中

    1.9K10编辑于 2024-08-24
  • 驱动开发:文件微过滤驱动入门

    MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单 ,多数IRP操作都由过滤管理器(FilterManager或Fltmgr)所接管,因为有了兼容层,所以在开发中不需要考虑底层IRP如何派发,更无需要考虑兼容性问题,用户只需要编写对应的回调函数处理请求即可 ,这极大的提高了文件过滤驱动开发效率。 接下来将进入正题,讲解微过滤驱动的API定义规范以及具体的使用流程,并最终实现一个简单的过滤功能,首先你必须在VS上做如下配置,依次打开配置菜单,并增加驱动头文件。 并输入start启动驱动,输入stop则是关闭,启动后会看到如下信息; 这里简单介绍一下如何摘除微过滤驱动回调函数,其实摘除回调的方法有多种,常用的第一种通过向过滤驱动中写出一个返回命令让其不被执行从而实现绕过

    1.2K30编辑于 2023-10-11
  • 来自专栏嵌入式项目开发

    Linux驱动开发-安装驱动参数传递

    一、简介 在Linux下进行C语言开发时,经常在命令行传递参数给C程序,常见的Linux命令也是需要传参的,这样用起来就很灵活,根据不同的参数可以执行不同的效果。 Linux驱动安装时也支持传递参数,和命令行上运行的命令原理类似。 只不过在编写驱动的时候,需要在驱动代码里提前将相关信息声明好才可以使用。 这篇文章就介绍如果在命令安装驱动时,传递参数给驱动代码,演示各种类型的参数传输情况。 在驱动代码里声明传入参数的类型、权限,接收的变量名称。 module_param(变量的名称,类型,权限) 二、在驱动代码里声明传递参数的格式 /*传递整型类型数据*/ int int_data = 0; module_param(int_data, int [ 2692.220000] 安装驱动成功. [ 2692.220000] int_data=666 [ 2692.220000] p_data=789 [ 2692.220000] array_data

    18.9K40编辑于 2022-04-08
  • 驱动开发:文件微过滤驱动入门

    MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单 ,多数IRP操作都由过滤管理器(FilterManager或Fltmgr)所接管,因为有了兼容层,所以在开发中不需要考虑底层IRP如何派发,更无需要考虑兼容性问题,用户只需要编写对应的回调函数处理请求即可 ,这极大的提高了文件过滤驱动开发效率。 接下来将进入正题,讲解微过滤驱动的API定义规范以及具体的使用流程,并最终实现一个简单的过滤功能,首先你必须在VS上做如下配置,依次打开配置菜单,并增加驱动头文件。 // 注册表驱动程序的DisplayName 值SERVICE_ALL_ACCESS, // 加载驱动程序的访问权限SERVICE_FILE_SYSTEM_DRIVER, // 表示加载的服务是文件系统驱动程序

    1.1K50编辑于 2023-06-19
领券