Linux驱动讲解(一):Linux驱动介绍

时间:2021-09-15 23:34:47

    对于Linux的U-Boot来说,其作用是引导内核;Linux的内核作用则是挂载文件系统和启动相关的应用程序;对于Linux驱动,则是在用户层系统之间构建了一层接口。对于写应用程序的人,肯定不想去关心底层真正的硬件操作,所以他们会使用一些系统API和库函数,比如open,write这些函数。而这些函数,则是系统调用,他会产生一些软中断,使得其可以进入到内核空间, 内核里会有相应的中断处理函数,对于不同的参数,则会调用到不同的驱动函数。然后驱动函数里,才是真正的硬件操作。

    就拿一个例子来说明把:比如点灯的这个操作,开发应用程序的人,肯定是希望传入某些参数,然后就可以根据这个参数去点亮具体的灯了。在Linux系统,尤其是在2.6之后,这个操作是可以通过操纵文件来实现的。我们想点灯的话,一般是打开某个驱动文件,然后往这个文件里面写入某个值。对于打开某个文件,在应用层的人一般都是使用open函数。然而,对于open一个驱动,和open一个普通文件来说,操作肯定是不一样的。那么怎么去识别这个操作呢?在我们使用open函数后,会根据不同的中断来调用sys_open这个函数,sys_open这个函数其实是属于虚拟文件系统这一层的(也叫作sysfs,它属于一种虚拟文件系统)它会根据你的情况来具体的调用相应的驱动。比如你要打开的是一个普通的文本文件,可能它就会找到Flash储存驱动,来调用去相应的函数,如果是打开一个驱动程序,则直接找到该驱动文件,然后调用相应的驱动函数。

    这里,我用一张图来描述这种关系(图不是本人的,侵删):

Linux驱动讲解(一):Linux驱动介绍