嵌入式Linux驱动开发基础学习笔记(2、LED驱动程序框架)

嵌入式Linux驱动开发基础学习笔记(2、LED驱动程序框架),第1张

在之前的LED程序中,我们实现的是某个单板的LED驱动程序,那我们需要支持多个板子该如何写驱动呢?答案就是分层

驱动程序要分为上下两层:leddrv.c和board_demo.c

1.与之前相同的是leddrv.c负责注册file.operations结构体,它的open/write成员会调用下层的board_demo.c

2.board_demo.c 中提供的是硬件led_opr中对应的函数(看第三点)。

3.board_demo.c中我们需要用到一个led_operation这个结构体。这是很关键的,我们需要以面向对象的思想,改进代码:

在led_opr.h中抽象出一个结构体:

#ifndef _LED_OPR_H
#define _LED_OPR_H

struct led_operations {
	int (*init) (int which); /* 初始化LED, which-哪个LED */       
	int (*ctl) (int which, char status); /* 控制LED, which-哪个LED, status:1-亮,0-灭 */
};

struct led_operations *get_board_led_opr(void);


#endif

每个单板相关的board_X.c实现自己的led_operations结构体,供上层的leddrv.c调用。

总的来说就是分为几个步骤:1. 在led_opr.h中定义一个结构体,把led *** 作抽象为这个结构体。2. 在单板入口函数中从下层驱动获取一个led_operations结构体,然后就可以在上层驱动中open R W去调用下层驱动中写入的不同硬件。3. 下层驱动要对结构体进行补充,类似file_operation。然后定义结构体里说明的函数,类似open read write。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/872420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存