web-dev-qa-db-fra.com

Pourquoi les pilotes de carte tuner ne parviennent-ils pas à se construire après la mise à jour du noyau vers 4.4.0-143-générique?

J'utilise une marque particulière de cartes tuner TV (technologies TBS) et les pilotes ne sont pas inclus dans le noyau, ils doivent donc être reconstruits après chaque mise à jour du noyau. Après l'installation de la mise à jour du noyau d'hier à 4.4.0-143-générique, les pilotes TBS ne parviennent pas à se construire, mais si je reviens à 4.4.0-142-générique, ils fonctionnent. Le problème se produit lors de l'exécution de make, en particulier lorsqu'il tente de créer un fichier appelé videobuf-dma-sg.o, et la sortie d'erreur est la suivante:

  CC [M]  /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.o
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c: In function 'videobuf_dma_init_user_locked':
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:187:21: warning: passing argument 6 of 'get_user_pages' makes pointer from integer without a cast [-Wint-conversion]
         rw == READ, 1, /* force */
                     ^
In file included from include/linux/scatterlist.h:7:0,
                 from include/linux/dma-mapping.h:10,
                 from /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:28:
include/linux/mm.h:1222:6: note: expected 'struct page **' but argument is of type 'int'
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:188:9: warning: passing argument 7 of 'get_user_pages' from incompatible pointer type [-Wincompatible-pointer-types]
         dma->pages, NULL);
         ^
In file included from include/linux/scatterlist.h:7:0,
                 from include/linux/dma-mapping.h:10,
                 from /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:28:
include/linux/mm.h:1222:6: note: expected 'struct vm_area_struct **' but argument is of type 'struct page **'
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:185:8: error: too many arguments to function 'get_user_pages'
  err = get_user_pages(current, current->mm,
        ^
In file included from include/linux/scatterlist.h:7:0,
                 from include/linux/dma-mapping.h:10,
                 from /home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.c:28:
include/linux/mm.h:1222:6: note: declared here
 long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
      ^
scripts/Makefile.build:291: recipe for target '/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.o' failed
make[3]: *** [/home/backend/Drivers/linux-tbs-drivers/v4l/videobuf-dma-sg.o] Error 1
Makefile:1454: recipe for target '_module_/home/backend/Drivers/linux-tbs-drivers/v4l' failed
make[2]: *** [_module_/home/backend/Drivers/linux-tbs-drivers/v4l] Error 2
make[2]: Leaving directory '/usr/src/linux-headers-4.4.0-143-generic'
Makefile:51: recipe for target 'default' failed
make[1]: *** [default] Error 2
make[1]: Leaving directory '/home/backend/Drivers/linux-tbs-drivers/v4l'
Makefile:26: recipe for target 'all' failed
make: *** [all] Error 2

Je suis fondamentalement en train de suivre une "recette" pour construire ces pilotes, donc je n'ai aucune idée du problème réel ni de la façon de le résoudre. Je ne sais pas s'il s'agit d'un bogue dans cette version particulière du noyau, ou si quelque chose a changé qui empêchera à jamais la reconstruction des pilotes. J'espérais que peut-être une personne gentille qui en sait beaucoup plus sur la construction à partir de la source que je ne pourrais peut-être me donner un indice sur ce qui se passe ici, et plus précisément, ce que je pourrais avoir besoin de faire pour y remédier. Faire des exécutions très bien et se termine sans erreurs lors de l'utilisation du noyau générique 4.4.0-142 précédent. Alors qu'est-ce qui a changé, je me demande?

6
UbuntuUser

Pour toute autre personne qui essaie de résoudre ce problème spécifique, un utilisateur qui utilise le pseudo CrazyCat a fourni correctifs/mises à jour des pilotes TBS qui résolvent ce problème . Il y a aussi un discussion de ce problème sur le forum TBS Driver & Software Update .

1
UbuntuUser

Ce qui a changé, c'est l'interface get_user_pages () du fichier mm.h. Cette modification du code du noyau de base (en janvier) a finalement progressé jusqu'à la version 4.4.0-143 du noyau Ubuntu. Cela a causé toutes sortes de problèmes aux pilotes Nvidia et à certains pilotes vm, mais ils ont été réécrits. D'autres pilotes, comme le vôtre ou le pilote audio HDMI de l'Intel Compute Stick dans oem-hdmi-audio-dkms_0.1_all.deb, peuvent ou non être réécrits. Fondamentalement, vous avez trois choix:

  1. Restez avec le noyau 4.4.0-142. Oubliez tous les futurs patchs du noyau - la série 4.4 est morte jusqu'à ce que votre pilote soit réécrit. Contactez le fournisseur de la carte à ce sujet, ils peuvent avoir un nouveau pilote.
  2. Réécrivez le pilote vous-même. Ce n'est peut-être pas trop mal, on dirait que cette interface a vu des changements dans le passé, et les actuels sont en train d'annuler certaines choses. N'essayez pas sauf si vous avez une certaine expérience du code du noyau. Peut-être embaucher un développeur tiers pour réparer le pilote, si la sécurité et l'utilisation de cette carte sont essentielles pour vous.
  3. Passez votre temps à chercher un noyau ultérieur avec prise en charge des pilotes. L'audio HDMI a été corrigé dans les noyaux ultérieurs, comme le 4.18, donc vous pouvez peut-être mettre à niveau le système d'exploitation/noyau. Encore une fois, vérifiez auprès du fournisseur de la carte, ils peuvent savoir quels noyaux ultérieurs ont un pilote de travail (le cas échéant) inclus.

Certaines machines se bloquaient quelque part, donc quelqu'un pensait que changer une interface du noyau LTS était acceptable. Je pense personnellement qu'ils avaient tort, mais qui dois-je dire. Cette modification était en amont de Canonical, donc elle est considérée comme une fonctionnalité, pas un bug, et il est peu probable qu'elle soit modifiée car certains anciens pilotes ne fonctionnent plus.

7
ubfan1