1

似乎 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:在这个链接整个源文件

4

0 回答 0