我的戴尔笔记本电脑上有一个内置网络摄像头。我没有看到它列出来lspci
,但它有效。
我使用的是自编译内核,以下是我启用的选项:
# zcat /proc/config.gz | grep -v '^#' | egrep '(MEDIA|VIDEO)'
CONFIG_ACPI_VIDEO=y
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_SUPPORT_FILTER=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_V4L2_I2C=y
CONFIG_MEDIA_USB_SUPPORT=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_VIDEOBUF2_CORE=y
CONFIG_VIDEOBUF2_V4L2=y
CONFIG_VIDEOBUF2_MEMOPS=y
CONFIG_VIDEOBUF2_VMALLOC=y
CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
我的内核中的所有选项都是静态编译的,并且我没有使用可加载模块。
如何通过向内核启动选项传递/附加某些内容来在启动时禁用网络摄像头?
我想在启动时决定是否要在支持网络摄像头的情况下启动内核,或者不支持网络摄像头。
答案1
如果CONFIG_KALLSYMS
启用,可以通过以下方式禁用内置驱动程序禁用它们的init
功能。对于uvcvideo
(可能是您的网络摄像头使用的驱动程序),添加
initcall_blacklist=uvc_video_init
到你的内核的命令行。
如果不是,您将无法禁用仅有的您的网络摄像头使用内核命令行参数,但您可以在运行时控制您的网络摄像头;在 中找到它的条目/sys/bus/usb/devices
,并将 0 写入相应的authorized
文件中,例如
echo 0 | sudo tee /sys/bus/usb/devices/1-8/authorized
写入 1 再次启用相机。
您可以使用USB卫士提供对所有 USB 设备(包括网络摄像头)的控制。
答案2
并不意味着作为问题的答案。仅解释原因”你就是不能!“是标题中所述问题的唯一可能答案:
确实可以传递此类启动参数:
module_name.parameter_name=parameter_value
如果驱动程序接受parameter_name并且parameter_value在接受值的范围内,则某些内核内置的module_name驱动程序将遵守这一点。
例如,USB 存储驱动程序能够使用以下类型的引导命令行参数忽略一个特定的 USB 存储设备:
usb-storage.quirks=03f0:b002:iu
因为 USB 存储经过编程是为了遵守怪异参数并将其值解码为表示 Vendor-Id:Product-Id,而 i 表示 IGNORE_DEVICE。
如果 uvcvideo 驱动程序确实支持怪癖不幸的是,该参数没有为该参数提供特定值,旨在忽略任何设备。