嵌入式知识框架之五 - 编写驱动程序的框架

本文介绍了Linux内核驱动程序的基本概念,包括驱动的作用、如何加载到内核、编写驱动的框架。重点讨论了驱动程序的加载机制,如module_init和module_exit,以及如何注册和初始化设备。文章还以按键驱动为例,详细解释了驱动的注册、设备号分配、中断处理等关键步骤,最后探讨了如何将驱动融入现有的输入子系统框架。
摘要由CSDN通过智能技术生成

1.什么是驱动程序?

驱动程序是对硬件的具体操作,比如让LED的亮灭,在LCD上显示一个像素等,设计到对GPIO或者硬件的设置。

2.驱动程序如何加载进内核?

linux设备驱动是以内核模块的形式出现,Linux系统整体架构庞大,组价非常多,但是需要什么功能就重新编译内核,费时费力。linux提供一种模块机制,1.模块本身可以不被编译进入内核,控制内核映像的大小;2.一旦模块加载,就和编译进内核是一样的。

linux提供了模块程序结构

module_init(使用insmod调用)

module_exit(使用rmmod调用)

模块许可证声明(GPL)

模块参数(可选)

模块导出符号(可选)

模块作者等信息声明(可选)

 3.驱动如何编写

框架+成员函数 

4. 框架是什么?

首先,驱动最终通过与文件操作相关的系统调用或C库函数(本质也基于系统调用)被访问,而设备驱动的结构最终也是为了迎合提供给应用程序员的API。
其次,驱动工程师在设备驱动中不可避免地会与设备文件系统打交道,包括从Linux 2.4内核的devfs文件系统到Linux 2.6以后的udev。

 Linux中文件操作的系统调用,包括创建、打开、读写和关闭文闭等操作

int creat(const char *filename, mode_t mode);
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int read(int fd, const void *buf, size_t length);
int write(int fd, const void *buf, size_t length);
int lseek(int fd, offset_t offset, int whence);
int clo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值