[gelöst] yavdr-ansible: /usr/local/bin/module-helper unload der DVB Treiber schlägt fehl

  • Hallo,


    habe wie hier geschildert meinen Standby konfiguriert. Das hat leider nicht direkt funktioniert. Bei der Fehlersuche bin ich dann auf die Ursache in /usr/local/bin/module-helper gestoßen. Die bei meiner Hardware beteiligten Treiber lassen sich so anzeigen:

    Code
    # lsmod | egrep 'smipcie|m88ds3103|dvb_core'
    m88ds3103              32768  2
    i2c_mux                16384  1 m88ds3103
    smipcie                24576  0
    dvb_core              139264  2 smipcie,m88ds3103
    rc_core                53248  4 rc_dvbsky,smipcie,ir_rc5_decoder
    mc                     53248  1 dvb_core
    i2c_algo_bit           16384  2 smipcie,i915

    Daraus baut dann der module-helper ein Array der zu löschenden Module auf mit dem Inhalt/Reihenfolge "['m88ds3103', 'smipcie', 'dvb_core']". Es wird also zuerst "m88ds3103" entfernt. Das führt aber leider zu einem Fehler:

    Code
    # rmmod m88ds3103
    rmmod: ERROR: Module m88ds3103 is in use

    Der module-helper müsste zuerst den "smipcie" Treiber entfernen. Dann lassen sich auch "m88ds3103" und zuletzt "dvb_core" ohne Probleme entfernen. Hab ich manuell so erfolgreich ausprobiert. Ich vermute mal der module-helper müsste bei der Reihenfolge der Treiberliste die Reihenfolge in der Spalte "used_by" bei dem Treiber dvb_core beachten. Deshalb habe ich in /usr/local/bin/module-helper noch folgendes ergänzt:

    Dadurch werden die Treiber in der richtigen Reihenfolge (['smipcie', 'm88ds3103', 'dvb_core']) entfernt und das System kommt nach dem Standby wieder richtig hoch.


    Ob diese Änderung negative Auswirkungen bei anderen Installation zeigen würde, kann ich leider nicht beurteilen. Aus meiner Sicht wäre es jedenfalls wünschenswert die Anpassung bei zukünftigen Versionen des module-helpers zu berücksichtigen. Evtl. lässt sich das auch schöner lösen, bin kein Python Entwickler.

  • Ein Tipp ins Blaue: ich würde die Werte der dritten Spalte sortieren und von 0 nach 4 "abarbeiten"/beenden.

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Ich fürchte das ist komplexer als die Logik, die ich damals aus dem Skript von e-tobi übernommen hatte - ich habe das gerade noch mal mit den snd_* Modulen auf meinem System durchgespielt:

    Da kann man wohl nicht einfach mit den gelisteten Modulen arbeiten, sondern man muss sich da an der Zahl der genutzten Instanzen entlang hangeln - also mit snd_hda_intel anfangen, weil das keine aktiven Instanzen hat, danach snd_hda_codec_hdmi und snd_hda_codec_realtek entfernen, dann snd_hda_codec_generic usw. - ich fürchte, das muss man iterativ lösen - kannst du mal schauen, ob dir das folgende Skript wie erwartet funktioniert?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • so ein binary zum Entladen der DVB Treiber habe ich mal für die Ex-easyvdr-Distri geschrieben.


    Vielleicht haben die Jungs da noch die Sources irgendwo.

  • Ich fürchte das ist komplexer als die Logik, die ich damals aus dem Skript von e-tobi übernommen hatte - ich habe das gerade noch mal mit den snd_* Modulen auf meinem System durchgespielt:

    Da kann man wohl nicht einfach mit den gelisteten Modulen arbeiten, sondern man muss sich da an der Zahl der genutzten Instanzen entlang hangeln - also mit snd_hda_intel anfangen, weil das keine aktiven Instanzen hat, danach snd_hda_codec_hdmi und snd_hda_codec_realtek entfernen, dann snd_hda_codec_generic usw. - ich fürchte, das muss man iterativ lösen - kannst du mal schauen, ob dir das folgende Skript wie erwartet funktioniert?

    Dein Skript liefert bei mir leider eine Fehlermeldung:

    Code
    # ./module-helper-new -u dvb_core
    Traceback (most recent call last):
      File "./module-helper-new", line 13, in <module>
        class Module:
      File "./module-helper-new", line 15, in Module
        raw_dependencies: list["Module"] = field(default_factory=list)
    TypeError: 'type' object is not subscriptable

    Habe leider keine Python Programmierkenntnisse um das selber zu lösen.

  • Bist du noch mit focal unterwegs? Ich hatte das gestern nur mit Python 3.10 unter Ubuntu 22.04 probiert, für ältere Versionen braucht es noch andere Type-Annotationen:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ja bin noch auf Focal. Dein Skript funktioniert dort fast :). Beim reload der Module fehlt dann noch das dvb_core. Das wird beim unload nicht in /tmp/modules.list geschrieben.

  • Ok, das kann ich noch in die Liste der Module aufnehmen - auf meinem System wird dvb_core automatisch entladen und dann beim Restore auch wieder geladen - passiert das bei dir nicht?

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Damit entlädt er das angegebene Modul explizit:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ich habe es mal ins git gebracht.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!