我为Linux编写了一个platform_driver。 现在,我希望它是/ dev / myDrv下的char设备。
现在,驱动程序没有出现在/ dev / myDrv中,尽管我已成功加载' insmod'。
我想,我必须使用' mknod / dev / myDrv c MAJOR MINOR '创建一个字符设备。正确的吗?
嗯,问题是我不知道如何找到专业:对我的司机来说很小。
' insmod myDrv'在:
下生成了一些文件他们以任何方式帮助我。
或者如何找到major :: minor for platform_driver?
答案 0 :(得分:0)
在开发驱动程序时,您必须先执行两个基本步骤:注册<major,minor>
范围,然后将设备文件操作链接到设备驱动程序函数。
以下是基本字符驱动程序的init
和exit
模块的工作代码:
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");
}
probe
和disconnect
由您决定。
在此代码中,调用alloc_chrdev_region
以注册主要和次要号码。
class_create
和device_create
API用于创建设备文件mynull
。
执行后,将创建/dev/mynull
。