Linux kernel 如何注册批量设备

Linux kernel 如何注册批量设备,linux-kernel,usb,linux-device-driver,Linux Kernel,Usb,Linux Device Driver,我对Linux内核编程非常陌生。我通过阅读创建了一个简单的USB驱动程序;如果你愿意的话,你可以看看 据我所知,这段代码可以从USB设备读取数据和写入数据。 但当我连接pendrive时,我看到了dmesg跟踪,我发现一切正常,但无法在lsblk的输出中找到我的设备 由于它不在那里,我无法安装它,因此无法测试我的驱动程序。 这是dmesg跟踪 刚刚在sim-prob中的usb\u寄存器\u dev后添加了一行 printkKERN_INFO[SIMUSB]retval=%d,retval 我得到

我对Linux内核编程非常陌生。我通过阅读创建了一个简单的USB驱动程序;如果你愿意的话,你可以看看

据我所知,这段代码可以从USB设备读取数据和写入数据。 但当我连接pendrive时,我看到了dmesg跟踪,我发现一切正常,但无法在lsblk的输出中找到我的设备

由于它不在那里,我无法安装它,因此无法测试我的驱动程序。 这是dmesg跟踪

刚刚在sim-prob中的usb\u寄存器\u dev后添加了一行

printkKERN_INFO[SIMUSB]retval=%d,retval

我得到命令demsg | grep SIMUSB的以下输出


您只在USB层注册设备。这不允许您挂载文件系统或设备,除非您还将设备注册到SCSI层。运行lsusb查看您的设备。lsblk不会显示它,因为它未注册到块层

阅读本文档了解SCSI层API

另外,在内核源代码树中遍历drivers/usb/storage/usb.c。这是一个通用的usb存储驱动程序,适用于大多数usb驱动器。检查存储探头功能。您可以看到,它调用usb存储probe1和usb存储Probe2函数。这些函数被导出,因此您可以在探测函数中使用它们,前提是您在链接到的内核映像中内置了usb存储模块,并且具有声明它们的头文件

有关如何使用上述两个函数的示例,请参阅drivers/usb/storage/alauda.c alauda_probe function。你可以在类似的线路上做一些事情。此文件与usb存储驱动程序位于内核源中的同一目录中。如果要使用这些函数,您可能也必须执行相同的操作


注意:如果您已加载usb存储模块,则它将声明您的设备和驱动程序探测功能不会被调用。您可以模拟驱动程序中的功能,或者找到让驱动程序声明您的设备的方法。

无法访问您的代码。请在此处发布有效链接或代码。函数sim_prob中usb_register_dev的返回值是多少?你能在这里打印并更新吗?请检查代码中的返回值。您正在运行哪个版本的内核?”uname-r?哪个发行版?请参阅更新的帖子。。我提到了retval的价值。。。我在3.11RC2中使用kubuntu内核版本
[20073.437683] [SIMUSB]:Module Loaded
[20073.437730] [SIMUSB] USB Detected
[20073.437734] [SIMUSB] USB Vendor ID=1008 and Product ID=22023
[20073.437737] [SIMUSB] endpoint->bEndpointAddress=1
[20073.437740] [SIMUSB] Result of endpoint->bEndpointAddress & USB_DIR_OUT is 0
[20073.437743] [SIMUSB] ENDPOINT WITH OUT DIRECTION FOUND
[20073.437746] [SIMUSB] Result of endpoint->bmAddress & USB_ENDPOINT_XFERTYPE_MASK is 2
[20073.437749] [SIMUSB] OUT ENDPOINT adress set
[20073.437752] [SIMUSB] endpoint->bEndpointAddress=130
[20073.437755] [SIMUSB] Result of endpoint->bEndpointAddress & USB_DIR_IN is 128
[20073.437757] [SIMUSB] ENDPOINT WITH IN DIRECTION FOUND
[20073.437760] [SIMUSB] Result of endpoint->bmAddress & USB_ENDPOINT_XFERTYPE_MASK is 2
[20073.437763] [SIMUSB] IN ENDPOINT adress set
[20073.437910] [SIMUSB] status=0
[20073.437914] [SIMUSB] USB Registered Successfully
root@anandlinux:/lin_dev/kprogs/usb_rough# dmesg|grep SIMUSB
[7803.843992] [SIMUSB]:Module Loaded
[7803.844055] [SIMUSB] USB Detected
[7803.844060] [SIMUSB] USB Vendor ID=2385 and Product ID=5699
[7803.844064] [SIMUSB] endpoint->bEndpointAddress=129
[7803.844069] [SIMUSB] Result of endpoint->bEndpointAddress & USB_DIR_IN is 128
[7803.844073] [SIMUSB] ENDPOINT WITH IN DIRECTION FOUND
[7803.844077] [SIMUSB] Result of endpoint->bmAddress & USB_ENDPOINT_XFERTYPE_MASK is 2
[7803.844080] [SIMUSB] IN ENDPOINT adress set
[7803.844085] [SIMUSB] endpoint->bEndpointAddress=2
[7803.844089] [SIMUSB] OUT ENDPOINT adress set
[7803.844156] [SIMUSB] retval=0
[7803.844186] [SIMUSB] status=0
[7803.844188] [SIMUSB] USB Registered Successfully
root@anandlinux:/lin_dev/kprogs/usb_rough#