J'ai un bogue dans un module de noyau Linux qui provoque le blocage du noyau Ubuntu 14.04 d'origine (plantage).
C'est pourquoi je veux éditer / patcher la source de ce module de noyau uniquement pour ajouter une sortie de débogage supplémentaire. Le module de noyau en question est mvsas
et n'est pas nécessaire de démarrer. Pour cette raison, je ne vois pas la nécessité de mettre à jour les images initrd.
J'ai lu beaucoup d'informations (comme indiqué ci-dessous) et trouve la confusion dans les processus d'installation et de construction. J'ai besoin de deux recettes:
- installer / configurer l'environnement de construction une fois
- les étapes à faire après avoir édité n'importe quel fichier source de ce module de noyau (
.c
et.h
) et converti cette édition en un nouveau module de noyau (.ko
)
Les sources utilisées sont:
- construire un module de noyau - Recherche Google
- http://www.linuxquestions.org/questions/linux-kernel-70/rebuilding-a-single-kernel-module-595116/
- https://stackoverflow.com/questions/8744087/how-to-recompile-just-a-single-kernel-module
- http://www.pixelbeat.org/docs/rebuild_kernel_module.html
- Comment construire un seul module de noyau dans l'arborescence?
- http://ubuntuforums.org/showthread.php?t=1153067
- http://ubuntuforums.org/showthread.php?t=2112166
- http://ubuntuforums.org/showthread.php?t=1115593
- construire un module de noyau ubuntu - Recherche Google
- 'make + single + kernel + module' - Demandez à Ubuntu
- 'make + kernel + module' - Demandez à Ubuntu
- Les résultats de mon makefile sont les suivants: Aucune règle pour rendre la cible 'arch / x86 / tools / relocs.c' nécessaire
- '"Format de module invalide"' - Ask Ubuntu
- Installation du pilote: compilation du code source pour le nouveau noyau
- Modprobe: "Format de nodule non valide", mais fonctionne après insmod
- "Version de symbole" "est manquant" - Recherche Google
- https://stackoverflow.com/questions/9425523/should-i-care-that-the-symbol-version-dump-is-missing-how-do-i-get-one
- https://askubuntu.com/questions/369051/where-can-i-find-the-corresponding-module-symvers-and-config-files-for-ubutunu
- "pas de version de symbole pour module_layout" lors d'une tentative de chargement de usbhid.ko
- Liens rompus dans le dossier du fichier d'en-tête Linux
- 'make modules_install' - Demandez à Ubuntu
- 'modules_install' - Demandez à Ubuntu
- Répertoire de construction vide dans le noyau compilé personnalisé
- https://askubuntu.com/questions/444345/not-able-to-see-pr-info-output
- https://askubuntu.com/questions/472496/in-which-directory-are-the-kernel-source-files-and-how-can-recompile-it
- Comment puis-je compiler et installer ce fichier libata-eh.c corrigé?
- 'modules_install + depmod' - Ask Ubuntu
- modules_install depmod - Recherche Google
- "make modules_install" - Recherche Google
- http://www.csee.umbc.edu/courses/undergraduate/CMSC421/fall02/burt/projects/howto_build_kernel.html
- https://unix.stackexchange.com/questions/20864/what-happens-in-each-step-of-the-linux-kernel-building-process
- https://wiki.ubuntu.com/KernelCustomBuild
- http://www.cyberciti.biz/tips/build-linux-kernel-module-against-installed-kernel-source-tree.html
- http://www.linuxforums.org/forum/kernel/170617-solved-make-modules_install-different-path.html
- "make prepare" - Recherche Google
- "make prepare" "scripts / kconfig / conf --silentoldconfig Kconfig" - Recherche Google
- http://ubuntuforums.org/showthread.php?t=1963515
- ubuntu "make prepare" version - Recherche Google
- https://stackoverflow.com/questions/8276245/how-to-compile-a-kernel-module-against-a-new-source
- https://help.ubuntu.com/community/Kernel/Compile
- Comment compiler un module de noyau?
- Comment ajouter un pilote personnalisé à mon noyau?
- https://askubuntu.com/questions/426549/compile-and-loading-kernel-module-without-compiling-the-kernel
Réponses:
La recette pour construire un module personnalisé devra peut-être être divisée en trois sections.
Configuration une fois
Je suis trop paresseux pour copier les fichiers source du pilote spécifique à MVSA; copiez-les simplement dans votre répertoire de travail actuel. Si le
apt-get
résultat est un message d'erreur concernant les adresses URI sources manquantes, reportez-vous à la note 4 au bas de la page.Cela préparera certains fichiers nécessaires à la construction d’un module de noyau.
Chaque version du noyau
Cela installera les en-têtes et le fichier de configuration du noyau Ubuntu pour cette version du noyau dans / lib / modules.
Ceci évite le message " pas de version de symbole pour module_layout " lors du chargement du module avec insmod ou modprobe.
Ceci renommera le module de noyau d'origine (version Ubuntu) pour s'assurer que le correctif personnalisé sera chargé.
Chaque édition
Ce sont pour les modifications.
Ceci compilera et construira le
.ko
fichier de module du noyau en utilisant la configuration du noyau de votre distribution stock Ubuntu telle que stockée dans/lib/modules/$(uname -r)/
.Cela installera le module de noyau dans
/lib/modules/$(uname -r)/extra/
, sans écraser le module de distribution au cas où vous n'auriez pas renommé le fichier du module de noyau de distribution. Dans ce cas, il utilisera également depmod .S'il en résulte une sortie, le module mvsas doit d'abord être déchargé avec (
modprobe -r mvsas
).Cela devrait charger le nouveau module de noyau.
Vérifiez la sortie pour vérifier que le
/lib/modules/.../extra/mvsas.ko
chargement est en cours.Erreur Modprobe: impossible d'insérer
Dans certains cas, vous remarquerez peut-être un
modprobe: ERROR: could not insert 'xyz': Unknown symbol in module, or unknown parameter (see dmesg)
moment dans la sortie de test modulaire modérée quiinsmod
tente de charger le module à partir de l'emplacement par défaut du noyau. Par exemple:Dans ce cas, vous devez exécuter manuellement depmod et essayer de charger le module à nouveau:
Remarques
.ko
fichiers de module résultants soient beaucoup plus volumineux (par exemple 20 fois) que les fichiers de module originaux distribués par Ubuntu; dans ce cas, l'make prepare
étape aurait pu créer un fichier de configuration du noyau pour le débogage des développeurs Linux et vous construisez à partir du répertoire source. Votre-C
param peut ne pas fonctionner comme prévu.make modules_prepare
etmake M=scripts/mod
mais je ne pense pas qu'elles soient nécessaires dans ce cas.-C /lib/modules/$(uname -r)/build
par-C /usr/src/linux-headers-$(uname -r)
apt-get source linux-sources
renverra une erreurE: You must put some 'source' URIs in your sources.list
. Pour résoudre ce problème, vous pouvez modifier le fichier/etc/apt/sources.list
en supprimant la mise en commentaire#
de la premièredeb-src
ligne. Exemple pour Ubuntu 17.10:deb-src http://ie.archive.ubuntu.com/ubuntu/ artful main restricted
. exécutezsudo apt-get update
, puis la commande fournira des sources pour vous. Voir aussi cette question où une méthode graphique est décrite.la source
$(uname-r)
est apparemment faux ... Vous devez appeler leshell
pré-programmé:$(shell uname -r)
$(shell uname -r)
cela ne fonctionne pas . Pourquoi est$(uname -r)
si apparemment faux?echo "search extra built-in" | sudo tee /etc/depmod.d/00-extra.conf
pour quedepmod
le fichier nouvellement mis à jour soit visible.../extra
.