Автоматическая загрузка драйвера: Cron, Init или Modprobe

Main Problem

I am attempting to automate the loading of drivers for my system. The drivers were built manually and must be loaded manually. Another caveat is that one of the system drivers must be loaded and offloaded before manually inserting the built drivers. From the CLI, it looks something like this:

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

Options

I want to automate this at boot so that I don't have run the above each time. As I currently see it, I have several options:

  1. Cron

It looks as though I could use the @reboot string here to run the script

  1. Init

Alternatively, I thought about creating an init script but I don't necessarily need all the control over runlevel's or execution timing. Here I haven't seen any instances of multiples Exec's which would be necessary per "the other thing".

  1. Modprobe

Adding a conf file under /etc/modprobe.d seemed to make the most sense since, after all, I am trying to load some drivers. The only problem with this option is that I am not sure if drivers can be sequentially onloaded and then offloaded.

The other thing

The other part in all this is that after the drivers are loaded, I need to run a script as well:

#!/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

Which would seem to better fit under cron or init.

Which option is the best compromise of stability and ease of configuration?

Thanks in advance for any/all help!

0
задан 4 August 2020 в 21:31

1 ответ

Вы упустили одну возможность: использование systemd. Лично я считаю, что это наиболее элегантный способ настройки вашей системы (например, см. здесь для получения информации о слегка связанной проблеме).

Откройте терминал и создайте новую службу: sudo nano /etc/systemd/system/mydrivers.service[115305 visible(choose 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

Для этой службы я бы предпочел записать ваш код в исполняемый файл bash и запускать его в строке «Exec»

0
ответ дан 11 August 2020 в 20:11

Другие вопросы по тегам:

Похожие вопросы: