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=y. make -j3 all다음을 반환합니다. 여기에 이미지 설명을 입력하세요.

커널 버전: 6.2.7

내가 뭘 잘못했나요? 나는 인터넷 조사와 다른 출처의 컨설팅을 통해 이를 알아내려고 노력했지만 불행히도 내 노력은 성공하지 못했습니다. 나는 또한 사용해 보았지만 uvc_probeUVC_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);

관련 정보