私は「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);