驱动程序结构学习

来源:互联网 发布:张子萱的淘宝店 编辑:程序博客网 时间:2024/05/23 00:05

可以把内核看做一个进程,其它进程对内核的系统调用就可以看做进程通信。各个驱动程序从属于内核,可以把驱动程序看做一个对象,因为同一类驱动程序只能有一个,可以用单例模式来实现。抽象驱动定义一个接口,具体硬件的驱动实现这个接口。以文件系统为例,考虑到驱动都是用C语言实现的,以下用C语言描述。
1,抽象驱动中定义文件结构体(简单起见,函数的返回类型和参数都是void):保护两个函数变量(是不是很像C++中的虚函数,只不过C++对象中存放的是虚表指针,而C中相当于直接存放了虚表)
struct file{
 void(*open)();
 void(*close)();
};
2,抽象驱动中定义并实现函数来查询获取指定的驱动对象:
void* get_module(int module_name);
3,抽象驱动中定义并实现函数注册驱动对象:
void register_module(int module_name, void* module);
4,实现驱动中定义结构对象,初始化并注册。在C++中,对虚表的赋值和对象虚指针的赋值是由编译器实现的,C语言编译器态简单。
void my_open(){}
void my_close(){}
struct file my_file{
 .open=my_open;
 .close=my_close;
};
register_module(123, &my_file);
5,外部调用驱动,只需要根据指定驱动名称调用:
struct file* this_file=get_module(123);
this_file->open();
this_file->close();

大致的结构就是这样,具体的驱动实现要考虑很多细节,比如同步问题。

原创粉丝点击