以下是国嵌教学视频中的部分驱动代码及应用程序代码:
//memdevc
static const struct file_operations mem_fops =
{
owner = THIS_MODULE,
llseek = mem_llseek,
read = mem_read,
write = mem_write,
open = mem_open,
release = mem_release,
};
//app-memc
/打开设备文件/
fp0 = fopen("/dev/memdev0","r+");
/写入设备/
fwrite(Buf, sizeof(Buf), 1, fp0);
/重新定位文件位置(思考没有该指令,会有何后果)/
fseek(fp0,0,SEEK_SET);//调用mem_llseek()定位
/读出设备/
fread(Buf, sizeof(Buf), 1, fp0);
调用的函数名与如fopen,fwrite,fread,fseek与file_operation中的指针名open,writeread,llseek不一样,内核是如何知道应该调用哪个函数的?
Linux是Unix *** 作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁, *** 作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的 *** 作要自己来编写,而且调试也不方便。本人这几周来为实验室自行研制的一块多媒体卡编制了驱动程序,获得了一些经验,愿与Linux fans共享
一、Linux device driver 的概念系统调用是 *** 作系统内核和应用程序之间的接口,设备驱动程序是 *** 作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象 *** 作普通文件一样对硬件设备进行 *** 作。设备驱动程序是内核的一部分,它完成以下的功能:
1对设备初始化和释放。
2把数据从内核传送到硬件和从硬件读取数据。
3读取应用程序传送给设备文件的数据和回送应用程序请求的数据。
4检测和处理设备出现的错误。
二、实例剖析我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理。
我只能给一个思路给你,打个比方:你需要在platform平台下注册一个misc设备,那么就要在platform_driver结构中的probe函数中去注册一个misc设备。注意你的Platform_device的name和platform_driver的id_table或者name域相同,这样才会执行Probe函数。其实platform驱动不复杂,只是platform_device中有一些硬件的资源、我们把主要工作都在probe函数中做。
可以参考26内核的s3c2440的spi驱动程序,就是用platform形式注册的。
驱动程序运行在内核空间,而应用程序运行于用户空间。一般情况下应用程序是不能直接访问硬件的,但最终程序的执行结果必然是要到硬件的,这时就需要驱动程序。
打个比方,你要将一段字符写进硬盘,你在应用程序中是以文件的抽象方式进行的,但是在这个层面上你很难理解到底为什么这个函数能够写呢,它是如何找到硬件的呢,又是如何写进去的呢,此时其实我们可爱的驱动程序就发挥了作用,把你的数据写到硬盘由它来做,给你“屏蔽”掉许多复杂的硬件 *** 作,可以让您更专注于应用程序本身的设计。
其实总结一下,驱动程序扮演的是硬件和应用程序之间的桥梁作用,是 *** 作系统的一部分,希望您能满意。
以上就是关于linux驱动程序中怎么做api函数供应用程序调用全部的内容,包括:linux驱动程序中怎么做api函数供应用程序调用、怎样编写Linux设备驱动程序、linux嵌入式开发,platform总线形式的驱动,是怎样从应用层调用驱动的呢 可以调用file_ops吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)