完整的程序在下载:http://download.csdn.net/detail/dijkstar/7913249 用户层创建的事件Event是一个Handle句柄,和内核中的创建的内核模式下的KEVENT是一个东西.因此,在应用层创建的事件,可以在内核层获得并使用.这一部分的原理,见张帆编著的<Windows驱动技术详解>章节8.5.4,P237页: 程序是来自于<Windows驱动技术详解>章节8.5.4(驱动程序和应用程序交互事件对象)和章节10.2.1(DPC定时器). 首…
go中的一个特点就是引入了相比于线程更加轻量级的协程(用户态的线程),那么什么是用户态和内核态呢? 一.什么是用户态和内核态 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态).此时处理器处于特权级最高的(0级)内核代码中执行.当进程处于内核态时,执行的内核代码会使用当前进程的内核栈.每个进程都有自己的内核栈.当进程在执行用户自己的代码时,则称其处于用户运行态(用户态).即此时处理器在特权级最低的(3级)用户代码中运行.当正在执行用户程序而突然被中…
所有的现代操作系统中,CPU是在两种不同的模式下运行的: 注意以下内容来自微软: windows用户模式和内核模式 运行 Windows 的计算机中的处理器有两个不同模式:用户模式 和内核模式 . 用户模式和内核模式都是针对CPU运行状态来说的,在用户模式下,CPU无法执行一些特权指令,而在内核模式下是可以的. 根据处理器上运行的代码的类型,处理器在两个模式之间切换. 应用程序在用户模式下运行,核心操作系统组件在内核模式下运行. 虽然许多驱动程序以内核模式运行,但某些驱动程序可能以用户模式运行.…
catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI驱动 . TDI的过滤框架 . WFP(Windows Filtering Platform windows过滤平台) 0. 引言 最早出现的网络驱动应该是网卡驱动,这是Windows的下进行网络安全攻防常见的需求,为了进一步分割应用程序的网络数据传输与下层协议直到下层硬件的关系,又出现了协议驱动,…
 1.基础 执行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式". 依据处理器上执行的代码的类型,处理器在两个模式之间切换.应用程序在用户模式下执行.核心操作系统组件在内核模式下执行.多个驱动程序在内核模式下执行,但某些驱动程序在用户模式下执行. 当启动用户模式的应用程序时.Windows 会为该应用程序创建"进程".进程为应用程序提供专用的"虚拟地址空间"和专用的"句柄表格&quo…
本页主题:如何在windows内核驱动中对文件操作,实现对文件的拷贝.粘贴.删除.查询信息等,这是很常用也是很简单的方法. 部分内容参考:http://www.cppblog.com/aurain/archive/2009/12/31/104563.html 实现原理: 一.在Windows执行体中,通过文件对象来代表文件,该文件对象是一种由对象管理器管理的执行体对象.例如:目录也是由文件对象代表的. 内核组件通过对象名来引用文件,即在文件的全路径前面加\DosDevices.(在Windows…
在Linux内核模块的开发过程中,经常涉及到运行在用户空间上的应用程序与内核模块进行交互,ioctl系统调用是常用的一种方式.本文并不涉及vlan的具体原理,仅通过vconfig与vlan内核模块进行交互为例,讲解通过ioctl系统调用来实现用户空间与内核驱动交互的过程. 1.用户空间命令行配置工具 vconfig是vlan在用户空间上的命令行配置工具,在vconfig的源码中,可以看到在用户空间上与内核通信部分,其实仅做了三件事. 接收用户输入,填充vlan_ioctl_args结构体,vla…
引言 本来在写一篇Windows内存管理的文章,写着写着就发现好多基础的概念都要先讲.更可怕的是,这些基础的概念我却不能完全讲清楚.只好再把这本<深入解析Windows操作系统>翻到第一章…… 很多书的第一章往往都会说:第一次读本章往往一知半解,建议学习后面的内容时隔段时间再回来看本章,会有更多的收获.这本书就是这样. 友情提示:结尾更精彩~ 进程 尽管表面上看起来程序和进程非常类似,但本质上它们却是截然不同的.程序是一个静态的指令序列,而进程则是一个容器,其中包含了当执行一个程序的特定实例时…
声明:本文所描述的所有资料和源码均搜集自互联网,版权归原始作者所有,所以在引用资料时我尽量注明原始作者和出处:本文所搜集资料也仅供同学们学习之用,由于用作其他用途引起的责任纠纷,本人不负任何责任.(本资料由代码疯子整理) 一.书籍推荐 <Windows驱动开发技术详解>作者:张帆.史彩成:出版社:电子工业出版社 <天书夜读:从汇编语言到Windows内核编程>作者:谭文.邵坚磊:出版社:电子工业出版社 <寒江独钓:Windows内核安全编程>作者:谭文.杨潇.邵坚磊:出…
测试信息 Dev Machine: Windows Version: 2004 (19041.264) WDK Version: 10.0.19041.1 SDK Version: 10.0.19041.1 Visual Studio: Community 2019 Test Machine: Windows 7 SP1 + KMD Manager + DbgView 开发环境搭建 参照:https://docs.microsoft.com/zh-cn/windows-hardware/driv…
毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和Windows驱动架构进行比较的论文.原文在这里. Linux和Windows设备驱动架构比较 1. 概述 这篇论文中,我们将考查目前最为广泛使用的两种操作系统,即Linux和Windows系统的设备驱动架构.为每种操作系统实现设备驱动所需要的驱动组件将被展示并进行比较,同时也展示每种操作系统中执行…
高观点下的设备驱动安装(overview) 一.windows是怎样安装设备的? 第一步:新设备的识别 在给一个新设备安装驱动之前,总线或集线器(hub)驱动会为连接到PC上的设备分配一个硬件ID(hardwareID)给设备.windows会根据这一系列的硬件ID匹配一个最接近设备的驱动安装包来安装驱动. 硬件ID的格式一般由以下组成: · 一个特定的总线前缀,例如:PCI\,    USB\ · 设备特定的厂商标识符.例如,厂商,型号,修正标识.这些格式(包括硬件ID)依赖于总线驱动 一个独…
转自:http://blog.csdn.net/joard_yang/article/details/6225937 译自:linux-2.6.31.14/Documentation/input/multi-touch-protocol.txt 简介 为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据.这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息. 使用说明 单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH.ABS_…
linux内核空间与用户空间信息交互方法     本文作者: 康华:计算机硕士,主要从事Linux操作系统内核.Linux技术标准.计算机安全.软件测试等领域的研究与开发工作,现就职于信息产业部软件与集成电路促进中心所属的MII-HP Linux软件实验室.如果需要可以联系通过kanghua151@msn.com联系他. 摘要:在进行设备驱动程序,内核功能模块等系统级开发时,通常需要在内核和用户程序之间交换信息.Linux提供了多种方法可以用来完成这些任务.本文总结了各种常用的信息交换方法,并用…
本文转载自James<Linux 内核驱动--多点触摸接口>   译自:linux-2.6.31.14\Documentation\input\multi-touch-protocol.txt 简介 为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据.这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息. 使用说明 单点触摸信息是以ABS承载并按一定顺序发送,如BTN_TOUCH.ABS_X.ABS_Y.SYNC.而多点触摸信息则是以AB…
在Windows NT中,80386保护模式的“保护”比Windows 95中更坚固,这个“镀金的笼子”更加结实,更加难以打破.在Windows 95中,至少应用程序I/O操作是不受限制的,而在Windows NT中,我们的应用程序连这点权限都被剥夺了.在NT中几乎不太可能进入真正的ring0层. 在Windows NT中,存在三种Device Driver: 1.“Virtual device Driver” (VDD).通过VDD,16位应用程序,如DOS 和Win16应用程序可以访问特定的…
在Windows NT中,80386保护模式的“保护”比Windows 95中更坚固,这个“镀金的笼子”更加结实,更加难以打破.在Windows 95中,至少应用程序I/O操作是不受限制的,而在Windows NT中,我们的应用程序连这点权限都被剥夺了.在NT中几乎不太可能进入真正的ring0层. 在Windows NT中,存在三种Device Driver: 1.“Virtual device Driver” (VDD).通过VDD,16位应用程序,如DOS 和Win16应用程序可以访问特定的…
作者:彭东林 邮箱:pengdonglin137@163.com 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 u-boot:U-Boot 2010.12 Linux内核版本:linux-3.0.31 Android版本:android-4.1.2 下面要分析的是内核Log打印的几个阶段 自解压阶段 内核启动阶段 内核启动完全以后 shell终端下 在这个阶段内核log打印可以调用printk和printas…
1.通过GPIO库函数控制LED   open("/dev/myleds",...)       close(fd)   ---------------------------------------------   sys_open                      sys_close       led_open(...)                led_release(...)       {                            {        …
1. windows采用设备树描述所有挂在系统总线上的设备,每个设备对应一个节点. 2.每个设备有自己的device object stack/driver stack. 一个物理上的设备对应多个device object. 3.系统加电后,PnP管理器要求(PCI)总线驱动程序枚举(enumerte)挂载的设备信息,bus diver响应此请求,扫描物理设备(IDSEL),为每个物理设备建立物理设备对象(physical device object,PDO).PnP管理器会查找注册表,搜索哪些…
linux内核驱动模型,以2.6.32内核为例.(一边写一边看的,有点乱.) 1.以内核对象为基础.用kobject表示,相当于其它对象的基类,是构建linux驱动模型的关键.具有相同类型的内核对象构成内核对象集,用kset表示,内核对象集也包含自己的内核对象,从而组成层次化的结构.2.用sysfs文件系统导出到用户空间.内核中的所有内核对象组织成树状,以对象属性为叶子.通过sysfs文件系统,将用户空间对文件的读写操作转化为对内核对象属性的显示和保存方法.从而导出内核对象信息,并提供配置接口.…
内核态与用户态(为什么存在这种机制.程序应处于哪个状态.如何判断当前所处状态.哪些功能需要内核态.如何实现这种机制) 1.首先我们应该思考清楚为什么会有内核态和用户态?(为什么存在这种机制) 因为计算机的资源是有限的, 所以不可能让每个程序都能访问所有资源, 有的程序能访问任何资源, 有的则不能.就如人类社会中的社会地位一样, 越是社会地位高的人, 拥有的资源越多.所以运行于内核态的程序必须要有十分可靠的安全性, 不然随便修改了OS的内核数据结构, 就会造成系统的崩溃.而处于用户态的程序, 最多…
以下部分内容转自:https://blog.csdn.net/jiatingqiang/article/details/7481497 反汇编调试内核驱动 arm-none-linux-gnueabi-objdump -S kmod-demo1.o  > a.txt 什么是Oops?从语言学的角度说,Oops应该是一个拟声词.当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”.“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”.看,Oop…
参考资料: https://blog.csdn.net/zqixiao_09/article/details/77131283 https://www.cnblogs.com/lopnor/p/6158800.html Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUT…
linux驱动程序一般工作在内核空间,但也可以工作在用户空间.下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们.Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0-4G.Linux内核将这4G字节的空间分为两部分.将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”.而将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间).因为每…
用户级和内核级线程 用户级线程:任何应用程序都可以通过使用线程库设计成多线程程序.线程库是用于用户级线程管理的一个例程句,它包含用于创建和销毁线程的代码.在线程间传递消息和数据的代码.调度线程执行的代码以及保存和恢复线程上下文的代码.该情况下所有活动发生在用户空间中,并且发生在一个进程中,而内核并不知道这些活动.内核继续以进程为单位进行调度. 用户级线程优点:所有线程管理数据结构都在一个进程的用户地址空间中,线程切换不需要内核态特权,因此,进程不需要为了线程管理切换到内核态. 1.用户级线程执行…
init是用户空间第一个程序,在调用init前程序都运行在内核态,之后运行init时程序运行到用户态. 操作系统上,一些内核线程在内核态运行,它们永远不会进入用户态.它们也根本没有用户态的内存空间.它的线性地址空间就是共享内核的线性地址空间.一些用户进程通常在用户态运行.有时因为系统调用而进入内核态,调用内核提供的系统调用处理函数. 但有时,我们的内核模块或者内核线程希望能够调用用户空间的进程,就像系统启动之初init_post函数做的那样. 如,一个驱动从内核得到了主从设备号,然后需要使用mk…
一.现代操作系统的权限分离: 现代操作系统一般都至少分为内核态和用户态.一般应用程序通常运行于用户态,而当应用程序调用系统调用时候会执行内核代码,此时会处于内核态.一般的,应用程序是不能随便进入内核态的而是需要向OS申请,因为内核态拥有更高的权限.所以当程序运行的时候,其实是有两个栈的,一个位于用户态,一个位于内核态.他们之间会按照操作系统的规定进行通信. 二.用户态切换到内核态的三种方式: 1.系统调用,也即是应用程序使用OS提供的接口调用内核功能.例如x86平台的int 80h和powerr…
转自:http://blog.csdn.net/kingdragonfly120/article/details/10858647 版权声明:本文为博主原创文章,未经博主允许不得转载. 当Linux内核空间发生中断后怎么使用户空间的应用程序运行相应的函数呢,当芯片有数据到来时内核会产生一个中断,但是怎样通知应用程序来取数据,以前这个问题一直困扰我很长时间,后来发现linux中有异步通知机制,在用户程序中用signal注册一个响应SIGIO信号的回调函数,然后在驱动程序中向该进程发出SIGIO信号…
转自:http://blog.csdn.net/adudurant/article/details/23135661 这个概念是很多人都混淆的了,我也是,刚开始无法理解OS时,把Linux内核也当做一个进程. 其实内核本身不是以进程形式存在的,最多在初始化的过程中表现得就像一个进程,但是内核绝对没有进程的数据结构task_struct,可以严格跟进程区分开 .自从创建init 进程之后,内核就不再主动占有cpu了.只有当进程主动要求和中断到来时,内核才动一动,很快又把cpu还给合适的进程,不是想…