Linux自动生成设备名的方法

(一)

从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有 很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设 备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_create创建对应的设备。大致用法如下:
struct class *myclass = class_create(THIS_MODULE, “my_device_driver”);
class_device_create(myclass, NULL, MKDEV(major_num, 0), NULL, “my_device”);
这样的module被加载时,udev daemon就会自动在/dev下创建my_device设备文件

class_create()
-------------------------------------------------
linux-2.6.22/include/linux/device.h
struct class *class_create(struct module *owner, const char *name)
    class_create - create a struct class structure
    @owner: pointer to the module that is to "own" this struct class
    @name: pointer to a string for the name of this class.
在/sys/class/下创建类目录

class_device_create()
-------------------------------------------------
linux-2.6.22/include/linux/device.h
struct class_device * class_device_create (struct class        *cls,
                                         struct class_device *parent,
                                         dev_t               devt,
                                         struct device       *device,
                                         const char          *fmt, ...)

    class_device_create - creates a class device and registers it with sysfs
    @cls: pointer to the struct class that this device should be registered to.
    @parent: pointer to the parent struct class_device of this new device, if any.
    @devt: the dev_t for the char device to be added.
    @device: a pointer to a struct device that is assiociated with this class device.
    @fmt: string for the class device's name



转载自http://www.lampchina.net/article/htmls/200902/MjY2NjYz.html


(二)

我编译《linux高级程序设计》第9章中的“plp_kmen.c”示例模块时,提示有如下错误,书中是基于2.6.15,我内核树版本为2.6.27,
...
在函数 ‘plp_kmem_init’ 中:
/home/lwxiao/mymodule/9_plp_kmem/plp_kmem.c:193: 错误:隐式声明函数 ‘class_device_create’
/home/lwxiao/mymodule/9_plp_kmem/plp_kmem.c:
在函数 ‘plp_kmem_exit’ 中:
/home/lwxiao/mymodule/9_plp_kmem/plp_kmem.c:212: 错误:隐式声明函数 ‘class_device_destroy’
...

我查过 device.h 头文件,从2.6.15到2.6.27,这两个函数已经改过了,

class_device_create 这个函数在2.6.27的device.h头中已经没有了,不知道替换函数是哪个
class_device_destroy 这个函数还在,但参数已经变了

由于本人水平太菜,实在不知道如何修改示例,让其能成功编译,

哪位能提示下,不甚感激问题早上已解决,原来2.6.15中的函数:
class_device_create();
class_device_destroy();

在2.6.27中变为:

device_create()
device_destroy()

你可能感兴趣的:(linux,struct,Module,Class,linux内核,structure)