关闭

Linux驱动程序-----字符设备

546人阅读 评论(0) 收藏 举报
分类:

根据书本<Linux设备驱动开发详解>,写了自己的一个Linux驱动,一个简单的字符设备,其实也没什么实际功能,主要是能对字符设备类驱动有一个很清晰的认识,也增加了自己对驱动程序开发的信心吧

1、重要的结构体分析

1.1  cdev结构体

cdev 结构体的 dev_t 成员定义了设备号,为 32 位,其中高 12 位为主设备号,低20 位为次设备号。使用下列宏可以从dev_t中生成主次设备号

        主设备号:MAJOR(dev_t dev);

        次设备号:MINOR(dev_t dev);

 使用下列宏则可以通过主次设备号生成dev_t  

MKDEV(int major,int minor); 

cdev另一个重要成员就是file_operations定义了字符设备驱动程序提供给虚拟文件系统的接口函数,也是字符设备驱动程序的主要组成部分。cdev结构体的操作函数有:

void cdev_init(struct cdev *, struct file_operations *); 

int cdev_add(struct cdev *, dev_t, unsigned);

viod cdev_del(struct cdev *);

cdev_init()函数用于初始化cdev的各个成员,并建立cdev与file_operations 之间的连接,cdev_add()和cdev_del()分别是用于向系统添加和删除一个cdev,完成字符设备的注册和消除。


1.2  file_operations结构体

file_operations是实现系统调用的具体操作


1.3  注册和释放设备号

2、驱动程序结构分析


3、具体程序实现

该例程是一个简单的memory程序,就把一块内存虚拟成一个字符设备,对其进行读写操作。代码简易,对字符驱动程序有个很清楚的概括


Makefile如下




----------------------测试----------------------------

$:sudo su
#:insmod globalmem.ko
#:mknod /dev/globalmem c 250 0
#:echo "Hello World" >/dev/globalmem
#cat /dev/globalmem
屏幕上显示Hello World 驱动测试Ok



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:41017次
    • 积分:746
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:23篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论