Linux设备ID的生成与使用
alloc_chrdev_region
#include <linux/fs.h>
/*
* @Description: 自动申请字符型设备号
* @Para : dev_t *dev [out] 输出参数,保存申请的设备号
* unsigned baseminor 次设备号的起始编号
* unsigned count 申请的次设备号个数
* const char *name 设备名称
* @return : 成功返回0,失败返回错误码
**/
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
register_chrdev_region
#include <linux/fs.h>
/*
* @Description: 注册字符型设备号
* @Para : dev_t from 要注册的起始设备号
* unsigned count 注册的设备个数
* const char *name 设备名称
* @return : 成功返回0,失败返回错误码
**/
int register_chrdev_region(dev_t from, unsigned count, const char *name)
- 申请或者注册完成的设备号都可以通过 cat /proc/devices 查看设备号和设备名称
unregister_chrdev_region
#include <linux/fs.h>
/*
* @Description: 取消注册字符型设备
* @Para : dev_t from 要取消注册的起始设备号
* unsigned count 取消注册的设备个数
**/
void unregister_chrdev_region(dev_t from, unsigned count)
- 无论是申请的设备号还是注册的设备号,都可以通过unregister_chrdev_region取消注册
设备号拼接宏
#include <linux/kdev_t.h>
/*
* @Description: 将主设备号和次设备号拼接为dev_t类型设备号
* @Para : major 主设备号
* minor 次设备号
* @return : dev_t类型设备号
**/
dev_t dev = MKDEV(major, minor);
/*
* @Description: 将dev_t类型设备号拆分为主设备号
* @Para : devid dev_t类型设备号
* @return : major 主设备号
**/
int major = MAJOR(devid);
/*
* @Description: 将dev_t类型设备号拆分为主设备号
* @Para : devid dev_t类型设备号
* @return : minor 次设备号
**/
int minor = MINOR(devid)