首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏鸿蒙开发笔记

    OpenHarmony轻量系统开发8】其它驱动开发示例

    8.1代码示例OpenHarmony代码中,Hi3861提供了绝大部分的驱动示例代码,文件路径:device\soc\hisilicon\hi3861v100\sdk_liteos\app\demo\src 开发者可以参考,文件如下:8.2如何使用(1)创建文件夹一般情况下,我们自己如果需要使用某个驱动,编写的代码要存放在app目录下,这里我们以app_demo_pwm.c为例。 ohos_init.h"#include "cmsis_os2.h"#include <hi_types_base.h>#include <hi_early_debug.h>接着我们可以根据自己使用到的哪个驱动 ,添加对应的驱动头文件,比如我们用到的是pwm,那么添加的头文件如下:#include <hi_pwm.h>(4)头文件路径此外我们还得修改头文件,这里主要修改 BUILD.gn文件,通常情况下需要增加 ,我想邀请你帮我三个小忙:点赞,转发,有你们的 『点赞和评论』,才是我创造的动力;关注小编,同时可以期待后续文章ing,不定期分享原创知识;想要获取更多完整鸿蒙最新学习知识点,可关注B站:码牛课堂鸿蒙开发

    50820编辑于 2024-09-05
  • 来自专栏嵌入式项目开发

    Linux驱动开发: USB驱动开发

    驱动程序把驱动程序对象注册到USB子系统中,稍后再使用制造商和设备标识来判断是否安装了硬件。 当然,这些制造商和设备标识需要我们编写进USB 驱动程序中。 USB 驱动程序依然遵循设备模型 —— 总线、设备、驱动。 和I2C 总线设备驱动编写一样,所有的USB驱动程序都必须创建的主要结构体是 struct usb_driver,它们向USB 核心代码描述了USB 驱动程序。 _u8 bInterfaceProtocol; /* 这个值不用来匹配驱动的, 驱动用它来在 USB 驱动的探测回调函数中区分不同的设备 该成员一般来保存一个结构体指针,存放该设备特殊的数据 鼠标驱动代码: 该模板适用于键盘驱动

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

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

    4)OLED屏开发了两种接口的 Demo 板,接口分别为七针的 SPI/IIC 兼容模块,四针的IIC 模块。 : OLED对应的GPIO口初始化 硬件连接: OLED模块---Tiny4412开发板 GND--------GND VCC--------VCC(5V) D0---------SCL--- u8 page; page=y/8; //得到当前点的页数0/8=0 1/8=0 y=y%8; //得到一列中点的位置。 (0~7) //0%8=0 1%8=1 .....7%8=7 8%8=0 9%8=1 ...... 7.1 编写S70屏幕驱动 如果自己编写了LCD驱动(S720屏幕),测试LCD驱动之前,先去除内核自带的LCD驱动,编译烧写内核: Device Drivers  --->        

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

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

    块设备是与字符设备并列的概念, 这两类设备在 Linux 中驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念 在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。 8 //命令8 ,SEND_IF_COND #define SDCard_CMD9 9 //命令9 ,读CSD数据 #define SDCard_CMD10 10 data_rx=0; u8 i; for(i=0;i<8;i++) { *SD_GPBDAT &= ~(1 << 0);//输出0 if(data_tx&0x80)*SD_GPBDAT 绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。

    37.8K31编辑于 2022-01-17
  • 来自专栏嵌入式项目开发

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

    /选中SP0总线支持*/ (使用的测试开发板是友善之臂的Tiny4412开发板) 因为开发板引出的SPI接口只有SPI0,所以只能配置SPI0总线。 1. 修改驱动端的probe函数,增加对SPI模式配置与中断号获取,正常情况下可以直接在SPI设备端直接修改,驱动端直接获取信息即可。 它们由设备驱动初始化,并且只能被设备驱动访问;高层协议不需要关心这块内存。 6.1 网络设备驱动编程步骤 1. 以下代码,在上面的网络设备驱动模型里加入了ENC28J60驱动代码,实现了完整的网卡驱动程序。

    19.2K11编辑于 2022-01-27
  • 1.1 Windows驱动开发:配置驱动开发环境

    在进行驱动开发之前,您需要先安装适当的开发环境和工具。首先,您需要安装Windows驱动开发工具包(WDK),这是一组驱动开发所需的工具、库、示例和文档。 然后,您需要安装Visual Studio开发环境,以便编写和调试驱动程序。在安装WDK和Visual Studio之后,您还需要配置适当的项目设置,以便能够正确编译和构建驱动程序。 ,某些读者可能听说过DDK或者IFSDDK,最典型的开发工具包莫过于DDK7600,直到目前此类工具包仍然可以正常使用,但并不推荐。 图片为了能测试驱动程序运行状态,读者需安装VMWare虚拟机,双击附件中的VMware-workstation-full-16.2.4-20089737.exe安装程序一直点击下一步即可,需要注意的是在如下选项中请在增强型键盘驱动程序上打对勾 图片虚拟机模板创建完成后,读者可根据如下配置选择编辑虚拟机设置,并在磁盘位置处将课件中的cn_windows_10_consumer_editions_version_1903_x64_dvd_8f05241d.iso

    1.3K10编辑于 2023-10-14
  • 来自专栏全栈程序员必看

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

    对于驱动开发开发指引,微软官方文档网站已经提供了很详细的教程文档,并且在Github上提供了一系列典型的例程源码用于开发人员参考。 就上面5种驱动类型,笔者参考着微软的驱动例子开发过 鼠标键盘设备过滤驱动 和 网络过滤软件驱动程序,所以对驱动开发的理解仍在浅水区,如在阅读过程中发现有误的地方,还请不吝指出。 目前在网上能找到的关于驱动开发的中文书籍基本上都是围绕WDM模式进行讲述的,而关于WDF(Windows 驱动框架)开发的书籍寥寥无几,《竹林溪径——深入浅出Window驱动开发》和《Developing 基于WDF的驱动开发 WDF的开发需要遵循一定的规则,开发实现时需要考虑较多的细节,由于篇幅有限,笔者凭着自己的经验暂且稍做列举,后续将写一篇针对WDF驱动开发的文章。 开发人员熟悉驱动安装逻辑有利于驱动开发,感兴趣可以通过此处进行了解。 6.

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

    在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境,首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具,在课件内请双击ISO文件并运行内部的vs_ultimate.exe 安装包,Visual Studio的安装非常的简单,您只需要按照提示全部选择默认参数即可,根据机器配置不同可能需要等待一段时间; 配置驱动开发环境 在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境 图片 虚拟机模板创建完成后,读者可根据如下配置选择编辑虚拟机设置,并在磁盘位置处将课件中的cn_windows_10_consumer_editions_version_1903_x64_dvd_8f05241d.iso ,避免重装系统,在后续课程中读者会出现无数次的蓝屏,而虚拟机快照的快速恢复功能则是一个很好的选择; 图片 配置驱动开发模板 1.打开Visual Studio开发工具,然后选择【文件】菜单新建项目,并在已安装模板中选中 是 (/NXCOMPAT) 随机基址 此处需要清空 子系统 本机 (/SUBSYSTEM:NATIVE) 当如上文件配置完成后,最终效果如下图所示; 图片 8.

    2.6K50编辑于 2023-03-13
  • 驱动开发:配置Visual Studio驱动开发环境

    在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境,首先我们需要安装Visual Studio 2013这款功能强大的程序开发工具,在课件内请双击ISO文件并运行内部的vs_ultimate.exe 安装包,Visual Studio的安装非常的简单,您只需要按照提示全部选择默认参数即可,根据机器配置不同可能需要等待一段时间; 配置驱动开发环境 在正式开始驱动开发之前,需要自行搭建驱动开发的必要环境 虚拟机模板创建完成后,读者可根据如下配置选择编辑虚拟机设置,并在磁盘位置处将课件中的cn_windows_10_consumer_editions_version_1903_x64_dvd_8f05241d.iso ,避免重装系统,在后续课程中读者会出现无数次的蓝屏,而虚拟机快照的快速恢复功能则是一个很好的选择; 配置驱动开发模板 1.打开Visual Studio开发工具,然后选择【文件】菜单新建项目,并在已安装模板中选中 是 (/NXCOMPAT) 随机基址 此处需要清空 子系统 本机 (/SUBSYSTEM:NATIVE) 当如上文件配置完成后,最终效果如下图所示; 8.

    1.9K20编辑于 2023-03-14
  • 来自专栏大飞的部落阁

    HttpRunner-8-数据驱动

    数据驱动概览 为什么要用数据驱动 举个简单例子,当我们在测试一个输入框的功能时,可能需要输入不同的参数,此时,我们不需要设计多个用例,而只需要将输入值参数化,将不同的参数作为一个列表通过数据驱动的方式进行加载即可 httprunner 的数据驱动 通过上篇文章,我们已经知道 httprunner 的数据驱动需要在 testsuite 中使用关键字 parameters 来定义。 yml parameters: user_id: [1001, 1002, 1003, 1004] 进行该配置后,测试用例在运行时就会对 user_id 实现数据驱动 通过以上内容,我们可以知道,在 HttpRunner 的数据驱动中,我们有 6 种方式进行实现。 独立参数 & 引用自定义函数 6 关联参数 & 引用自定义函数 数据驱动实例 在上面我们已经介绍了 6 中驱动模式,而且也学习了直接在 yml 文件中定义参数的两种场景,那怎么使用 CSV 文件实行数据驱动

    61710编辑于 2022-06-17
  • 来自专栏张高兴的博客

    张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动 8×8 点阵

      GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/MAX7219

    75260发布于 2018-05-18
  • 来自专栏phodal

    README 驱动开发

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

    70310发布于 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 需要保证内核的主线化,不可将非主线的第三方驱动放置于内核文件夹中,所以将驱动放置于 wakeup-source; }; /* bt session */ bt { compatible = "allwinner,sunxi-bt"; bt_rst_n = <&pio PE 8 使用上面编译出来的内核与ko驱动,并且将固件放置于 rootfs 对应的 /lib/firmware/ 文件夹中

    2.5K10编辑于 2024-08-24
  • 来自专栏嵌入式项目开发

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

    杂项设备注册函数 这篇文章介绍,如何使用杂项设备框架编写一个简单的按键驱动,完成编写、编译、安装、测试等流程,了解一个杂项字符设备驱动开发流程。 编写按键驱动 使用杂项设备注册按键驱动,应用层使用read接口读取按键值。 编写驱动之前需要先找到按键的原理图,找到按键接到CPU那个IO上的。 \n"); } module_init(tiny4412_key_init); /*驱动入口--安装驱动的时候执行*/ module_exit(tiny4412_key_exit); /*驱动出口-- 卸载驱动的时候执行*/ MODULE_LICENSE("GPL"); /*设置模块的许可证--GPL*/ 2.2 makefile文件 编译驱动的makefile代码。 license: GPL depends: vermagic: 3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8

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

    MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在编写时更简单 ,多数IRP操作都由过滤管理器(FilterManager或Fltmgr)所接管,因为有了兼容层,所以在开发中不需要考虑底层IRP如何派发,更无需要考虑兼容性问题,用户只需要编写对应的回调函数处理请求即可 ,这极大的提高了文件过滤驱动开发效率。 ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2} ;GUID 每个分组都有固定的GUID Provider = %Msft% ;变量值 从 并输入start启动驱动,输入stop则是关闭,启动后会看到如下信息; 这里简单介绍一下如何摘除微过滤驱动回调函数,其实摘除回调的方法有多种,常用的第一种通过向过滤驱动中写出一个返回命令让其不被执行从而实现绕过

    1.7K30编辑于 2023-10-11
  • 来自专栏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.8K31发布于 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自动生成设计方案

    1.6K11编辑于 2025-11-16
  • 驱动开发:内核运用LoadImage屏蔽驱动

    在笔者上一篇文章《驱动开发:内核监视LoadImage映像回调》中LyShark简单介绍了如何通过PsSetLoadImageNotifyRoutine函数注册回调来监视驱动模块的加载,注意我这里用的是监视而不是监控之所以是监视而不是监控那是因为 原理其实很容易理解,如果我们需要实现则只需要在《驱动开发:内核监视LoadImage映像回调》这篇文章的代码上稍加改进即可,当检测到lyshark.sys驱动加载时,直接跳转到入口处快速写入一个Ret让驱动返回即可 ,至于如何写出指令的问题如果不懂建议回头看看《驱动开发:内核CR3切换读写内存》文章中是如何读写内存的,这段代码实现如下所示。 enable();__writecr0(cr0);KeLowerIrql(irql);}BOOLEAN DenyLoadDriver(PVOID DriverEntry){UCHAR fuck[] = "\xB8\ STATUS_SUCCESS;PMDL pMdl = NULL;PVOID pVoid = NULL;ULONG ulShellcodeLength = 16;UCHAR pShellcode[16] = { 0xB8,

    2K20编辑于 2022-11-14
  • 驱动开发:实现驱动加载卸载工具

    驱动程序加载工具有许多,最常用的当属KmdManager工具,如果驱动程序需要对外发布那我们必须自己编写实现一个驱动加载工具,当需要使用驱动时可以拉起自己的驱动,如下将实现一个简单的驱动加载工具,该工具可以实现基本的 installDvr 驱动安装#include <iostream>#include <Windows.h>using namespace std;// 安装驱动BOOL installDvr(CONST / 用户界面程序用来标识服务的显示名称SERVICE_ALL_ACCESS, // 对服务的访问权限:所有全权限SERVICE_KERNEL_DRIVER, // 服务类型:驱动服务 " << endl;}getchar();return 0;}startDvr 启动驱动#include <iostream>#include <Windows.h>using namespace std " << endl;}getchar();return 0;}stopDvr 停止驱动#include <iostream>#include <Windows.h>using namespace std

    3.1K20编辑于 2022-11-20
  • 来自专栏嵌入式项目开发

    Linux下驱动开发_块设备驱动开发(内存模拟存储)

    一、前言 块设备驱动块是Linux下3大设备驱动框架之一,块设备主要是针对存储类型的设备设计的驱动,配合文件系统完成数据存储。 所以大致总结下:块设备驱动的目的是给Linux文件系统提供底层接口。 二、编写块设备驱动的思路 既然学到了驱动开发,了解到块设备开发。 那么看这篇文章的小伙伴应该在单片机里裸机方式写过一些flash驱动、SD卡驱动。 那么为了方便介绍块设备的驱动开发,我这里会先用malloc在驱动申请一块内存来当做FLASH设备,这样就不需要接任何硬件,降低了难度,纯软件的方式理解驱动框架运作流程。 加入SD卡的驱动,配合块设备框架,完成完整的块设备驱动编写。

    6.2K30编辑于 2022-10-31
领券