저는 "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_probe
더 UVC_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);