驱动程序结构学习

本文通过C语言描述了如何将单例模式应用于内核驱动的设计之中,并以文件系统的驱动为例,详细介绍了抽象驱动的接口定义及其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以把内核看做一个进程,其它进程对内核的系统调用就可以看做进程通信。各个驱动程序从属于内核,可以把驱动程序看做一个对象,因为同一类驱动程序只能有一个,可以用单例模式来实现。抽象驱动定义一个接口,具体硬件的驱动实现这个接口。以文件系统为例,考虑到驱动都是用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();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值