1.9 KiB
1.9 KiB
Linux Kernel 字符设备接口函数
头文件:
#include <linux/cdev.h>
MKDEV
函数原型:
#define MKDEV(major,minor) (((major) << MINORBITS) | (minor))
说明:
将主设备号和次设备号转换成 dev_t 类型。
参数:
major:主设备号;
minor:次设备号。
返回值:
dev_t 类型的设备号。
register_chrdev_region
函数原型:
int register_chrdev_region(dev_t from, unsigned count, const char *name);
说明:
向内核申请注册设备号。
参数:
from:dev_t 形式的设备号,可由 MKDEV 创建;
count:申请次设备号的个数;
name:设备名称。执行 cat /proc/devices 时会显示该名称。
返回值:
成功返回 0,否则返回错误码。
alloc_chrdev_region
函数原型:
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)
{
struct char_device_struct *cd;
cd = __register_chrdev_region(0, baseminor, count, name);
if (IS_ERR(cd))
return PTR_ERR(cd);
*dev = MKDEV(cd->major, cd->baseminor);
return 0;
}
说明:
动态分配主设备号。
参数:
dev:返回函数向内核申请下来的设备号;
baseminor:起始次设备号;
count:申请次设备号的个数;
name:设备名称。执行 cat /proc/devices 时会显示该名称。
返回值:
成功返回 0,否则返回错误码。
cdev_init
函数原型:
void cdev_init(struct cdev *cdev, const struct file_operations *fops)
{
memset(cdev, 0, sizeof *cdev);
INIT_LIST_HEAD(&cdev->list);
kobject_init(&cdev->kobj, &ktype_cdev_default);
cdev->ops = fops;
}
说明:
关联 cdev 和 file_operations
参数:
cdev:字符设备对象;
fops:设备操作方法。
返回值:
无