如何获得专业:minor_driver的辅修

时间:2016-01-21 12:48:12

标签: linux linux-device-driver embedded-linux

我为Linux编写了一个platform_driver。 现在,我希望它是/ dev / myDrv下的char设备。

现在,驱动程序没有出现在/ dev / myDrv中,尽管我已成功加载' insmod'。

我想,我必须使用' mknod / dev / myDrv c MAJOR MINOR '创建一个字符设备。正确的吗?

嗯,问题是我不知道如何找到专业:对我的司机来说很小。

' insmod myDrv'在:

下生成了一些文件
  • / SYS /总线/平台/设备/程序mydrv
  • / SYS /设备/平台/程序mydrv
  • / SYS /模块/程序mydrv

他们以任何方式帮助我。

或者如何找到major :: minor for platform_driver?

1 个答案:

答案 0 :(得分:0)

在开发驱动程序时,您必须先执行两个基本步骤:注册<major,minor>范围,然后将设备文件操作链接到设备驱动程序函数。

以下是基本字符驱动程序的initexit模块的工作代码:

static int __init char_init(void)
{
        int ret;
        struct device *dev_ret;

        printk(KERN_INFO "Char device registered");
        if ((ret = alloc_chrdev_region(&first, 0, 3, "Abhinav")) < 0)
                {
                        return ret;
                }
        if (IS_ERR(cl = class_create(THIS_MODULE, "char_dev")))
        {
                unregister_chrdev_region(first, 1);
                return PTR_ERR(cl);
        }
        if (IS_ERR(dev_ret = device_create(cl, NULL, first, NULL, "mynull")))
        {
                class_destroy(cl);
                unregister_chrdev_region(first, 1);
                return PTR_ERR(dev_ret);
        }

        cdev_init(&c_dev, &file_ops);
        if ((ret = cdev_add(&c_dev, first, 1)) < 0)
        {
                device_destroy(cl, first);
                class_destroy(cl);
                unregister_chrdev_region(first, 1);
                return ret;
        }
        printk(KERN_INFO "<Major,Minor>: <%d, %d>\n", MAJOR(first), MINOR(first));
        return 0;
}

static void __exit char_exit(void)
{
        cdev_del(&c_dev);
        device_destroy(cl, first);
        class_destroy(cl);
        unregister_chrdev_region(first, 3);
        printk(KERN_INFO "Goodbye: Char device unregistered");
}

probedisconnect由您决定。

在此代码中,调用alloc_chrdev_region以注册主要和次要号码。

class_createdevice_create API用于创建设备文件mynull

执行后,将创建/dev/mynull