无法编译uvcvideo驱动

无法编译uvcvideo驱动

我一直在关注名为“LFD103”的课程《Linux 内核开发初学者指南》。在本节中“编写你的第一个内核补丁”,我们对“uvcvideo”驱动程序进行更改并重新编译它。但我就是无法让它发挥作用。我按照教程提到的那样添加了 pr_info() 函数。

static int uvc_probe(struct usb_interface *intf,
                 const struct usb_device_id *id)
{
    struct usb_device *udev = interface_to_usbdev(intf);
    struct uvc_device *dev;
    const struct uvc_device_info *info =
            (const struct uvc_device_info *)id->driver_info;
    int function;
    int ret;

    pr_info("I changed uvcvideo driver in the Linux Kernel\n");

    if (id->idVendor && id->idProduct)
            uvc_trace(UVC_TRACE_PROBE, "Probing known UVC device %s "
                            "(%04x:%04x)\n", udev->devpath, id->idVendor,
                            id->idProduct);
    else
            uvc_trace(UVC_TRACE_PROBE, "Probing generic UVC device %s\n",
                            udev->devpath);​

之后我们进行配置CONFIG_USB_VIDEO_CLASS=ymake -j3 all返回这个: 在此输入图像描述

内核版本:6.2.7

我究竟做错了什么?我试图通过互联网研究和咨询其他来源来解决这个问题,但不幸的是,我的努力没有成功。我也尝试过使用uvc_probeandUVC_DBG_PROBE但它导致了更多错误。如果有人能帮助我,那就太好了。

答案1

如果您正在使用当前的主线内核,那么 LFD103 课程有点过时,或者更确切地说,没有那么清晰。你必须仅有的添加该pr_info行,忽略该行周围的行;因此,对于今天的内核,结果最终是

static int uvc_probe(struct usb_interface *intf,
             const struct usb_device_id *id)
{
    struct usb_device *udev = interface_to_usbdev(intf);
    struct uvc_device *dev;
    const struct uvc_device_info *info =
        (const struct uvc_device_info *)id->driver_info;
    int function;
    int ret;

    pr_info("I changed uvcvideo driver in the Linux Kernel\n");

    /* Allocate memory for the device and initialize it. */
    dev = kzalloc(sizeof(*dev), GFP_KERNEL);
    if (dev == NULL)
        return -ENOMEM;

这些uvc_trace行已被修改并且位于函数的更下方;他们现在使用uvc_dbg

    if (id->idVendor && id->idProduct)
        uvc_dbg(dev, PROBE, "Probing known UVC device %s (%04x:%04x)\n",
            udev->devpath, id->idVendor, id->idProduct);
    else
        uvc_dbg(dev, PROBE, "Probing generic UVC device %s\n",
            udev->devpath);

相关内容