Passer aux informations sur le produit
Apprendre la structure et les principes du noyau Linux par le débogage 1
Apprendre la structure et les principes du noyau Linux par le débogage 1
Description
Introduction au livre
Ce qu'un développeur système Linux, débutant ou expérimenté (jusqu'à 5 ans d'expérience), doit savoir pour commencer.
Principaux sous-systèmes du noyau Linux !


Ce livre explique le noyau Linux de manière simple et conviviale, à l'image d'un développeur senior sympathique assis à côté d'un nouvel employé dans une situation de développement réelle, expliquant le noyau Linux en détail.
『Apprendre la structure et les principes du noyau Linux par le débogage 1』 analyse en détail la dernière version (LTS : 4.19) du code source du noyau Linux en suivant le flux de fonctions et explique les principes de fonctionnement du noyau en utilisant des outils de débogage tels que ftrace et TRACE32.
Il explique également comment modifier directement le code source du noyau Linux sur le Raspberry Pi, l'installer, puis déboguer le noyau.
Les méthodes de débogage du noyau présentées dans chaque chapitre peuvent être directement appliquées au développement pratique.
  • Vous pouvez consulter un aperçu du contenu du livre.
    Aperçu
","
indice
▣ Chapitre 1 : Introduction et perspectives pour Linux
1.1 Pourquoi devrais-je apprendre Linux et le noyau Linux ?
__1.1.1 Pourquoi devrais-je apprendre Linux ?
__1.1.2 Pourquoi devrais-je apprendre le noyau Linux ?
1.2 L'avenir de Linux
__1.2.1 Qu'est-ce qu'un système d'exploitation ?
__1.2.2 Quel système d'exploitation utilisons-nous ?
1.3 Histoire de Linux
__1.3.1 La naissance d'Unix
__1.3.2 1991 : L'ascension de Linus Torvalds
__1.3.3 Pourquoi Linux est-il si populaire ?
1.4 Où Linux est-il utilisé ?
__1.4.1 Android
1.4.2 Automobile
1.4.3 Dispositifs de l'Internet des objets (IdO)
1.5 Groupe de développement Linux embarqué
Communauté du noyau Linux __1.5.1
__1.5.2 Fournisseur de processeur
__1.5.3 Fournisseur de SoC
__1.5.4 Fournisseurs de cartes et équipementiers
1.6 Que dois-je savoir pour être bon en développement Linux embarqué ?
Pilote de périphérique __1.6.1
Noyau Linux __1.6.2
__1.6.3 Architecture du processeur
__1.6.4 Script de compilation et Git
1.7 Raspberry Pi et le noyau Linux
Carte de laboratoire Raspberry Pi __1.7.1
Version du noyau Linux __1.7.2
Version 1.7.3 de Raspbian
Architecture ARM __1.7.4
1.8 Résumé

▣ Chapitre 2 : Configuration du Raspberry Pi
2.1 Qu'est-ce que Raspberry Pi ?
2.2 Configuration du Raspberry Pi
__2.2.1 Préparation à la pratique du Raspberry Pi
__2.2.2 Installation du Raspberry Pi
__2.2.3 Paramètres de base du Raspberry Pi
2.3 Compilation du noyau Raspberry Pi
Version de Raspbian et version source du noyau __2.3.1
__2.3.2 Télécharger le code source du noyau Raspbian
Version 2.3.3 du noyau Linux Raspbian
__2.3.4 Installation du noyau Linux Raspbian
__2.3.5 Génération du code de prétraitement
__2.3.6 Structure du code source du noyau Linux
2.4 utilitaire binaire objdump
2.5 Précautions lors de l'utilisation du Raspberry Pi
2.6 Résumé

▣ Chapitre 3 : Débogage du noyau et apprentissage du code
3.1 Qu'est-ce que le débogage ?
3.1.1 Le débogage est un raccourci vers les compétences en résolution de problèmes
3.1.2 Compétences en débogage et en apprentissage du code
3.2 printk
3.3 Fonction dump_stack()
3,4 pieds de course
__3.4.1 Qu'est-ce que ftrace ?
__3.4.2 Comment configurer ftrace ?
__3.4.3 Comment analyser les messages ftrace ?
__3.4.4 Comment extraire les journaux ftrace ?
__3.4.5 ftrace est un guide d'analyse du code du noyau
3.5 La légende des débogueurs embarqués : TRACE32
3.6 Code du pilote Debugfs pour le débogage du noyau
3.7 Résumé

▣ Chapitre 4 : Processus
4.1 Introduction au processus
__4.1.1 Qu'est-ce qu'un processus ?
__4.1.2 Qu'est-ce qu'une tâche ?
__4.1.3 Qu'est-ce qu'un fil de discussion ?
4.2 Vérification du processus
4.2.1 Vérification de la liste des processus avec la commande ps
4.2.2 Vérification des processus dans ftrace
4.3 Comment créer un processus ?
4.3.1 Introduction à la fonction _do_fork()
4.3.2 Flux de traitement de la fonction _do_fork() lors de la création d'un processus au niveau utilisateur
4.3.3 Déroulement de la fonction _do_fork() lors de la création d'un processus noyau
4.4 Pratique d'exécution des processus au niveau utilisateur
4.4.1 Pratiques de base d'exécution des processus au niveau utilisateur et analyse des journaux ftrace
4.4.2 Arrêt du processus avec la fonction exit() et analyse du journal ftrace
4.5 Threads du noyau
__4.5.1 Qu'est-ce qu'un thread noyau ?
__4.5.2 Types de threads du noyau
__4.5.3 Comment créer un thread noyau ?
4.6 Processus de création des processus internes du noyau
__4.6.1 Fonction _do_fork()
4.6.2 Analyse de la fonction copy_process()
__4.6.3 Analyse de la fonction wake_up_new_task()
4.7 Analyse du processus de terminaison
4.7.1 Comprendre le flux de terminaison du processus
4.7.2 Analyse de la fonction do_exit()
4.7.3 Analyse de la fonction do_task_dead()
__4.7.4 Comportement après l'appel de la fonction do_task_dead()
4.8 Descripteur de tâche (structure task_struct)
4.8.1 Champs identifiant le processus
4.8.2 Sauvegarde de l'état du processus
4.8.3 Relations entre les processus
__4.8.4 Traitement de la liste chaînée
4.8.5 Informations sur la durée d'exécution du processus
4.9 Informations sur le thread : structure thread_info
__4.9.1 Quelle est la structure thread_info ?
4.9.2 Analyse de la structure thread_info
__4.9.3 Où se trouve l'adresse de la structure thread_info ?
4.9.4 Analyse détaillée des informations contextuelles
4.9.5 Analyse détaillée du domaine des processeurs
__4.9.6 Analyse du code d'initialisation de la structure thread_info
4.10 Fonctions macro pour accéder au descripteur de tâche d'un processus
__4.10.1 Quelle est la macro actuelle ?
4.10.2 Analyse de la fonction macro current_thread_info()
4.11 Débogage des processus
4.11.1 Débogage de la fonction fork() de glibc avec gdb
4.11.2 Suivi de l'exécution à l'aide des utilitaires Linux
4.12 Résumé

▣ Chapitre 5 : Interruptions
5.1 Introduction aux interruptions
__5.1.1 Qu'est-ce qu'une interruption ?
__5.1.2 Concepts clés des interruptions du noyau Linux
5.1.3 Pourquoi vous devez connaître les interruptions
5.1.4 Flux de traitement des interruptions dans le noyau Linux
5.2 Contexte d'interruption
__5.2.1 Qu'est-ce que le contexte d'interruption ?
5.2.2 Vérification du contexte d'interruption avec ftrace et le journal du noyau
__5.2.3 Qu'est-ce que la fonction in_interrupt() ?
__5.2.4 Que se passe-t-il lors de la planification dans un contexte d'interruption ?
5.3 Quand un gestionnaire d'interruption est-il appelé ?
5.3.1 Analyse vectorielle d'interruption
__5.3.2.
Vérifier l'empilement de la pile à partir du vecteur d'interruption
__5.3.3.
Analyse du flux d'appels d'un gestionnaire d'interruptions
5.4 Comment enregistrer un gestionnaire d'interruption ?
5.4.1 Analyse du processus d'enregistrement du gestionnaire d'interruptions
__5.4.2 Débogage du processus d'initialisation d'un gestionnaire d'interruptions
__5.4.3 Définition des indicateurs lors de l'enregistrement d'un gestionnaire d'interruption
5.5 Descripteur d'interruption
__5.5.1 Qu'est-ce qu'un descripteur d'interruption ?
__5.5.2 Comment stocker le nombre d'occurrences d'interruption ?
5.6 Quand faut-il désactiver les interruptions ?
5.7 Débogage par interruption
__5.7.1 /proc/interruptions
Événement d'interruption ftrace __5.7.2
5.7.3 Identification des fonctions de gestion des interruptions avec ftrace
5.8 Résumé

▣ Chapitre 6 : Interrompre le traitement de la seconde moitié
6.1 Quelle est la seconde moitié de la technique d'interruption ?
6.1.1 Raisons de l'application de la seconde partie de la technique d'interruption
__6.1.2 Que se passe-t-il si vous effectuez beaucoup de travail dans un contexte d'interruption ?
__6.1.3 Qu'est-ce que la moitié supérieure/moitié inférieure ?
6.1.4 Types de techniques de traitement de la seconde moitié par interruption
__6.1.5 Quelle technique de traitement de la seconde moitié de l'interruption dois-je appliquer ?
6.2 IRQ à threads
__6.2.1 Qu'est-ce qu'une IRQ ?
__6.2.2 Vérifier le thread IRQ
6.3 Comment créer un thread IRQ ?
__6.3.1 Quand un thread IRQ est-il créé ?
__6.3.2 Débogage du processus de création de threads IRQ sur Raspberry Pi
6.4 Qui exécutera le thread IRQ et quand ?
6.4.1 Analyse du code qui réveille le thread IRQ
6.4.2 Analyse de la fonction irq_thread(), le gestionnaire de threads IRQ
__6.4.3 Résumé du flux d'exécution complet du thread IRQ
6.5 Exercices de débogage des threads IRQ
6.5.1 Vérification du fonctionnement du thread IRQ à l'aide de ftrace
__6.5.2 Exercices de création de threads IRQ
__6.5.3 Mesure du temps d'exécution de la fonction de gestion des interruptions (IRQ)
6.6 Introduction aux interruptions logicielles
__6.6.1 Qu'est-ce que le service Soft IRQ ?
6.6.2 Flux global des interruptions logicielles
__6.6.3 Quand utiliser Soft IRQ comme technique de seconde moitié ?
__6.6.4 Pourquoi devrais-je connaître les interruptions logicielles (Soft IRQ) ?
6.7 Service d'interruption logicielle
__6.7.1 Service d'interruption logicielle
__6.7.2 Quand faut-il enregistrer un gestionnaire de service IRQ souple ?
__6.7.3 Exercice d'enregistrement d'un gestionnaire de service IRQ souple
6.8 Quand demander un service d'IRQ logicielle ?
6.8.1 Flux global des demandes de service d'interruption logicielle
__6.8.2 Analyse de la fonction raise_softirq()
6.8.3 Analyse de la variable globale irq_stat
__6.8.4 Comment vérifie-t-on si un service d'IRQ logicielle a été demandé ?
6.9 Qui gère le service Soft IRQ et quand ?
__6.9.1 Où se trouve le point d'entrée d'exécution du service Soft IRQ ?
6.9.2 Vérification de la demande de service d'interruption logicielle
6.9.3 Exécution du service Soft IRQ
__6.9.4 Réactivation du fil de discussion ksoftirqd
6.10 ksoftirqd thread
__6.10.1 Qu'est-ce qu'un thread ksoftirqd ?
__6.10.2 Quand le thread ksoftirqd sera-t-il réactivé ?
__6.10.3 Analyse de la fonction run_ksoftirqd() du gestionnaire ksoftirqd
6.11 À propos des contextes d'IRQ souples
__6.11.1 Où commence le contexte IRQ souple ?
__6.11.2 Quand un contexte IRQ souple démarre-t-il ?
6.11.3 Vérifier le contexte d'interruption logicielle
6.12 Tasklet
__6.12.1 Qu'est-ce qu'une tâche ?
__6.12.2 Structure des données de la tasklet
__6.12.3 Comment enregistrer une tâche ?
6.12.4 Comprendre le flux d'exécution complet d'une tâche
__6.12.5 Comment demander l'exécution d'une tâche ?
__6.12.6 Quand une tâche doit-elle être exécutée ?
6.13 Débogage des interruptions logicielles
__6.13.1 Présentation de l'événement Soft IRQ de ftrace
__6.13.2 Vérification du nombre d'exécutions du service Soft IRQ à l'aide de /proc/softirqs
6.14 Résumé

▣ Chapitre 7 : File d'attente pour le travail
7.1 Introduction à la file d'attente de travail
7.1.1 Concepts clés des files d'attente de travail
7.1.2 Caractéristiques de la file d'attente de travail
7.1.3 Comparaison des files d'attente de travail avec d'autres techniques d'interruption tardive
7.1.4 Processus de conception de la seconde moitié du code d'interruption à l'aide de la file d'attente de travail
7.1.5 Pourquoi il est important de bien connaître la file d'attente des tâches
7.2 Types de files d'attente de travail
7.2.1 Analyse de la fonction alloc_workqueue()
__7.2.2 7 Files d'attente de travail
7.3 Qu'est-ce que le travail ?
__7.3.1 structure de travail
__7.3.2 Comment initialiser un travail ?
7.4 Comment mettre du travail en file d'attente dans une file d'attente de travail ?
__7.4.1 Examinons un exemple de code pour mettre du travail en file d'attente dans une file d'attente de travail.
7.4.2 Le processus de mise en file d'attente des tâches dans une file d'attente de travail, dans le diagramme de flux global de la file d'attente de travail
7.4.3 Analyse de la fonction d'interface qui met le travail en file d'attente
__7.4.4 Analyse de la fonction __queue_work()
7.4.5 Analyse des fonctions internes de la file d'attente de travail appelées par la fonction __queue_work()
7.5 Qui dirige les travaux et quand ?
7.5.1 Analyse de la fonction worker_thread(), point de départ de l'exécution du travail
7.5.2 Analyse de la fonction process_one_work()
7.6 Qu'est-ce qu'un thread de travail ?
__7.6.1 Travailleurs et threads de travail
__7.6.2 Structure des travailleurs
__7.6.3 Qui crée les threads de travail et quand ?
7.6.4 Analyse de la fonction create_worker() qui crée un thread de travail
7.6.5 Analyse de la fonction noyau de la file d'attente de travail appelée dans la fonction create_worker()
__7.6.6 Analyse de la fonction worker_thread()
7.7 Exercices et débogage de la file d'attente
Événement de file d'attente ftrace __7.7.1
7.7.2 Vérification du fonctionnement de WorkQ à l'aide de ftrace sur Raspberry Pi
7.7.3 Interrompre la pratique du traitement de la seconde moitié et l'analyse des journaux
7.8 Retarder la marche
__7.8.1 Qu'est-ce que la marche différée ?
7.8.2 Flux global des travaux retardés
__7.8.3 Comment initialiser le travail de délai ?
__7.8.4 Quel est le point de départ de l'exécution de la marche différée ?
__7.8.5 Qui mettra en file d'attente le travail en retard et quand ?
7.9 Création d'une marche à retardement sur un Raspberry Pi
7.9.1 Contenu et méthode d'écriture du code de correctif
__7.9.2 Paramètres de journalisation ftrace
__7.9.3 Analyse des journaux ftrace
7.10 Résumé
","
Image détaillée
Image détaillée 1
","
Avis de l'éditeur
Il couvre les principaux sous-systèmes du noyau Linux que tout développeur, qu'il soit débutant ou expérimenté (jusqu'à cinq ans d'expérience), doit connaître pour démarrer !

Ce livre explique le noyau Linux de manière simple et conviviale, à l'image d'un développeur senior sympathique assis à côté d'un nouvel employé dans une situation de développement réelle, expliquant le noyau Linux en détail.
Ce livre analyse en détail le code source du noyau Linux de la dernière version (LTS : 4.19) en suivant le flux de fonctions et explique les principes de fonctionnement du noyau en utilisant des outils de débogage tels que ftrace et TRACE32.
Nous expliquons également comment installer le noyau Linux en modifiant directement son code source sur le Raspberry Pi, puis comment déboguer ce noyau.
Les méthodes de débogage du noyau présentées dans chaque chapitre peuvent être directement appliquées au développement pratique.

▣ [Partie 1] Débogage du noyau (ftrace), Processus, Interruptions, Deuxième partie des interruptions, File d'attente de travail

Nous allons tout d'abord vous expliquer comment utiliser ftrace et comment déboguer le noyau.
Il décrit le processus d'exécution du noyau et les principes de fonctionnement détaillés de la manière dont le noyau gère les interruptions.
Nous aborderons les threads IRQ (IRQ multithread) qui gèrent la seconde moitié des interruptions, la technique Soft IRQ et la file d'attente de travail qui gère la seconde moitié dans le noyau.

▣ [Partie 2] Minuteurs, synchronisation, planification, appels système, signaux, systèmes de fichiers virtuels et gestion de la mémoire

Couvre les principes de fonctionnement et les techniques de synchronisation (verrous d'attente active, mutex) de la manière dont le noyau gère le flux temporel.
Il explique en détail la mise en œuvre de la planification, qui gère le flux d'exécution de plusieurs processus, et comment les appels système et les signaux sont traités dans le noyau.
Il explique comment le noyau gère la mémoire et le système de fichiers virtuel qui permet à différents systèmes de fichiers de coexister et de fonctionner.


L'annexe détaille comment utiliser la liste de diffusion du noyau Linux et comment contribuer à ce dernier.
"]
SPÉCIFICATIONS DES PRODUITS
- Date de publication : 12 mai 2020
Nombre de pages, poids, dimensions : 708 pages | 1 350 g | 188 × 240 × 29 mm
- ISBN13 : 9791158391980
- ISBN10 : 1158391986

Vous aimerez peut-être aussi

카테고리