首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kernel API中的__class_create()和class_create()有什么区别?

在Linux内核中,Kernel API提供了一组函数和接口,用于与内核进行交互和实现各种功能。在其中,__class_create()和class_create()是用于创建设备驱动中的类的函数。

  1. __class_create():它是一个内部函数,用于创建设备驱动类的数据结构,并将其注册到内核中。这个函数是不稳定的,可能在将来的内核版本中发生变化。它的用法和参数可能会有所不同。
  2. class_create():它是对__class_create()函数的封装,提供了一种更方便和稳定的方式来创建设备驱动类的数据结构,并注册到内核中。它会返回一个指向创建的类的指针,如果创建失败则返回一个错误码。它的使用方法简单明了。

这两个函数的区别可以总结如下:

  • 稳定性:__class_create()是一个内部函数,不够稳定,可能会在未来的内核版本中发生变化。而class_create()是对其封装后的稳定版本,更建议使用。
  • 使用方法:__class_create()的用法和参数可能会有所不同,因为它是不稳定的。而class_create()提供了一种更方便和稳定的方式来创建设备驱动类。

推荐的腾讯云相关产品和产品介绍链接地址: 暂不提供腾讯云相关产品和产品介绍链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 09.字符设备驱动

    1.写出最底层Led_Open(),Led_Write(),Led_Read()   2.如何让内核知道下面有我们写好的操作硬件的函数呢?定义一个file_operations结构体(指向Led_Open等底层函数)。使用函数regsiter_chrdev(major,”first_drv”,&first_drv_fops)注册告诉内核(通过major索引)。   3.regsiter_chrdev被谁调用?被驱动入口函数调用。first_drv_init()   4.如何知道调用first_drv_init(),还是其他的函数呢?利用宏module_init(first_drv_init)定义一个结构体,结构体中有函数指针,指向入口函数。   5.出口函数first_drv_exit。卸载驱动unregsiter_chrdev(major,”first_drv”,&first_drv_fops)。如何知道何时来调用first_drv_exit?module_init(first_drv_exit)定义一个结构体,结构体中有函数指针,指向入口函数。

    02

    深入理解mmap 0拷贝技术

    我们知道,linux系统中用户空间和内核空间是隔离的,用户空间程序不能随意的访问内核空间数据,只能通过中断或者异常的方式进入内核态,一般情况下,我们使用copy_to_user和copy_from_user等内核api来实现用户空间和内核空间的数据拷贝,但是像显存这样的设备如果也采用这样的方式就显的效率非常底下,因为用户经常需要在屏幕上进行绘制,要消除这种复制的操作就需要应用程序直接能够访问显存,但是显存被映射到内核空间,应用程序是没有访问权限的,如果显存也能同时映射到用户空间那就不需要拷贝操作了,于是字符设备中提供了mmap接口,可以将内核空间映射的那块物理内存再次映射到用户空间,这样用户空间就可以直接访问不需要任何拷贝操作,这就是我们今天要说的0拷贝技术。

    01
    领券