AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1264580
Accepted
Sterling Butters
Sterling Butters
Asked: 2020-08-05 10:31:57 +0800 CST2020-08-05 10:31:57 +0800 CST 2020-08-05 10:31:57 +0800 CST

自动加载驱动程序:Cron、Init 或 Modprobe

  • 772

主要问题

我正在尝试为我的系统自动加载驱动程序。驱动程序是手动构建的,必须手动加载。另一个需要注意的是,必须先加载和卸载其中一个系统驱动程序,然后才能手动插入构建的驱动程序。在 CLI 中,它看起来像这样:

modprobe gspca_main && rmmod gspca_main && modprobe videodev && insmod gspca_main.ko && insmod gspca_kinect2.ko

选项

我想在启动时自动执行此操作,这样我就不必每次都运行上述内容。正如我目前所看到的,我有几个选择:

  1. 克朗

看起来我可以在这里使用@reboot 字符串来运行脚本

  1. 在里面

或者,我考虑过创建一个init脚本,但我不一定需要对runlevel's 或执行时间的所有控制。在这里,我没有看到任何Exec“另一件事”所必需的 multiples 实例。

  1. 模组探针

在下面添加一个conf文件/etc/modprobe.d似乎最有意义,因为毕竟我正在尝试加载一些驱动程序。这个选项的唯一问题是我不确定驱动程序是否可以顺序加载然后卸载。

另一件事

所有这一切的另一部分是在加载驱动程序后,我还需要运行一个脚本:

#!/bin/sh
sudo rmmod v4l2loopback
sudo modprobe v4l2loopback video_nr=10 card_label="Kinect v2"
ffmpeg \
    -i /dev/video0 \
    -vsync drop \
    -filter:v fps=30,scale=1280:-1,hflip \
    -pix_fmt yuyv422 \
    -color_trc bt709 \
    -color_primaries bt709 \
    -color_range tv \
    -f v4l2 \
    /dev/video10

哪个似乎更适合cronor init。

哪个选项是稳定性和易于配置的最佳折衷方案?

提前感谢您的任何/所有帮助!

scripts drivers init.d cron modprobe
  • 2 2 个回答
  • 375 Views

2 个回答

  • Voted
  1. kanehekili
    2020-08-05T11:02:47+08:002020-08-05T11:02:47+08:00

    您省略了一种可能性:使用 systemd。就我个人而言,我认为这是调整系​​统的最优雅的方式(例如,请参阅此处了解稍微相关的问题)。

    打开一个终端并创建一个新服务:( sudo nano /etc/systemd/system/mydrivers.service选择anyName.service)

    (除了使用 nano 你也可以使用sudo -H gedit /etc/..)

    它的内容:

    [Unit]
    Description= Your description here
    
    [Service]
    Type=simple
    ExecStart= /usr/local/bin/myExecutableBash.sh #or whatever is executable
    
    [Install]
    WantedBy=multi-user.target
    

    要启用该服务,请执行:

    sudo systemctl enable mydrivers.service(或您的服务名称)

    立即启动服务:

    sudo systemctl start mydrivers.service

    您的第二部分可以类似地解决:您需要创建另一个依赖于您的第一个服务的服务。
    所以服务应该从以下开始:

    [Unit]
    Description= Your description here
    After=mydrivers.service  
    
    [Service]
    ... your code here
    

    对于这项服务,我更愿意将您的代码写入可执行 bashfile 并在“Exec”行中启动它

    • 0
  2. Best Answer
    Sterling Butters
    2020-08-18T06:28:57+08:002020-08-18T06:28:57+08:00

    这是我最终做的事情:

    1. 将构建的 *.ko 模块复制到/lib/modules/5.4.0-42-generic/kernel/drivers/kinect

    2. 用名称重命名内置模块gspca_main.ko以gspca_kinect_main.ko防止与主驱动程序冲突

    3. 冉depmod

    4. 添加:

      videodev
      gspca_kinect_main
      gspca_kinect2
      v4l2loopback 
      

      在/etc/modules启动时加载

    5. 创建/etc/modprobe.d/v4l2loopback.conf的文件内容: options video_nr=10 card_label="Kinect v2"

    6. 为环回设备创建了 ffmpeg 服务(v4l2loopback.service)并启用它:

      [Unit]
      Description=V4L2 Loopback Service for Kinect Webcam
      
      [Service]
      Type=simple
      ExecStart=ffmpeg -i /dev/video0 -vsync drop -filter:v fps=30,scale=1280:-1,hflip -pix_fmt yuyv422 -color_trc bt709 -color_primaries bt709 -color_range tv -f v4l2 /dev/video10
      
      [Install]
      WantedBy=multi-user.target
      

      systemctl v4l2loopback enable

    我无法回答的问题: - 为什么模块在输出中gspca_kinect_main.ko加载?gspca_mainlsmod

    - Two additional devices now appear: /dev/video3 and /dev/video4 that are not functional; where did they come from?
    

    我本可以为 gspca_kinect_main 和 gspca_kinect2 创建一个依赖项,但目前不需要基于 /etc/modules

    完整安装文件:

    apt-get install ffmpeg
    
    echo "Cloning GSPCA Repo..."
    git clone https://github.com/grandchild/gspca-kinect2.git && cd gspca-kinect2
    echo "Building & Installing Modules (copying into /lib/modules/`uname -r`/kernel/drivers/kinect)"
    make -C /lib/modules/`uname -r`/build  M=`pwd` SRCROOT=`pwd` clean modules
    cp gspca_main.ko gspca_kinect_main.ko
    mkdir /lib/modules/`uname -r`/kernel/drivers/kinect
    cp gspca_kinect_main.ko /lib/modules/`uname -r`/kernel/drivers/kinect/gspca_kinect_main.ko
    cp gspca_kinect2.ko /lib/modules/`uname -r`/kernel/drivers/kinect/gspca_kinect2.ko
    cd ..
    
    echo "Cloning V4L2Loopback Repo..." 
    git clone https://github.com/umlaeute/v4l2loopback.git && cd v4l2loopback
    echo "Building and Installing Modules"
    make && make install
    cd ..
    echo "Resolving Module Dependencies"
    depmod -a
    echo "Enabling GSPCA & V4L2Loopback Modules at boot"
    for module in "videodev" "gspca_kinect_main" "gspca_kinect2" "v4l2loopback"
    do
        if grep -Fxq $module /etc/modules
        then
                echo "$module found - skipping..."
        else
                echo "$module not found - adding to /etc/modules"
                    echo $module >> /etc/modules
        fi
    done
    
    echo "options video_nr=10 card_label='Kinect v2'" > /etc/modprobe.d/v4l2loopback.conf
    
    echo "Starting Modules"
    modprobe videodev
    modprobe gspca_kinect_main
    modprobe gspca_kinect2
    modprobe v4l2loopback video_nr=10 card_label="Kinect v2"
    
    echo "Creating ffmpeg service v4l2-kinect.service"
    echo "[Unit]
    Description=V4L2 Loopback Service for Kinect Webcam
    
    [Service]
    Type=simple
    ExecStart=ffmpeg -i /dev/video0 -vsync drop -filter:v fps=30,scale=1280:-1,hflip -pix_fmt yuyv422 -color_trc bt709 -color_primaries bt709 -color_range tv -f v4l2 /dev/video10
    
    [Install]
    WantedBy=multi-user.target" > /lib/systemd/system/v4l2-kinect.service
    
    echo "Enabling v4l2-kinect.service at boot"
    systemctl enable v4l2-kinect
    
    • 0

相关问题

  • 如何编写 shell 脚本来安装应用程序列表?

  • 类似于 Eyefinity 的东西?

  • Mac OS X Automator 的替代品?

  • 命令列出启动时启动的服务?

  • 在哪里可以找到 Brother HL-2170W 64 位打印机驱动程序?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve