创建的是一个真正可被系统识别的字符设备

在 002 的基础上增加了:

新增内容作用
struct cdev cdev_test内核中代表一个字符设备
struct file_operations fops定义设备的操作接口(open/read/write 等)
cdev_init()把 cdev 和 file_operations 绑定
cdev_add()向内核注册,设备变为"活"状态
cdev_del()卸载时移除 cdev

代码:003_register_cdev.c

#include <linux/module.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/kdev_t.h>

dev_t dev_no; // 设备号
struct cdev cdev_test; // 字符设备结构体

struct file_operations fops = {
    .owner = THIS_MODULE
};

//设备名称
static char* name = "003_register_cdev";

MODULE_LICENSE("GPL");
MODULE_AUTHOR("wyl");
MODULE_DESCRIPTION("003_register_cdev");
static int modulecdev_init(void)
{ 
    int ret;
    ret = alloc_chrdev_region(&dev_no, 0, 1, name);
    if (ret<0) {
        printk("alloc_chrdev_region failed\n");
        return ret;
    }
    printk("major:%d, minor:%d\n", MAJOR(dev_no), MINOR(dev_no));
    cdev_init(&cdev_test, &fops);
    cdev_add(&cdev_test, dev_no, 1);
    return 0;
}
static void modulecdev_exit(void)
{
    cdev_del(&cdev_test);
    unregister_chrdev_region(dev_no, 1);
    printk("modulecdev exit\n");
}

module_init(modulecdev_init);
module_exit(modulecdev_exit);