展开

关键词

通信 DeviceIoControl

这种通信方式,就是自定义一种IO控制码,然后调DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL(DeviceIoControl 关于在Ring0层中要设置设备名的同时还要设置符号链接名的原因,是因为只有符号链接名才可以被户模式下的识别。     windows下的设备是以"\Device\[设备名]”形式命名的。 \Device\[设备名],不容易记忆,通常符号链接可以理解为设备的别名,更重要的是设备名,只能被内核模式下的其他所识别,而别名可以被户模式下的识别,例如c盘,就是名为"c:"的符号链接, 铺垫打理好之后,就可以由符号链接名通过CreateFile函数获取到设备句柄DeviceHandle,再本场的主角,DeviceIoControl通过这个DeviceHandle发送控制码了     1.自定义好IO控制码 (CTL_CODE宏 四个参数,32位,4部分,存储设备类型,访问权限,操作功能,缓冲区数据传递方式(四种))     2.定义设备名,符号链接名

66420

通信 DeviceIoControl

之前写过一篇关于通过DeviceIoControl函数来使通信的博客,这次再通过这个完整的代码来简要疏通总结一下。    这种通信方式,就是自定义一种IO控制码,然后调DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL(DeviceIoControl 关于在Ring0层中要设置设备名的同时还要设置符号链接名的原因,是因为只有符号链接名才可以被户模式下的识别。     windows下的设备是以"\Device\[设备名]”形式命名的。 铺垫打理好之后,就可以由符号链接名通过CreateFile函数获取到设备句柄DeviceHandle,再本场的主角,DeviceIoControl通过这个DeviceHandle发送控制码了     1.自定义好IO控制码 (CTL_CODE宏 四个参数,32位,4部分,存储设备类型,访问权限,操作功能,缓冲区数据传递方式(四种))     2.定义设备名,符号链接名

75931
  • 广告
    关闭

    腾讯云+社区系列公开课上线啦!

    Vite学习指南,基于腾讯云Webify部署项目。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CreateFile DeviceIoControl dwIoControlCode——通信

    \\DeviceName”),DeviceName必须设备内定义的设备名称一致。 ,是因为只有符号链接名才可以被户模式下的识别。 \Device\[设备名],不容易记忆,通常符号链接可以理解为设备的别名,更重要的是设备名,只能被内核模式下的其他所识别,而别名可以被户模式下的识别,例如c盘,就是名为"c:"的符号链接, 同步设为NULL,DeviceIoControl将进行阻塞调;否则,在编时按异步操作设计 );   先介绍IO控制码,可以通过CTL_CODE宏来组合定义一个控制码,并在IRP_MJ_DEVICE_CONTROL 而使户模式地址的十分小心。

    83130

    Linux实践:如何发送【信号】给

    目录 kill 命令和信号 使 kill 命令发送信号 多线中的信号 信号注册和处理函数 代码示例:发送信号 功能需求 代码 模块 Makefile 编译和加载 代码示例 控制的方向是从层到层: 那么,如果想让的执行路径从下往上,也就是从层传递到层,该如何实现呢? 最容易、最简单的方式,就是通过发送信号! 那么,如何才能知道的PID呢? 这里定义一个简单的协议:当参数中 cmd 为 100 的时候,就表示来告诉自己的 PID。 定义了一个全局变量 g_pid,来保存传入的参数PID。 ,上篇文章是一样的: 代码示例:接收信号 注册信号处理函数 仍然放在 ~/tmp/App/ 目录下。

    12820

    linux开发之Hello

    linux开发之Hello 0.说在前面 1.HelloWord 模块组成 模块组成 头文件(必选) 模块参数(可选) 模块功能函数(可选) 其他(可选) 模块加载函数(必选) 模块卸载函数 (必选) 模块许可声明(必选) 引入头文件 #include <linux/init.h> /* 定义了一些相关的宏 */ #include <linux/module.h> /* 定义了模块需要的 /init.h> /* 定义了一些相关的宏 */ #include <linux/module.h> /* 定义了模块需要的 */ MODULE_LICENSE("Dual BSD/GPL" hello_init); /* 指定模块加载函数 */ module_exit(hello_exit); /* 指定模块卸载函数 */ 2.Makefile 编写Makefile # 利其内建语句 = /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) # 否则,是直接从命令行调的, # 这时要调内核构造系统 modules

    75120

    Linux系统之Framebuffer框架

    资料下载 coding无法使浏览器打开,必须git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网大全 Framebuffer框架 1. 怎么编写字符设备 主设备号 构造file_operations结构体,填充open/read/write等成员函数 注册:register_chrdev(major, name, &fops Framebuffer框架 分为上下两层: fbmem.c:承上启下 实现、注册file_operations结构体 把APP的调向下转发到具体的硬件 xxx_fb.c:硬件相关的 怎么编写Framebuffer 核心: 分配fb_info framebuffer_alloc 设置fb_info var fbops 硬件相关操作 注册fb_info register_framebuffer

    12430

    设备通知的几种方法

    设备可以直接操作硬件,如果和设备之间实现了双向通信,也就达到了控制底层硬件设备的目的。 它们之间的通信包括两个方面:一方面是传送给设备的数据;另一方面是设备发送给的消息。 前者的实现较容易,通过CreateFile()函数获取设备的句柄后,就可以使Win32函数,如DeviceIoControl()、ReadFile()或WriteFile()等实现设备之间的通信 它将硬件细节屏蔽开来,使软件不依赖于硬件并且可在多个不同的平台之间移植。本文介绍了5种设备通知的方法,其中前3种方法主要于VxD中,后2种方法主要于WDM。 测试结果表明,它们都能够达到设备通知的目的。 参考文献 1 欧青立,徐建波,李方敏,等. 虚拟设备VxD的研究开发[J].

    66321

    Linux系统之编写使多buffer的

    资料下载 coding无法使浏览器打开,必须git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网大全 编写使多buffer的 本节视频编写好的,在GIT仓库里 IMX6ULL\source\03_LCD\14_use_multi_framebuffer STM32MP157 \source\A7\03_LCD\14_use_multi_framebuffer 参考基础课里使Framebuffer的精简 IMX6ULL\source\03_LCD\14 上机测试 3.1 恢复内核使自带的LCD 恢复:修改drivers/video/fbdev/Makefile,恢复内核自带的mxsfb.c,如下: obj-$(CONFIG_FB_MXS) LCD自黑屏 为了省电,LCD在10分钟左右会自黑屏。

    8840

    Linux系统GIC分析

    视频观看 百问网大全 第五章GIC分析 资料下载 视频观看 1. GIC中的重要函数和结构体 沿着中断的处理流,GIC涉及这4个重要部分: CPU从异常向量表中调handle_arch_irq,这个函数指针是有GIC设置的 GIC才知道怎么判断发生的是哪个 GIC中断 从GIC获得hwirq后,要转换为virq:需要有GIC Domain 调irq_desc[virq].handle_irq函数:这也该由GIC提供 处理中断时,要屏蔽中断、清除中断等 irq_init_cb(desc->dev, desc->interrupt_parent); 2.1 内核支持多种GIC 按照设备树的套路: 注册 = { .compatible = "arm,cortex-a7-gic", \ .data = gic_of_init } 2.2 在设备树里指定GIC 在设备树中指定GIC,内核根据设备树来选择

    8420

    Linux系统之I2C系统模型

    资料下载 coding无法使浏览器打开,必须git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网大全 I2C系统模型 参考资料: Linux内核文档: Documentation\i2c\instantiating-devices.rst Documentation \i2c\writing-clients.rst Linux内核示例: drivers/eeprom/at24.c 1. I2C的层次 I2C Core就是I2C核心层,它的作: 提供统一的访问函数,比如i2c_transfer、i2c_smbus_xfer等 实现I2C总线-设备-模型,管理:I2C设备( I2C总线-设备-模型 2.1 i2c_driver i2c_driver表明能支持哪些设备: 使of_match_table来判断 设备树中,某个I2C控制器节点下可以创建I2C设备的节点

    13340

    Linux系统之LCD框架_使设备树

    资料下载 coding无法使浏览器打开,必须git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网大全 编_LCD框架_使设备树 参考资料,GIT仓库里: 基于这个修改: IMX6ULL\source\03_LCD\03_lcd_drv_qemu_ok STM32MP157 \source\A7\03_LCD\03_lcd_drv_qemu_ok 参考:内核自带的示例 Linux源码:drivers/video/fbdev/simplefb.c 设备树: 说明 Linux = 框架 + 硬件编。 在前面已经基于QEMU编写了LCD,对LCD的框架已经分析清楚。 核心就是: 分配fb_info 设置fb_info 注册fb_info 硬件相关的设置 本节课我们基于设备树来编写。 2. 入口函数注册platform_driver 3.

    12130

    wince中测试的实现

    这里建的工是MFC的smart device,选择ARMV4I的指令集,不同的设备可能会有轻微的不同,不过大体实现是一样滴。还有,这里选的类型是dialog base。    }   2.和内核流式的双向通信   首先,假设流式如果注册的名字为LED,index是0。 (数值零不是字母O)   然后,中共同分别都要定义一个宏,名为IOCTL_WRITE_LED,即#define IOCTL_WRITE_LED 10086 。    (LPOVERLAPPED) NULL);IOCTL_READ_LED这个宏自行定义,这里面的格式转换花费了我一点时间,现在就能完成层主读取和写数据进内核了。    3.扩展   如果要读写内核的所有数据,可以通过读写一个流式,然后这个流式共享内存或者全局变量的方式传值。可能还有更好的办法,目前我就只能这种比较挫的方式。

    22240

    python启和终止

    python启和终止 ---- 1. 目的 每天上班,工作需要,电脑上需要每天开机启一些软件,下班时候,需要关掉一些软件。 编写脚本 启脚本 #coding=utf-8 import win32api #日报软件启 win32api.ShellExecute(0, 'open', r'C:\Program Files \ispiritPro.exe', '','',1) #QQ启 win32api.ShellExecute(0, 'open', r'D:\QQ\Bin\QQ.exe', '','',1) #.. #当然你还可以添加很多你需要启的软件 终止脚本 #coding=utf-8 import os #终止QQ软件 os.system("taskkill /F /IM QQ.exe") # 制作exe 最后把这两个脚本制作成exe文件,放到桌面上,每次都可以很方便的使

    95810

    Linux系统之GIC对中断的处理流

    资料下载 coding无法使浏览器打开,必须git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网大全 GIC对中断的处理流 资料下载 视频观看 1. 一级中断控制器处理流 2. 多级中断控制器处理流 参考资料: linux kernel的中断子系统之(七):GIC代码分析 使逐步演进的方法才能形象地理解。 1. 发生UART中断时 从GIC中读取寄存器知道发生了32号中断,通过GIC irq_domain可以知道virq为16 调irq_desc[16]中的handleA函数,它的作是调action 按下KEY时: 从GIC中读取寄存器知道发生了33号中断,通过GIC irq_domain可以知道virq为16 调irq_desc[16]中的handleB函数 handleB

    12320

    linux设备第一篇:设备简介

    (说白了,除了对外提供特定的接口外,任何实现细节对都是不可见的。)户的操作通过一组标准化的调执行,而这些调独立于特定的的任务是把这些标准化调映射到实际硬件的设备特有操作上。 在编写时,该特别注意下面这个概念:编写访问硬件的内核代码时,不要给户强加任何特定策略。 不带策略的包括一些典型的特征:同时支持同步和异步操作、能够被多次打开、充分利硬件特性,以及不具备来“简化任务”的或提供策略相关的软件层等。 就是实际硬件之间的一个软件层,相同的硬件,不同的可能提供不同的功能。实际的设计要在许多要考虑的因素之间做出平衡。 linux可以让向字符设备一样读写块设备,允许一次传递任意多字节的数据。

    1.6K100

    Linux系统之结合APP分析LCD

    资料下载 coding无法使浏览器打开,必须git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网大全 结合APP分析LCD 本节视频对源码在GIT仓库中,位置如下(这2个文件是完全一样的): doc_and_source_for_drivers\STM32MP157 get_fb_info(fbidx); if (info->fbops->fb_open) { res = info->fbops->fb_open(info,1); // 硬件相关的 file_fb_info(file); do_fb_ioctl(info, cmd, arg); var = info->var; // 硬件相关的设置的 file_fb_info(file); do_fb_ioctl(info, cmd, arg); fix = info->fix; // 硬件相关的设置的

    7030

    Linux系统之使GPIO模拟I2C的分析

    视频观看 百问网大全 使GPIO模拟I2C的分析 参考资料: i2c_spec.pdf Linux文档 Linux-5.4\Documentation\devicetree\bindings \i2c\i2c-gpio.yaml Linux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux源码 Linux 主设备不三极管 从设备决定数据,要发出回信号的话,就三极管让SDA变为0 从这里也可以知道ACK信号是低电平 从上面的例子,就可以知道怎样在一条线上实现双向传输,这就是SDA上要使上拉电阻的原因 当SCL为低电平时候,大家都不该使IIC总线,只有当SCL从低电平变为高电平的时候,IIC总线才能被使分析 3.1 平台总线设备模型 3.2 设备树 对于GPIO引脚的定义,有两种方法: 老方法:gpios 新方法:sda-gpios、scl-gpios 3.3 分析 1.

    23521

    AB153x API----captouch

    总览本节介绍captouchAPI,包括术语和首字母缩写词,支持的功能,软件体系结构,有关如何使的详细信息,枚举,结构和功能。 在这种法中,户可以通过hal_captouch_tune_control()来调整粗略上限。如何使使 了 正常。 要在正常模式下使catpouch,请参考GPIO数据表,确定选择将GPIO复到captouch引脚的GPIO。 然后调hal_captouch_init()手设置通道位图,注册回调函数,默认粗略上限和阈值。调hal_captouch_init()之后,即可工作。 如果按下或释放了键盘上的某个键,则键盘将触发中断以调回调函数。使hal_captouch_get_event()在回调函数中获取键事件和键位置编号。为确保可靠的键扫描,请勿重载回调函数。

    22430

    LCD分析

    /* LCD分析 和别的一样,首先找到模块函数的入口处 */ #include "s3c2410fb.h" /* Debugging stuff */ #ifdef CONFIG_FB_S3C2410 \n", fbi->regs.lcdcon4); dprintk("lcdcon[5] = 0x%08lx\n", fbi->regs.lcdcon5); /*根据上面的函数设置的结果,写入到相的寄存器 coherent_dma_mask = 0xffffffffUL } }; /************************LCD资源结束*******************************/ /*找到的模块入口处 ,发现LCD是平台 既然是平台,那当然就有平台的设备了。 */ /*当找到上述的设备时,就会调中的probe函数。

    9920

    相关产品

    • TencentOS Server

      TencentOS Server

      腾讯服务器操作系统(TencentOS Server,TS)是腾讯云推出的Linux操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云CVM全规格实例上,包括黑石2.0服务器。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券