Jak załadować moduł w czasie uruchamiania?

32

Jak stwierdzono w Dlaczego moje wyjście audio (dźwięku) nie działa? , aby zainicjować sterownik dźwięku, należy go uruchamiać za sudo modprobe snd_bcm2835każdym razem, gdy chcesz wyprowadzić dźwięk.

Jak mogę to uruchomić przy rozruchu? (tj. przed zalogowaniem i bez danych wejściowych)

Alex Chamberlain
źródło
1
To kolejne pytanie, które można uznać za nie na temat. Może lepiej pasować do U&L .
Jivings
2
@Jivings: Tylko dlatego, że jest on na temat na Unixie i Linuksie , nie czyni go nie na temat dla Raspberry Pi , prawda?
Der Hochstapler
2
@OliverSalzburg: Myślę, że w tym konkretnym pytaniu zbyt wiele się nakłada. Nic w tym pytaniu nie czyni go specyficznym dla Raspberry Pi.
Jivings
1
Czy decyzja pod adresem meta.raspberrypi.stackexchange.com/questions/24/… nie oznaczałaby, że pytanie to jest w porządku?
Graham Wager
1
@Jivings Dzięki, chciałem tylko wyjaśnić to przyszłym użytkownikom, ponieważ komentarze wskazywały na zamknięcie pytania. Może zamiast tego wszystkie komentarze powinny zostać usunięte?
Graham Wager

Odpowiedzi:

24

Ładowanie modułów podczas rozruchu różni się nieco od uruchamiania poleceń uruchamiania.

W Debianie:

Dodaj nazwę modułu jako nowy wiersz w /etc/modules

W Arch Linux:

Dodaj nazwę modułu do tablicy modułów /etc/rc.conf, wiersz powinien wyglądać następująco:

modules=(snd_bcm2835)

Lub w przypadku nowej konfiguracji systemowej:

echo "snd_bcm2835" | sudo tee -a /etc/modules-load.d/snd_bcm2835.conf
Jivings
źródło
Dodałem snd_bcm2835do /etc/modulespliku na moim Xbian, ale to utworzyło pętlę podczas uruchamiania. wydaje się to niedozwolone przy uruchamianiu OSMC
rubo77
@ rubo77 Ciekawe! Dotarłeś do sedna?
Jivings
Niepewny. Może to był przypadek. Cała instalacja wydaje się już trochę zepsuta ...
rubo77
14

Modprobe on Boot - Debian

Aby odpowiedzieć na konkretne pytanie dotyczące sudo modprobe snd_bcm2835, dodaj moduł do /etc/modulesi uruchom ponownie. (Musisz to rootzrobić.)

Uruchamianie usług - Debian

Debian używa skryptów startowych do inicjalizacji systemu i można ich używać do uruchamiania dowolnych poleceń. Musisz zainstalować skrypt podobny do następującego w /etc/init.d.

#! /bin/sh
# /etc/init.d/blah
#

# Some things that run always
touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
  start)
    echo "Starting script blah "
    echo "Could do more here"
    ;;
  stop)
    echo "Stopping script blah"
    echo "Could do more here"
    ;;
  *)
    echo "Usage: /etc/init.d/blah {start|stop}"
    exit 1
    ;;
esac

exit 0

Powinieneś upewnić się, że można go uruchomić i jest własnością root.

sudo chmod 755 /etc/init.d/blah
sudo chown root:root /etc/init.d/blah

Następnie musisz go zarejestrować, aby działał podczas uruchamiania.

sudo update-rc.d blah defaults

Referencje

Alex Chamberlain
źródło
1
Żadna z tych rzeczy nie jest unikalna dla Debiana. Ponadto skrypty inicjujące nie są tym, czego powinieneś używać do ładowania modułów. Tylko pierwsza sekcja jest istotna dla pytania.
Jivings
Żadne z nich nie będzie działać na Arch, nie jestem pewien co do QtonPi.
Alex Chamberlain
Oczywiście, że tak.
Jivings
Och ... dlaczego zatem twoja odpowiedź Arch jest inna?
Alex Chamberlain
Ponieważ Arch definiuje przydatną abstrakcję dla zdarzeń startowych.
Jivings
3

Istnieje wiele sposobów uruchamiania polecenia podczas uruchamiania w systemie Linux, ale moim ulubionym podejściem jest utworzenie skryptu inicjującego /etc/init.di zarejestrowanie go za pomocą update-rc.d. W ten sposób aplikacja jest uruchamiana i zatrzymywana automatycznie podczas uruchamiania / zamykania systemu.

Zobacz ten post, aby uzyskać zestaw instrukcji, jak stworzyć taki na Raspberry Pi.

Martin O'Hanlon
źródło
1
Witamy w Raspberry Pi Beta! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Der Hochstapler
Jak zrobiłbyś to przez systemdinne systemy?
ArchHaskeller
0

Moim preferowanym podejściem byłoby dodanie polecenia setup do /etc/rc.local, gdzie byłby inicjowany na końcu bootowania, zanim zostaniesz poproszony o zalogowanie się.

Teoremiser
źródło