int
device_ioctl(fd,argv)
{
/*
your
function
*/
}
static
struct
file_operations
device
=
{
.ioctl
=
device_ioctl
//预留外部接口
}
应用程序如下:
ioctl(device,argv);
上面这句就可以完成你的模块中ioctl中的功能。
驱动程序运行在内核空间,而应用程序运行于用户空间。一般情况下应用程序是不能直接访问硬件的,但最终程序的执行结果必然是要到硬件的,这时就需要驱动程序。打个比方,你要将一段字符写进硬盘,你在应用程序中是以文件的抽象方式进行的,但是在这个层面上你很难理解到底为什么这个函数能够写呢,它是如何找到硬件的呢,又是如何写进去的呢,此时其实我们可爱的驱动程序就发挥了作用,把你的数据写到硬盘由它来做,给你“屏蔽”掉许多复杂的硬件 *** 作,可以让您更专注于应用程序本身的设计。
其实总结一下,驱动程序扮演的是硬件和应用程序之间的桥梁作用,是 *** 作系统的一部分,希望您能满意。
准确来说,驱动是针对于硬件设备的,比如:
一个键盘,插到电脑上,那么电脑是如何使用键盘的呢,它们两者之间是如何相互交互的呢。这个过程是需要驱动程序来实现的。
键盘插入电脑,引发一个中断,然后中断程序会检查设备,并将一个驱动程序与这个键盘设备进行绑定,当你按下一个按键,会触发键盘内的电子信号的传输(理解为电位1和0吧),并最终转换为数字信号(即0和1表示的),然后Linux系统中的驱动程序接收到了这个信号,根据这个信号来判断触发了哪个按键(这个中间,其实有很多工作,不过可以这样概括的理解),最终反馈到屏幕上。
看到了吗,驱动,就是一个可以和硬件通信(能够正确理解硬件发出的信号)的程序。
看到这,我想你应该明白了,你也可以为一个鼠标写一个驱动(前提是你了解这个鼠标的通信协议,即电位转换情况),然后你可以把鼠标左键点击的效果,更改成正常情况下,鼠标右键点击的效果。是不是挺有意思的。
另外,因为现在系统的日益成熟,现在Linux系统工作者很少有机会再写硬件驱动程序了,因为这些驱动,大多数硬件产商都会给做好了(因为Linux驱动接口封装的很好)。在移植到其它平台的时候,可能只需要简单的修改一下Linux的驱动,就可以用了。
(ps:望采纳)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)