《linux设备驱动程序》 第三章 char drivers

本章主要讲了:首先注册设备号,然后注册cdev,最后是对操作函数的书写。

1.对于注册设备号。

对于设备号:分为主设备号,次设备号。占32位,高12位用于主设备号,后20位用于此设备号。主设备号主要指向设备驱动程序,次设备号主要指向具体的设备

设备号的分配:静态分配和动态分配。通常用动态分配。权衡的办法是用脚本对静态分配与动态分配进行选择。

通常注册设备号会在/proc/devices   /dev/ 中会有相应的节点

涉及到的函数及结构:

#include <linux/type.h>

dev_t

int MAJOR(dev_t  dev);

int MINOR(dev_t dev)

dev_t MKDEV(unsigned int major,unsigned int minor)

#include <linux/fs.h>

int register_chrdev_region(dev_t first,unsigned int count ,char *name);

int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name);

void unregister_chrdev_region(dev_t first,unsigned int count);




2.对于注册cdev

有三个数据结构:struct file_operations 、 struct file 、struct inode

其中struct file_operations中主要是指向对文件进行操作的函数指针

       struct file中主要是对文件open后的一些性质,如权限、偏移量、标志位等

       struct inode中有两个比较重要的域用于驱动程序,一个是设备号,一个是struct cdev。后者用于内核的使用

对于后者,通常内核分配一定的内核空间,然后初始化struct cdev,然后注册该结构,一旦注册内核就可以使用对该文件的操作函数了。因而在注册前,需将操作函数准备就绪。

涉及到的函数及结构:

struct file_operations;

struct file;

struct inode;

#include <linux/cdev.h>

struct cdev *cdev_alloc(void);

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

int cdev_add(struct cdev *dev,dev_t num,unsigned int count);

void cdev_del(struct cdev*dev)


3.操作函数




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值