1.编写字符驱动程序需要在内核中注册设备和中断程序,还有file_ops里面的open,read,release等函数
2.注册成功后在/proc/device文件里面可以看到你注册的设备名称和主设备号,/proc/interrupt文件中可以看到注册的中断
3.为设备创建文件节点,mknod /dev/char_dev_test c 主设备号 次设备号,于是就在/dev/里面生成一个char_dev_test 设备文件
4,应用程序通过文件 *** 作函数,比如open,read等 *** 作char_dev_test 文件
eg: FILE* p=open("/dev/char_dev_test","rb")
if(p==NULL) { printf("error,can't open dev file!")return -1}
char buf[1024]
read(p,buf,size_t)
//其中open是调用的注册进入内核的file_ops的open函数,read是调用的file_ops的read函数,里面一般有copy_to_user,将内核数据复制到用户空间,也就是复制到了buf中。
驱动中的IRP的全名是I/O Request Package,即输入输出请求包,它是Windows内核中的一种非常重要的数据结构。上层应用程序与底层驱动程序通信时,应用程序会发出I/O请求, *** 作系统将相应的I/O请求转换成相应的IRP,不同的IRP会根据类型被分派到不同的派遣例程中进行处理。都是应用软件的一种,两个程序的作用:驱动程序是连接硬件的必不可少的程序,相当于硬件和系统之间的桥梁;而应用程序是在驱动程序的基础上,有了硬件的连接激活,才能更好的应用发挥硬件的作用。区别在于两个程序所发挥的作用不同。
驱动程序取决于硬件和 *** 作系统。它们通常提供任何必要的异步时间相关硬件接口所需的中断处理。因此,差不多所有人都在用户模式下运行。然而,正如第二段所述,为了防止应用程序破坏关键OS数据,用户应用程序必然会在用户空间中运行。
此外,并非所有驱动程序都直接与设备通信。对于给定的I/O请求(如从设备读取数据),通常会有多个驱动程序分层堆栈,并参与请求。直接与设备通信的堆栈中的一个驱动程序称为功能驱动程序执行辅助处理的驱动程序称为过滤器驱动程序。
扩展资料:应用程序调用 *** 作系统实现的函数, *** 作系统调用驱动程序实现的函数。驱动程序知道如何与设备硬件通信以获取数据。驱动程序从设备获取数据后,会将数据返回给 *** 作系统,然后将其返回给应用程序。
应用程序通过设备驱动程序(而不是OS)提供的API /接口连接到IO设备。 *** 作系统处理大多数硬件/软件交互。硬件供应商编写“插件/模块/驱动程序”,允许 *** 作系统控制其特定的硬件。因此,使用OS提供的接口,您可以编写应用程序以访问IO设备。
因此,如果没有驱动程序的帮助,用户应用程序无法直接访问硬件,因为设备驱动程序是用低级语言编写的,而硬件,而用户应用程序是用高级语言编写的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)