字符设备驱动

1.分配设备号

静态分配:

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

动态分配

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

注销设备号

void unregister_chrdev_region(dev_t from, unsigned count);

2.注册字符设备

1.分配cdev: struct cdev *cdev_alloc(void);
2.初始化cdev: void cdev_init(struct cdev *cdev, const struct file_operations *fops);
3.添加cdev: int cdev_add(struct cdev *p, dev_t dev, unsigned count)
3.设备注销:void cdev_del(struct cdev *p);

安装

1.cat /proc/devices 查看申请到的设备号
2.mknode /dev/xxx c xxx 0创建设备节点

cls = class_create(THIS_MODULE, “hello”);
class_device_create(cls, NULL, MKDEV(major, 0), NULL, “hello0”); /* /dev/hello0 */
class_device_destroy(cls, MKDEV(major, 0));
class_destroy(cls);

重要的数据结构

1.struct file:表示打开的文件描述符,系统中每个打开的文件都有一个相关联的file结构体在内核中。它们在open时创建,并传递给文件操作函数。当文件的所有实例都关闭后,内核会释放这个结构体。
2.struct inode:记录文件的物理信息。一个文件可以对应多个file结构,但是只有一个inode结构。indoe一般作为file_opreation结构中的参数传递过来。
inode可以理解为检索节点。每个存储设备或存储分区被格式化后,都有两部分:inode+block;block是存储部分,inode是用来存储文件大小,归属,组,权限等信息。indoe为每个文件进行信息检索,产生inode数值。操作系统根据指令,通过inode值来找到文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值