(一)
从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()