Linux kernel 为什么';当文件已经存在时,是否创建返回错误?
我正在为一个接口(Linux 4.9.13)编写一个带有字符设备的PCI驱动程序。以下是困扰我的场景:Linux kernel 为什么';当文件已经存在时,是否创建返回错误?,linux-kernel,filesystems,linux-device-driver,device-driver,chardev,Linux Kernel,Filesystems,Linux Device Driver,Device Driver,Chardev,我正在为一个接口(Linux 4.9.13)编写一个带有字符设备的PCI驱动程序。以下是困扰我的场景: 运行touch/dev/foo0,在/dev目录中创建一个普通文件 加载驱动程序模块。下面是一个伪代码,表示发生了什么(相当标准的字符设备注册): 详情: 索引只是另一个免费索引 我觉得奇怪的是,没有任何东西会引发一个错误,即已经有一个/dev/foo0文件不是字符设备。我确实检查了所有的错误(我想是的),但是为了简洁起见,我省略了相关的代码。如果我不运行touch/dev/foo0,一切
touch/dev/foo0
,在/dev
目录中创建一个普通文件
只是另一个免费索引索引
/dev/foo0
文件不是字符设备。我确实检查了所有的错误(我想是的),但是为了简洁起见,我省略了相关的代码。如果我不运行touch/dev/foo0
,一切正常。否则,我既不能读取也不能写入设备
为什么会这样?
device\u create
不应该返回错误,或者至少应该创建/dev/foo1
/dev
下的文件是由device\u create()
创建的,而不是由cdev\u add
@Tsyvarev Good point创建的。谢谢我会再检查一次我的代码。@Tsyvarev-Nah,我会检查设备创建的错误和是错误的,并且不会失败。嗯……乌代夫不应该关心这种情况吗?@0andriy你可能是对的——这是我最近听到的。不过我没有时间确认。/dev
下的文件是由device\u create()
创建的,而不是由cdev\u add
@Tsyvarev Good point创建的。谢谢我会再检查一次我的代码。@Tsyvarev-Nah,我会检查设备创建的错误和是错误的,并且不会失败。嗯……乌代夫不应该关心这种情况吗?@0andriy你可能是对的——这是我最近听到的。不过我还没来得及证实。
// When the module is initialized:
alloc_chrdev_region(&dev, 0, 256, "foo");
class = class_create(THIS_MODULE, "foo");
// Later, when a suitable PCI device is connected the probe function
// calls the following functions:
cdev_init(dev->md_cdev, &fops);
dev->md_devnum = MKDEV(major, 0 + index);
res = cdev_add(dev->md_cdev, dev->md_devnum, 1);
dev->md_sysfsdev = device_create(class, 0, dev->md_devnum, 0, "foo%d", index);