register_chrdev函数使用

复制代码
    static struct class *led_class;
    static int major = 0;    /*记得static 不然可能会出现外部.c调用这个变量的可能*/

    static struct file_operations led_drv = {
	.owner	 = THIS_MODULE,
	.open    = led_drv_open,
	.read    = led_drv_read,
	.write   = led_drv_write,
	.release = led_drv_close,
}; 



    major = register_chrdev(0, "sym", &led_drv);  /*sym是设备名称,任取,led_drv是        
                                                    file_operations的名字*/
    /*可以实现静态和动态注册两种方法,主要是通过判断给定的主设备号是否为0来进行区别,为0的时候为 
      动态注册,否则静态注册*/
    if(major < 0){
		printk("register_chrdev famy\n");
		return major;
	}
    led_class = class_create(THIS_MODULE, "sym_class");/*sym_class是类的名字,任取*/
    if(IS_ERR(led_class)){
	printk("class_create failed\n");
    unregister_chrdev(major, "sym");
	return 1;
	}

一文搞懂内核中cdev的各种注册函数 - 知乎 (zhihu.com)

注册函数不仅仅有register_chrdev 还有其他,见上文

相关推荐
原来是猿11 分钟前
关于【进程池阻塞 + 子进程未回收问题】
linux·服务器·c++
wzhidev24 分钟前
05、Python流程控制与函数定义:从调试现场到工程实践
linux·网络·python
艾莉丝努力练剑27 分钟前
【Linux:文件】文件基础IO进阶
linux·运维·服务器·c语言·网络·c++·centos
艾莉丝努力练剑34 分钟前
【MYSQL】MYSQL学习的一大重点:表的约束
linux·运维·服务器·开发语言·数据库·学习·mysql
程序猿编码38 分钟前
基于ncurses的TCP连接可视化与重置工具:原理与实现(C/C++代码实现)
linux·c语言·网络·c++·tcp/ip
顶点多余1 小时前
从源码深度探究“线程控制“
java·linux·开发语言
gududexiao1 小时前
linux 设置tomcat开机启动
linux·运维·tomcat
开开心心就好1 小时前
进程启动瞬间暂停工具,适合调试多开
linux·运维·安全·pdf·智能音箱·智能手表·1024程序员节
win x2 小时前
一篇搞懂Git基础操作
linux·git
吴声子夜歌2 小时前
TypeScript——内置工具类型、类型查询、类型断言和类型细化
linux·ubuntu·typescript