增加 Linux Kernel 字符设备接口函数.

Signed-off-by: ithink.chan <chenyang@autoai.com>
This commit is contained in:
ithink.chan 2020-04-28 12:00:47 +08:00
parent ea6847b4b5
commit 665f5d4dca
1 changed files with 115 additions and 0 deletions

View File

@ -0,0 +1,115 @@
# Linux Kernel 字符设备接口函数
**头文件:**
```cpp
#include <linux/cdev.h>
```
## MKDEV
**函数原型:**
```cpp
#define MKDEV(major,minor) (((major) << MINORBITS) | (minor))
```
**说明:**
将主设备号和次设备号转换成 dev_t 类型。
**参数:**
major主设备号。
minor次设备号。
**返回值:**
dev_t 类型的设备号。
## register_chrdev_region
**函数原型:**
```cpp
int register_chrdev_region(dev_t from, unsigned count, const char *name);
```
**说明:**
向内核申请注册设备号。
**参数:**
fromdev_t 形式的设备号,可由 MKDEV 创建。
count申请次设备号的个数。
name设备名称。执行 cat /proc/devices 时会显示该名称。
**返回值:**
成功返回 0否则返回错误码。
## alloc_chrdev_region
**函数原型:**
```cpp
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
**函数原型:**
```cpp
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设备操作方法
**返回值:**