似乎 kobject_init 已更改(我是新手),实际上我在互联网上找到的示例设备驱动程序无法正常工作。
我绝对需要一个关于 /procs/sysfs 的样本,由于这些原因,我没有使用更简单的样本。
这是我使用的代码:
int int_init(void)
{
int i, ret;
kint = kmalloc(sizeof(*kint), GFP_KERNEL);
if (!kint) return -ENOMEM;
memset(kint, 0, sizeof(*kint));
kobject_init(&kint->kobj);
kint->numbers[0] = 0;
kint->numbers[1] = 1;
kint->numbers[2] = 5;
kint->kobj.ktype = &ktype_int;
ret = kobject_set_name(&kint->kobj, "sample-int-range");
if (!ret) ret = kobject_add(&kint->kobj);
if (!ret) {
for (i=0; i<3; i++)
sysfs_create_file(&kint->kobj,kint_default_attrs[i]);
}
if (ret)
kfree(kint);
return ret;
}
void int_exit(void)
{
int i;
for (i=0; i<3; i++)
sysfs_remove_file(&kint->kobj,
kint_default_attrs[i]);
kobject_del(&kint->kobj);
kobject_put(&kint->kobj);
/* wait untile the kobj is freed */
while (kint) {
schedule_timeout(HZ/2);
}
return;
}
module_init(int_init);
module_exit(int_exit);
这是我发现的错误(行不匹配):
make: 进入目录
/usr/src/linux-source-2.6.32' CC [M] /home/pietro/driver/sysfs.o /home/pietro/driver/sysfs.c: In function ‘int_init’: /home/pietro/driver/sysfs.c:125: error: too few arguments to function ‘kobject_init’ /home/pietro/driver/sysfs.c:132: error: too few arguments to function ‘kobject_add’ /home/pietro/driver/sysfs.c:135: warning: ignoring return value of ‘sysfs_create_file’, declared with attribute warn_unused_result /home/pietro/driver/sysfs.c: In function ‘int_exit’: /home/pietro/driver/sysfs.c:155: error: implicit declaration of function ‘schedule_timeout’ make[1]: *** [/home/pietro/driver/sysfs.o] Error 1 make: *** [_module_/home/pietro/driver] Error 2 make: Leaving directory
/usr/src/linux-source-2.6.32'
我怎样才能解决这个问题?
PS:在这个链接整个源文件