ARM プラットフォームで GPIO ピンのドライバーを作成しています。私のドライバーは正しく動作し、デバイス ファイルを手動で mknod することで、今まで問題を回避してきました。
私の初期化コード:
static int __init gpio_init (void)
{
void *ptr_error;
if (register_chrdev(249, "gpio_device", &fops) < 0){
printk(KERN_INFO "Registering device failed\n");
return -EINVAL;
}
if ((device_class = class_create(THIS_MODULE, "gpio_device"))
== NULL){
unregister_chrdev_region(DEV_T, 1);
printk(KERN_INFO "Class creation failed\n");
return -EINVAL;
}
ptr_error = device_create(device_class, NULL, DEV_T, NULL, "gpio_device");
if (IS_ERR(ptr_error)){
class_destroy(device_class);
unregister_chrdev_region(DEV_T, 1);
printk(KERN_INFO "Device creation failed\n");
return -EINVAL;
}
cdev_init(&c_dev, &fops);
if (cdev_add(&c_dev, DEV_T, 1)){
device_destroy(device_class, DEV_T);
class_destroy(device_class);
unregister_chrdev_region(DEV_T, 1);
printk(KERN_INFO "Cdev add failed\n");
return -EINVAL;
}
printk(KERN_INFO "Guten tag, GPIO driver initialized\n");
return SUCCESS;
}
ファイル「gpio_device」が /dev に作成されないことを除いて、これはエラーなしで実行されます。
ARM 用にカーネル 2.6.39.4 にクロス コンパイルしています。(arm-linux-gcc を使用)
私が理解しているように、device_createは/dev ファイルを作成する必要があります。