我来谈谈我的看法,举个例子比如看门狗驱动,设备节点名为watchdog,我们编写看门狗驱动,里面有open,read,write,ioctl等接口的实现。 fd=“/dev/watchdog” write(fd,0) 这个应用层write怎么最终调用内核中的看门狗驱动中的write的呢? 应用层write先调用c库里的write,然后C库里的write会触发一个int $0x80软件中断,内核中有一个中断向量表,里面每一项都存放唯一的一个中断号,中断服务程序地址。当响应了$0x80这个软件中断后,内核根据应用层传来的fd,把这个fd转化成一种中断号,由这个中断号找到对应的中断服务程序,中断服务程序再进行很复杂的调用才走到看门狗驱动的write中。总结下,就是一般应用程序中的API调用C库,C库再调用内核中的系统调用,根据内核中的中断向量表,来执行相应的驱动。 但是你说的中断服务子程序是驱动程序的说法不错误的,其实内核中到处都是中断,没有中断机制,内核根本无法打断正在执行的事情,中断是中断,驱动是驱动。 根据前面的分析,你也会知道,任何应用层的函数,如read,write,open等都会进行系统调用(也就是触发一个软件中断),系统调用经过一系列复杂转换后最终都会调用驱动程序中对应的操作函数。
21,600
社区成员
21,709
社区内容
加载中
试试用AI创作助手写篇文章吧