Forum Linux.noyau kernel / driver / firmware ath10k

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
3
17
juin
2021

Hello à toutes et à tous :)

Voici un problème qui me prend la tête depuis plus d'une semaine ^

Pour un projet, j'utilise comme support un clearfog base ( marque : solidrun).
L'os est fait maison gràce à Buildroot.
Le kernel est custom également.

Je débute et me fais les dents ainsi :)
Rie de mieux que la pratique pour apprendre :)

J'ai installé une carte wifi pcie ( utilisant les drivers ath10k et le firmware : QCA988X).

Le problème :
lorsque j'allume mon Clearfog, la carte ne remonte pas :

    # dmesg | grep 'ath'
    [    1.745947] ath10k_pci 0000:01:00.0: enabling device (0140 -> 0142)
    [    1.752432] ath10k_pci 0000:01:00.0: pci irq msi oper_irq_mode 2 irq_mode 0 r                                          eset_mode 0
    [    1.989357] ath10k_pci 0000:01:00.0: Failed to find firmware-N.bin (N between                                           2 and 6) from ath10k/QCA988X/hw2.0: -2
    [    1.999921] ath10k_pci 0000:01:00.0: could not fetch firmware files (-2)
    [    2.006653] ath10k_pci 0000:01:00.0: could not probe fw (-2)
    # QCA988X

Le firmware est dans le bon dossier, à savoir : /lib/firmware/ath10k/QCA988X/hw2.0/

Cependant, lorsque je fais un chmod 777 du firmware, et que je lance un soft reboot,
le firmware est reconnu et la carte wifi remonte.

    # dmesg | grep 'ath'
    [    1.749532] ath10k_pci 0000:01:00.0: enabling device (0140 -> 0142)
    [    1.755996] ath10k_pci 0000:01:00.0: pci irq msi oper_irq_mode 2 irq_mode 0 reset_mode 0
    [    2.018995] ath10k_pci 0000:01:00.0: qca988x hw2.0 target 0x4100016c chip_id 0x043202ff sub 0000:0000
    [    2.028257] ath10k_pci 0000:01:00.0: kconfig debug 1 debugfs 1 tracing 1 dfs 0 testmode 1
    [    2.037036] ath10k_pci 0000:01:00.0: firmware ver 10.2.4-1.0-00047 api 5 features no-p2p,raw-mode,mfp,allows-mesh-bcast crc32 35bd9258
    [    2.083049] ath10k_pci 0000:01:00.0: board_file api 1 bmi_id N/A crc32 bebc7c08
    [    3.246972] ath10k_pci 0000:01:00.0: unsupported HTC service id: 1536
    [    3.273389] ath10k_pci 0000:01:00.0: htt-ver 2.1 wmi-op 5 htt-op 2 cal otp max-sta 128 raw 0 hwcrypto 1
    [    3.395395] ath: EEPROM regdomain: 0x0
    [    3.395398] ath: EEPROM indicates default country code should be used
    [    3.395399] ath: doing EEPROM country->regdmn map search
    [    3.395403] ath: country maps to regdmn code: 0x3a
    [    3.395405] ath: Country alpha2 being used: US
    [    3.395407] ath: Regpair used: 0x3a
    [   20.128472] ath10k_pci 0000:01:00.0: unsupported HTC service id: 1536
    [   20.154994] ath10k_pci 0000:01:00.0: pdev param 0 not supported by firmware
    [   27.578837] ath10k_pci 0000:01:00.0: unsupported HTC service id: 1536
    [   27.605438] ath10k_pci 0000:01:00.0: pdev param 0 not supported by firmware

Lorsque j'éteins électriquement le Clearfog et le rallume, la carte wifi ne remonte pas et je suis obligé de refaire un chmod 777 et de lancer un soft reboot :(

J'ai créé un script dans /etc/init.d pour qu'il automatise le chmod 777 sur le firmware, en vain :(

quelqu'un aurait une idée?

Merci d'avance

  • # J'ai des questions

    Posté par  . Évalué à 3 (+2/-0). Dernière modification le 17/06/21 à 23:13.

    Quels sont les droits du fichier de firmware quand ça marche pas ?

    Est-ce que si tu charges le module ath à la main (avec modprobe) sans faire le chmod, la carte fonctionne ?

    Est-ce que si tu charges le module ath à la main, mais en faisant le chmod avant, la carte fonctionne ?

    Est-ce que si fais seulement le chmod puis que tu montes l'interface (genre ifconfig wlan0 up) ça fonctionne ?

    Es-tu certain que ton script init se lance au boot (lui faire créer un petit fichier dans /tmp pour vérifier, genre date > /tmp/chmodtest) ?

    Si le système d'init de ta distrib est du type SysV (ce que suggère la présence de /etc/init.d/), tu peux essayer de faire un script qui s'exécute à l'extinction aussi (dans /etc/rc0.d et /etc/rc6.d) ?

    Le répertoire /lib/firmware est-il sur un système de fichier avec un overlay par dessus ?

    • [^] # Re: J'ai des questions

      Posté par  . Évalué à 1 (+0/-0).

      Hello,
      Tout d'abord, je te remercie pour ta réponse :).

      pour répondre à tes questions :

      Quels sont les droits du fichier de firmware quand ça marche pas ?
      ```

      ls -l

      total 483
      -rwxrwxrwx 1 root root 2116 Jan 9 18:28 board.bin
      -rwxrwxrwx 1 root root 241892 May 11 13:48 firmware-4.bin
      -rwxrwxrwx 1 root root 249044 May 11 13:48 firmware-5.bin
      ```
      Est-ce que si tu charges le module ath à la main (avec modprobe) sans faire le chmod, la carte fonctionne ?

      Est-ce que si tu charges le module ath à la main, mais en faisant le chmod avant, la carte fonctionne ?

      Je ne lance pas le module à la main, j'ai "intégrer le driver" dans le kernel, qui se lance automatiquement au boot.

      Est-ce que si fais seulement le chmod puis que tu montes l'interface (genre ifconfig wlan0 up) ça fonctionne ?

      J'ai essayé ce conseil mais l'interface ne remonte pas :
      ```

      chmod 777 -R /lib/firmware/ath10k/

      ifconfig wlan up

      ifconfig: SIOCGIFFLAGS: No such device

      ifup wlan0

      Cannot find device "wlan0"
      Cannot find device "wlan0"
      ```

      Es-tu certain que ton script init se lance au boot (lui faire créer un petit fichier dans /tmp pour vérifier, genre date > /tmp/chmodtest) ?

      Yes,j'en suis sûr, j'ai testé avec des echo et je les vois bien au boot

      Si le système d'init de ta distrib est du type SysV (ce que suggère la présence de /etc/init.d/), tu peux essayer de faire un script qui s'exécute à l'extinction aussi (dans /etc/rc0.d et /etc/rc6.d) ?

      J'y avais pensé.
      Mais le fait de faire un chmod puis de débrancher la prise électrique et de rallumer après, le firmware ne se lance pas.
      Il se lance seulement après un soft reboot, précédé du chmod 777.

      Le répertoire /lib/firmware est-il sur un système de fichier avec un overlay par dessus ?

      Dans buildroot, j'utilise en effet un overlay

      merci encore pour ton aide

      • [^] # Re: J'ai des questions

        Posté par  . Évalué à 3 (+2/-0).

        Mais le fait de faire un chmod puis de débrancher la prise électrique et de rallumer après, le firmware ne se lance pas.
        Il se lance seulement après un soft reboot, précédé du chmod 777.

        C'est assez curieux, on est d'accord que le soft reboot recharge le kernel ? Ce serait comme si le système ne perd pas ses fichiers/ne démonte pas ses partitions entre deux reboot, c'est quand même peut probable :-/.

        Sinon, des pistes un peu en vrac, je connais un tout petit peu openwrt et pas du tout buildroot, mais sait-on jamais.

        Je suspecte que le firmware n'est pas sur la partition disponible au moment du boot (sous l'overlay) mais qu'il est sur l'overlay, qui est monté après que le driver se charge et échoue.

        Un moyen possible de vérifier serait de mettre le driver ath10k en module, pour qu'il se charge plus tard. Aussi tu peux essayer de démonter l'overlay (ou monter l'image de la partition sur un autre PC) pour voir si le fichier de firmware y est bien, et quels sont ses droits (dans ta réponse il est en 0777, mais c'est après que ton script soit passé j'imagine).

        Aussi, voir dans les options de buildroot s'il n'y a pas une option subtile dans un menu, qui permet de placer le firmware dans l'initrd par exemple.

        Bon courage en tout cas !

        • [^] # Re: J'ai des questions

          Posté par  . Évalué à 2 (+0/-0).

          Je suspecte que le firmware n'est pas sur la partition disponible au moment du boot (sous l'overlay) mais qu'il est sur l'overlay, qui est monté après que le driver se charge et échoue.

          je suppose aussi un souci du genre

          le pilote reseau se charge tot (1sec et des poussières) donc probablement avant l'overlay

          si c'est du sysV (/etc/init.d) il suffirait peut-etre de changer l'ordre des scripts de chargement dans /etc/rc3.d/
          pour charger le wifi à la toute fin (sauf s'il y a besoin du reseau pour monter un partage de fichier par exemple, mais auquel cas tu as 1- montage des FS locaux, 2- activation du reseau, 3- montage des FS distants)

      • [^] # Re: J'ai des questions

        Posté par  . Évalué à 2 (+1/-0).

        Mais le fait de faire un chmod puis de débrancher la prise électrique et de rallumer après, le firmware ne se lance pas.

        ça me turlupine ce détail… Est-ce que pour le reboot, kexec (ou une variante) est utilisé ? C'est à dire que les systèmes de fichiers ne sont pas forcément démontés entre deux reboot soft ?

        • [^] # Re: J'ai des questions

          Posté par  . Évalué à 1 (+0/-0).

          Re.

          Je te dirai ça en rentrant ce soir. ^

          Je debute dans Buildroot et les Kernel custom, il y a de fortes chances que j'ai mal configuré ce genre de détails .

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.