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 に入ります'
どうすればこれを修正できますか?