关于SPI驱动注册中,设备节点的问题,请高手解答

gomogomono 2015-09-18 09:01:05
static int __init spidev_init(void)
{
int status;

/* Claim our 256 reserved device numbers. Then register a class
* that will key udev/mdev to add/remove /dev nodes. Last, register
* the driver which manages those device numbers.
*/
BUILD_BUG_ON(N_SPI_MINORS > 256);
status = register_chrdev(SPIDEV_MAJOR, "spi", &spidev_fops);
if (status < 0)
return status;

spidev_class = class_create(THIS_MODULE, "spidev");
if (IS_ERR(spidev_class)) {
unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name);
return PTR_ERR(spidev_class);
}

status = spi_register_driver(&spidev_spi);
if (status < 0) {
class_destroy(spidev_class);
unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name);
}
return status;
}


上面是spidev.c中的代码,我想问的是这段代码中,有两个注册函数 register_chrdev和spi_register_driver
,那是不是会创建两个设备节点啊
...全文
540 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eliot_shao 2015-11-25
  • 打赏
  • 举报
回复
register_chrdev和spi_register_driver分别在/dev和/sys下面创建文件节点。
tgcoffee 2015-11-19
  • 打赏
  • 举报
回复
真心不错学习了!
godwww 2015-09-21
  • 打赏
  • 举报
回复
给你参考下我的代码,我的会创建一个节点/dev/gpio47 static int cxdish_gpiocdev_init(struct cxdish_gpio_cdev *gpio_cdev) { int err; struct device *dev; err = alloc_chrdev_region(&gpio_cdev->dev, 0, 1, "cxdish_gpio_cdev"); if(err){ printk("cxdish_gpiocdev_init:unable get a dynamic major\n"); goto fail_add; } cdev_init(&gpio_cdev->cdev, &cxdish_gpio_fops); gpio_cdev->cdev.owner = THIS_MODULE; err = cdev_add(&gpio_cdev->cdev, gpio_cdev->dev, 1); if(err) { printk("gpiocdev_init:unable to register char device\n"); goto fail_add; } gpio_cdev->class = class_create(THIS_MODULE, "cxdish_gpio_cdev"); if(IS_ERR(gpio_cdev->class)){ printk("cxdish_gpiocdev_init class !\n"); err = PTR_ERR(gpio_cdev->class); goto err_class; } dev = device_create(gpio_cdev->class, NULL, gpio_cdev->dev, NULL, "gpio%d", 47); // last param is i2c_num ,choose 0 if(IS_ERR(dev)){ printk("Failed to create device !\n"); err = PTR_ERR(dev); goto err_device; }
gomogomono 2015-09-21
  • 打赏
  • 举报
回复
引用 2 楼 godwww 的回复:
给你参考下我的代码,我的会创建一个节点/dev/gpio47 static int cxdish_gpiocdev_init(struct cxdish_gpio_cdev *gpio_cdev) { int err; struct device *dev; err = alloc_chrdev_region(&gpio_cdev->dev, 0, 1, "cxdish_gpio_cdev"); if(err){ printk("cxdish_gpiocdev_init:unable get a dynamic major\n"); goto fail_add; } cdev_init(&gpio_cdev->cdev, &cxdish_gpio_fops); gpio_cdev->cdev.owner = THIS_MODULE; err = cdev_add(&gpio_cdev->cdev, gpio_cdev->dev, 1); if(err) { printk("gpiocdev_init:unable to register char device\n"); goto fail_add; } gpio_cdev->class = class_create(THIS_MODULE, "cxdish_gpio_cdev"); if(IS_ERR(gpio_cdev->class)){ printk("cxdish_gpiocdev_init class !\n"); err = PTR_ERR(gpio_cdev->class); goto err_class; } dev = device_create(gpio_cdev->class, NULL, gpio_cdev->dev, NULL, "gpio%d", 47); // last param is i2c_num ,choose 0 if(IS_ERR(dev)){ printk("Failed to create device !\n"); err = PTR_ERR(dev); goto err_device; }
就是说最终的设备节点是通过device_create这个函数来决定的,是吗?
gomogomono 2015-09-20
  • 打赏
  • 举报
回复
为什么没人呢

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧