Forum Linux.embarqué [Fairphone/PostmarketOS] : Adaptation d'un driver imx412 pour imx576

Posté par  . Licence CC By‑SA.
5
25
avr.
2024

Bonjour à tous,

J'ai installé PostMarketOS sur mon fairphone 4.

J'ai réussi à compiler le projet dans le but de faire avancer le driver d'une caméra IMX412 dispo dans le noyau linux pour le porter vers une caméra IMX576.

Seulement, comme je n'ai jamais développé/déboguer de driver bas niveau sous linux, je me demandais quels sont les outils pour effectuer ce genre de déboguage ? et par ou commencer aussi.

Spécification IMX412 :
https://www.sony-semicon.com/files/62/flyer_security/IMX412-AACK_Flyer.pdf

Spécification complète IMX576 :
http://static6.arrow.com/aropdfconversion/c5d8dc9c6ca246360621f83c2e46fca339b7e364/imx576-aakh5-c_4.0.0.pdf

De premiers travaux ont été initié ici.
https://github.com/z3ntu/linux/tree/fp4-6.1.y-wip3-camera/drivers

Dont,
arch/arm64/configs/fp4_defconfig
CONFIG_VIDEO_IMX412=y
drivers/media/i2c/imx412.c

Source du driver IMX412 dispo ici.
https://github.com/z3ntu/linux/blob/fp4-6.1.y-wip3-camera/drivers/media/i2c/imx412.c

Merci pour vos retours.

  • # directement auprès du projet

    Posté par  . Évalué à 1.

    je pense que le plus simple serait de demander sur le irc/matrix, ou sur leur gitlab, ton problème

    l'expertise est beaucoup trop pointue, pour gérer l'APN, seuls quelques uns s'y sont collés

  • # modinfo

    Posté par  (site web personnel) . Évalué à 2.

    tu as modinfo imx412 qui devrait te donner les flags/paramètres1 prévus pour démarrer le pilote

    bon, pas de bol, je ne l'ai pas sur mon noyau 6.6.28-desktop-1.mga10 :/

    modinfo imx tab # pour l'autocomplétion me propose seulement :
    imx208 imx214 imx219 imx258 imx274 imx290 imx296 imx319 imx355

    c'est ballot pour un pilote de caméra de ne pas se baser sur uvcvideo qui est le standard (bon ok, plutôt pour les webcams en USB :/), au moins ils ont l'air d'utiliser v4l2

    déjà un lspci -knn ; lsusb ; lsusb -t # permettrait de lister plus précisément ton matériel

    pour revenir au pilote, il pourrait logguer des infos avec le bon flag pour le charger

    • modprobe -i imx412 debug=2 # par exemple, si c'est implémenté….
    • modprobe -r imx412 # pour décharger le module… tu vas devoir jouer avec les 2 commandes régulièrement :-)

    1. par exemple pour ueagle-atm que je connais bien/mieux : parm: debug:module debug level (0=off,1=on,2=verbose) (uint) 

    • [^] # Re: modinfo

      Posté par  . Évalué à 2. Dernière modification le 02 mai 2024 à 15:22.

      J'ai pris le sujet en main.

      Les noeuds sont bien créé dont voici le schéma global.

      Schema global des noeuds

      Pour résumé, c'est une implémentation du driver CAMSS à base de v4l2.

      Qcom-camss

      Avec ceci, j'ai pu effectuer les liens entre les entités (en vert).
      -imx412 (camera)
      -CSIPHY3
      -CSID0
      -VFE0_RDIO0
      -VFE0_VIDEO0 -> /dev/video0

      fairphone-fp4:~$ media-ctl -d /dev/media0 -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
      fairphone-fp4:~$ media-ctl -d /dev/media0 -l '"msm_csiphy3":1->"msm_csid0":0[1]'

      Ajuster le format.

      fairphone-fp4:~$ media-ctl -d /dev/media0 -V '"msm_csid0":1[fmt:UYVY8_2X8/1920x1080 field:none],"msm_vfe0_rdi0":0[fmt:UYVY8_2X8/1920x1080 field:none]'
      fairphone-fp4:~$ media-ctl -d /dev/media0 -V '"msm_csiphy3":1[fmt:UYVY8_2X8/1920x1080 field:none],"msm_csid0":0[fmt:UYVY8_2X8/1920x1080 field:none]'

      Effectuer l'acquisition d'une image depuis la caméra IMX412.

      fairphone-fp4:~$ gst-launch-1.0 -v v4l2src device=/dev/video0 num-buffers=1 ! 'video/x-raw,format=UYVY,width=1920,height

      Les logs ici,
      Log haut niveau

      Logs bas niveau,
      Log bas niveau

      J'ai du mal à interpreter les résultats de dmesg n'étant pas de l'info.

      Je vois que c'est un problème d'horloge qui reste à 'off' mais je ne vois pas comment débloquer la situation !

      La caméra est géré par liaison I2C et c'est le controlleur du driver camss qui renvoie cette erreur.

      Si vous avez des suggestions pour débboguer ou un contact qui a déjà travaillé sur ce genre de problème, je suis preneur ! Ou un forum orienté sur ce genre de problématique.

      • [^] # Re: modinfo

        Posté par  (site web personnel) . Évalué à 2.

        bah déjà tu as un kernel panic ('fin bon un warning mais c'est à peine mieux pour prendre en compte ton matériel) :/ ce n'est jamais très bon : souci d'initialisation de données, non adaptation/reconnaissance du matériel connecté… ça peut venir de pleins de choses.

        L'idée c'est d'être robuste et pouvoir réinitialiser au déchargement / rechargement du module…

        [Mar Avr 30 15:31:18 2024] qcom-camss acb3000.camss: VFE HW Version = 1.2.0
        [Mar Avr 30 15:31:18 2024] ------------[ cut here ]------------
        [Mar Avr 30 15:31:18 2024] camcc_ife_0_clk status stuck at 'off'
        [Mar Avr 30 15:31:18 2024] WARNING: CPU: 1 PID: 12398 at drivers/clk/qcom/clk-branch.c:87 clk_branch_toggle+0x174/0x18c
        [Mar Avr 30 15:31:18 2024] Modules linked in: msm gpu_sched drm_display_helper drm_exec
        [Mar Avr 30 15:31:18 2024] CPU: 1 PID: 12398 Comm: gst-launch-1.0 Tainted: G W 6.9.0-rc2 #1
        [Mar Avr 30 15:31:18 2024] Hardware name: Fairphone 4 (DT)
        [Mar Avr 30 15:31:18 2024] pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
        [Mar Avr 30 15:31:18 2024] pc : clk_branch_toggle+0x174/0x18c
        [Mar Avr 30 15:31:18 2024] lr : clk_branch_toggle+0x174/0x18c
        [Mar Avr 30 15:31:18 2024] sp : ffff80008142b810
        [Mar Avr 30 15:31:18 2024] x29: ffff80008142b820 x28: 0000000000000003 x27: 0000000000000aa8
        [Mar Avr 30 15:31:18 2024] x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000001
        [Mar Avr 30 15:31:18 2024] x23: ffffb9ba890a1578 x22: 0000000000000001 x21: ffffb9ba894b5e80
        [Mar Avr 30 15:31:18 2024] x20: ffffb9ba8870ea38 x19: 0000000000000000 x18: 0000000000024500
        [Mar Avr 30 15:31:18 2024] x17: 0000000000000014 x16: 0000000000000030 x15: 0000000000000030
        [Mar Avr 30 15:31:18 2024] x14: 0000000000000000 x13: ffffb9ba8941e2c0 x12: 0000000000002e86
        [Mar Avr 30 15:31:18 2024] x11: 0000000000000f82 x10: ffffb9ba8948d6f0 x9 : ffffb9ba8941e2c0
        [Mar Avr 30 15:31:18 2024] x8 : 00000000ffffefff x7 : ffffb9ba894762c0 x6 : 0000000000000f82
        [Mar Avr 30 15:31:18 2024] x5 : ffff344bf9375848 x4 : ffff80008142b670 x3 : ffff7a9170110000
        [Mar Avr 30 15:31:18 2024] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff344b0236b000
        [Mar Avr 30 15:31:18 2024] Call trace:
        [Mar Avr 30 15:31:18 2024] clk_branch_toggle+0x174/0x18c
        [Mar Avr 30 15:31:18 2024] clk_branch2_enable+0x1c/0x28
        [Mar Avr 30 15:31:18 2024] clk_core_enable+0x6c/0xac
        [Mar Avr 30 15:31:18 2024] clk_enable+0x28/0x54
        [Mar Avr 30 15:31:18 2024] camss_enable_clocks+0xc0/0x100
        [Mar Avr 30 15:31:18 2024] vfe_get+0x474/0x5c4
        [Mar Avr 30 15:31:18 2024] vfe_set_power+0x30/0x58
        [Mar Avr 30 15:31:18 2024] pipeline_pm_power_one+0x144/0x158
        [Mar Avr 30 15:31:18 2024] pipeline_pm_power+0x74/0xfc
        [Mar Avr 30 15:31:18 2024] v4l2_pipeline_pm_use+0x54/0x90
        [Mar Avr 30 15:31:18 2024] v4l2_pipeline_pm_get+0x14/0x20
        [Mar Avr 30 15:31:18 2024] video_open+0x74/0xf0
        [Mar Avr 30 15:31:18 2024] v4l2_open+0x7c/0x11c
        [Mar Avr 30 15:31:18 2024] chrdev_open+0xc8/0x2b4
        [Mar Avr 30 15:31:18 2024] do_dentry_open+0x1a4/0x54c
        [Mar Avr 30 15:31:18 2024] vfs_open+0x2c/0x38
        [Mar Avr 30 15:31:18 2024] path_openat+0xb04/0xdd0
        [Mar Avr 30 15:31:18 2024] do_filp_open+0x9c/0x150
        [Mar Avr 30 15:31:18 2024] do_sys_openat2+0xc4/0x104
        [Mar Avr 30 15:31:18 2024] __arm64_sys_openat+0x64/0xac
        [Mar Avr 30 15:31:18 2024] invoke_syscall+0x48/0x110
        [Mar Avr 30 15:31:18 2024] el0_svc_common.constprop.0+0x40/0xe0
        [Mar Avr 30 15:31:18 2024] do_el0_svc+0x1c/0x28
        [Mar Avr 30 15:31:18 2024] el0_svc+0x34/0xd8
        [Mar Avr 30 15:31:18 2024] el0t_64_sync_handler+0x120/0x12c
        [Mar Avr 30 15:31:18 2024] el0t_64_sync+0x190/0x194
        [Mar Avr 30 15:31:18 2024] ---[ end trace 0000000000000000 ]---
        [Mar Avr 30 15:31:18 2024] qcom-camss acb3000.camss: clock enable failed: -16
        [Mar Avr 30 15:31:18 2024] qcom-camss acb3000.camss: Failed to power up pipeline: -16
        [Mar Avr 30 15:31:18 2024] qcom-camss acb3000.camss: VFE HW Version = 1.5.0

        => on ne voit pas très bien quelle action génère quelle trace : c'est toujours bien d'avoir un terminal affichant le journalctl -f en parallèle d'un terminal où l'on effectue les actions pour déterminer la réponse effective à chaque action.

        => pareil, je ne vois pas pourquoi tu passes de

        qcom-camss acb3000.camss: VFE HW Version = 1.2.0

        à

        qcom-camss acb3000.camss: VFE HW Version = 1.5.0

        pourquoi 2 versions différentes ? ça correspond à quoi ?

        J'ai du mal à interpreter les résultats de dmesg n'étant pas de l'info.

        ah c'était du dmesg et pas du journalctl ? => indique ta méthodologie pour débugguer :-)

        • en gros, il faut commencer par les couches basses : chargement du module par modprobe -i nom_module
        • logs correspondants, outils de diagnostic pour s'assurer que le matériel est correctement détecté
        • si ok, continuer avec actions de plus haut niveau, avec logs afférents
        • pareil outil de diagnostic que tout s'est correctement déroulé est correctement pris en compte (en s'assurant que dbus ne vient pas mettre la grouille au passage…)

        En gros, savoir effectuer les actions séquentiellement et manuellement plutôt que de s'appuyer sur trop d'automatisation qui complique l'analyse…

        La caméra est géré par liaison I2C et c'est le controlleur du driver camss qui renvoie cette erreur.

        déjà voir avec les utilisateurs/développeurs de ce pilote s'ils ont un forum/une mailing-list/un chan IRC ou autre…

        Ils te demanderont sans doute des informations complémentaires :

        • uname -a # pour voir quel noyau tu utilises
        • lspci -knn # pour voir quel matériel tu as et les éventuels pilotes le gérant
        • lsusb ; lsusb --tree # si c'est connecté en USB (a priori non) et quoi est connecté où

        d'après https://www.kernel.org/doc/html/latest/admin-guide/media/qcom_camss.html tu dois pouvoir contacter les gens de Linaro qui semblent avoir repris le sujet (je doute que qualcomm soit très coopératif vu que leurs docs' ne sont plus en ligne et dataient de 2016/2018…)

        ah… je vois que c'est GKH qui est intervenu sur
        https://git.codelinaro.org/clo/la/kernel/msm-3.18/

        bah, tu peux essayer de le contacter, il est sympa :-) (je l'ai rencontré au Fosdem et j'avais un peu bossé avec lui pour ueagle-atm), il t'orientera peut-être mieux vers des utilisateurs plus spécialistes que lui (évite la LKML, spa le meilleur endroit pour obtenir du support… outre le fait que tu risques de faire exploser ta boîte mail)

        Sinon, je vois que tu as un fairphone : essaie d'abord de voir sur leurs forums s'il y a d'autres utilisateurs dans ton cas.
        A priori, tu n'auras pas besoin de recompiler de noyau, les pilotes ça suffit généralement si les interfaces n'ont pas trop changé…

        Bon courage, tu n'es pas à l'abri de trouver un autre utilisateur ayant réussi à le faire fonctionner :-) Notez bien ce qui fonctionne correctement pour pouvoir avancer (et y revenir ensuite pour avoir une méthodologie reproductible)

        • [^] # Re: modinfo

          Posté par  . Évalué à 2.

          Merci !

          Voici les commandes passées.

          Commandes

          Les logs de la commande gst-launch.

          Log gst-launch

          Log de dmesg.

          Dmesg

          La comme ça, je n'ai pas plus.

          On m'a conseillé d'augmenter le niveau de verbosité et d'utiliser gdb.

          Il y a d'autres outils pour déboguer.

          Pour ton contact, je pourrais le joindre par quel moyen ?

          Je vais voir pour d'autres sites aussi ou IRC oui

          • [^] # Re: modinfo

            Posté par  (site web personnel) . Évalué à 2.

            Dmesg La comme ça, je n'ai pas plus.

            bin, 3 call trace spa engageant :/

            On m'a conseillé d'augmenter le niveau de verbosité et d'utiliser gdb.

            ça c'est pour le gst-launch, un strace aussi donnerait plus d'infos (mais bon difficilement interprétable).
            l'erreur a l'air d'être à plus bas niveau dans acb3000.camss

            Pour ton contact, je pourrais le joindre par quel moyen ?

            mail :-)

            Je vais voir pour d'autres sites aussi ou IRC oui

            commence par les forums fairphone, il y aura bien quelqu'un qui a le même matériel que toi : ou est-ce un ajout spécifique que tu fais ?

            • [^] # Re: modinfo

              Posté par  . Évalué à 1. Dernière modification le 02 mai 2024 à 21:28.

              Mais ou est caché le mail de ce brave monsieur ?

              En fait, j'essaie de faire fonctionner la camera IMX576 à partir du driver de la caméra IMX412.

              Donc sur le modèle fairphone 4, tout le monde a cette caméra mais pas le même OS.

              Il existe tellement d'OS, mais j'essaie faire fonctionner cette partie pour PostmarketOS qui est un dérivé d'Alpine Linux.

              C'est à priori l'OS qui aurait le plus de matériel maintenu avec une bonne gestion des codes.

              Ca permettrait de faire avancer les choses sur ce téléphone que j'ai acheté et pour cet OS.

              Et puis, ça me fait découvrir aussi ce monde, de nouvelles techniques que je n'ai pas encore touché, ou de loin :)

  • # complément

    Posté par  (site web personnel) . Évalué à 2.

    tu as regardé sur la ML linux-media ?
    https://www.spinics.net/lists/linux-media/msg215880.html

    cela parle de imx577 utilisant imx412…

    il y a peut-être des infos à grappiller :-)

    • [^] # Re: complément

      Posté par  . Évalué à 1.

      Ca à l'air interessant mais ou peut-on trouver ce qui a été modifié dans les fichiers ?

      • [^] # Re: complément

        Posté par  (site web personnel) . Évalué à 2.

        mais ou peut-on trouver ce qui a été modifié dans les fichiers ?

        ah, bah ça, c'est le jeu de piste ;-)

        • [^] # Re: complément

          Posté par  . Évalué à 1. Dernière modification le 03 mai 2024 à 11:06.

          Une piste récente serait la suivante.

          Partir de ce code car créé par Qualcomm et repris par Linaro.

          https://git.codelinaro.org/clo/la/platform/vendor/opensource/camera-kernel

          Et suivre ces commentaires.

          Yeah we need to find a tag in that repo
          that matches in some way one of the tags here
          https://git.codelinaro.org/clo/la/platform/vendor/opensource/camera-kernel.git
          that's the CPHY/CSID/IFE version to target
          i.e. know which CSIPHY init sequence to use - if we can reuse an upstream CSID/IFE - and get the reg offsets right

          Essayons de décrypter !

          La personne entend quoi par "that's the CPHY/CSID/IFE version to target" ?

          Que ce sont ces parties à voir précisement dans le code ?

          "i.e. know which CSIPHY init sequence to use - if we can reuse an upstream CSID/IFE - and get the reg offsets right"

          La ça me parait clair mais quand on ne connait pas bien la structure du code et comment sont appellés les différentes fonctions, c'est un peu obscure !

Suivre le flux des commentaires

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