27
Cours 7 Master 2 SE Jalil Boukhobza Université de Bretagne Occidentale – LabSTICC J.Boukhobza - Systèmes d'exploitation embarqués 1

Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

  • Upload
    ngohanh

  • View
    221

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Cours 7 ‐Master 2 SEJalil Boukhobza

Université de Bretagne Occidentale – Lab‐STICC

J.Boukhobza - Systèmes d'exploitation embarqués 1

Page 2: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Plan1. Introduction et vue globale2. Le BIOS3. Le 1er chargeur d’amorçage4. Le 2ème chargeur d’amorçage5. Le noyau

J.Boukhobza - Systèmes d'exploitation embarqués 2

Page 3: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

IntroductionPlupart des opérations de démarrage sur un pc basé sur x86 ou un système embarqué avec (par ex) un PowerPC  similaireDu bootstrap lancement de la première applicationAu fait, c’est quoi un bootstrap ?

bootstrap /?/ (source: Wikitionnaire): languette fabriqué en cuir (ou dans une autre matière) qui est cousue sur certaines bottines pour pouvoir les enfiler plus facilement.

En ce qui nous concerne: un petit programme qui charge un grand programme et qui lui donne le contrôle.Dans le passé, le démarrage d’un ordinateur signifiait: fournir une bande perforée contenant les instructions du programme de démarrage… 

J.Boukhobza - Systèmes d'exploitation embarqués 3

bootstrap

Page 4: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Vue globale

J.Boukhobza - Systèmes d'exploitation embarqués 4

Démarrage 

Chargeur de boot étape1

Chargeur de boot étape2

Noyau

Init

Mise sous tension ou redémarrage

Mise en service

BIOS / BootMonitor

MBR (Master Boot Record)

LILO, GRUB, …

Linux

Espace utilisateur

Page 5: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Vue globale (2)1. Au démarrage, le processeur exécute du code dans une adresse fixe (sur un PC: 

celle du BIOS ou Basic Input Output System)Stocké dans une ROM sur les cartes mèreDans un système embarqué (sans OS), est exécutée la première instruction d’un programme à une adresse connue de la mémoire flash/ROM.

2. Quand un périphérique sur lequel on peut démarrer est trouvé (par le BIOS)3. Premier chargeur d’amorçage est chargé en RAM (au plus 512 octets: un 

secteur). Son rôle? … charger le 2ème prg de démarrage !!4. 2ème chargeur d’amorçage chargé en RAM et exécuté5. Noyau Linux et initrd (sys de fichiers temporaire) sont chargés6. Une fois les principaux périphériques montés et modules chargés par le 2ème

chargeur, puis le noyau chargé :Démarrage du premier prg de l’espace utilisateur (init), initialisation haut niveau est faite.

J.Boukhobza - Systèmes d'exploitation embarqués 5

Page 6: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Démarrage du systèmeSur une plateforme embarqué:

Utilisation d’un bootstrap:U‐BootRedBootMicro Monitor

Ce programme réside dans une zone spéciale de la mémoire flash et fournit un moyen pour :1. Effectuer les tests d’initialisation du matériel2. Charger une image du noyau et l’exécuter

Sur un ordinateur PC:Après un reset du CPU, le démarrage commence à l’adresse 0xFFFF0 (qui est une instruction de jmp vers le début du BIOS)

Le BIOS réalise le POST (Power On Self Test): détecter et vérifier que le  matériel présent fonctionne proprement.Construction des tables de description du matériel suivant la norme ACPI (Advanced  Configuration and Power Interface) pour qu’elles soient utilisées par la suite par l’OS

Initialiser les périphériques locaux, s’assurer qu’il n’y  pas de conflit d’IRQ et de ports d’E/S

J.Boukhobza - Systèmes d'exploitation embarqués 6

Page 7: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Le BIOSConçu en 2 parties:

POST: une fois fini, nettoyé de la mémoireFonctions/routines utilitaires: restent disponibles … le système chargé en aura besoin

Le BIOS utilise le mode réel du processeur et adresse directement la mémoire physique (num segment et offset / pas de pagination: LDT et GDT initialisés par la suite)Routine du BIOS cherche un périphérique actif et démarrable (disquette, CDROM, partition de disque, réseau, clé USB)  plus souvent disque dur  et copie les 512 octets à l’@ 0x00007c00 puis fait un saut à cette adresse:

MBR (Master Boot Record): premier secteur du disque; tête 0, cylindre 0, secteur 1.MBR contient le premier chargeur d’amorçage (512 octets)Une fois que le MBR est chargé en RAM, le BIOS lui donne le contrôle.

J.Boukhobza - Systèmes d'exploitation embarqués 7

Page 8: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

AstucePour voir le contenu du MBR:

# dd if=/dev/hda of=mbr.bin bs=512 count=1

# od –x mbr.bin

À vérifier en TP.

J.Boukhobza - Systèmes d'exploitation embarqués 8

Page 9: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Le chargeur d’amorçageCopié par le BIOS à l’@ 0x7c00 et contient:

Un programme de chargementUne petite table de partitionsUn nombre magique

J.Boukhobza - Systèmes d'exploitation embarqués 9

Chargeur d’amorçage (bootloader)

Table de partition

Nbr magique

446 octets

64 octets

2 octets

Partition 1Partition 2Partition 3Partition 4

Partition flag Start CHS Partition 

byte End CHS Start LBA size

Page 10: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Le chargeur d’amorçage (2)Les 446 premiers octets contiennent le premier chargeur d’amorçage:

Code exécutable et messages d’erreurs64 octets: table des partitions

16 octets par partition (primaire ou étendue): 4 partitions maxPartition primaire: partition pouvant contenir la partition d’amorçage d’un OS.Partition étendue: le but est d’outre passer la limite des 4 partitions 

plusieurs lecteurs logiques peuvent être crées2 octets: nombre magique 0xAA55 permettant de vérifier si le MBR est correct (délimiteur de fin de MBR)

http://www.geocities.com/thestarman3/asm/mbr/index.html#DT

J.Boukhobza - Systèmes d'exploitation embarqués 10

Page 11: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Partitions (quelques notions sur les disques)

Standard ATA: 65536 cylindres, 16 têtes et 256 secteursSeul le contrôleur du disque connait l’architecture exacte de ce dernier.Méthode d’adressage CHS (Cylinder, Head, Sector)Accès du BIOS au disque via une ISR (Interrupt Service Routine)  INT 13hNorme BIOS IBM (1981) (INT13h toujours la même): 1024 cylindres/256 têtes/63 secteurs

Plus petit dénominateur commun entre les 2 normes: 504MO !!!

J.Boukhobza - Systèmes d'exploitation embarqués 11

Page 12: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Quelques notions sur les disques (2)

ECHS (Enhanced CHS) … permet l’accès à des partition d’au max 7,8 GO (taille de partition max sous WinNT)LBA (Logical Block Addressing): numéro de secteur

Initialement utilisé pour les disques SCSILBA = C*H*S64 bitsUtilisation de l’INT13h et donc pas de gain par rapport à l’espace disque !

Toujours bloqué à 8GO

J.Boukhobza - Systèmes d'exploitation embarqués 12

Page 13: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Quelques notions sur les disques (3)

Extension BIOSExtension de l’INT13h

Permet l’utilisation des 64bits du LBA ! (pas de pb de taille pour un bout de temps !)

Accès direct au disque: Plus de passage par le BIOS pour accéder au disque: plus rapide !

J.Boukhobza - Systèmes d'exploitation embarqués 13

Page 14: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Retour au MBR: table de partitions Offset Taille (octets) Contenu462 1 Partition amorçable ou pas463 1 Tête/head de début de partition. 0 to 255.464 6 LSB Secteur physique de début de partition. 1 to 63 (0 invalide).465 1 + 2 MSB of 464 Cylindre de début. 0 to 1023.

466 1

Identifiant du système de fichiers de la partition

•01 DOS FAT‐12•02 XENIX root file system•03 XENIX /usr file system•04 DOS FAT‐16 (up to 32M)•05 DOS Extended•06 DOS FAT‐16 (up to 2G)•07 Windows NT NTFS•08 OS/2 (v1.0‐1.3 only)•09 AIX data partition•0B Windows 95 FAT‐32•63 Unix SysV/386•81 Linux•82 Linux Swap partition•83 Linux (ext2fs/xiafs)•:

467 1 Tête de fin de partition. 0 to 255468 6 LSB Secteur physique de fin de partition. 1 to 63 (0 valeur invalide)469 1 + 2 MSB of 468 Cylindre de fin de partition. 0 to 1023470 4 Numéro logique de secteur de début474 4 Nombre de secteurs

J.Boukhobza - Systèmes d'exploitation embarqués 14

Page 15: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Chargeur d’amorçage (3)Localise et charge le 2ème chargeur d’amorçage

Regarde à travers la table des partitions celles qui sont marquées comme actives en utilisant l’INT13hLorsqu’il en trouve une active, il examine quand même les autres partitionsLorsque la vérification est terminée, l’enregistrement actif (secteur de boot du système de fichiers) de la partition est chargé en RAM puis exécuté par le CPU.

J.Boukhobza - Systèmes d'exploitation embarqués 15

Page 16: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

2ème chargeur d’amorçagePourrait être appelé le chargeur du noyau

Charge, effectivement, le noyau LinuxEt optionnellement le RAM Disk initial (initrd)

Sous linux, la 1ère et 2ème chargeur d’amorçage:LInux Loader (LILO)

Permet de charger un noyau à partir de secteurs brutsInstallé sur le MBR et/ou sur le secteur d’amorçage de chaque partitionInvoque une procédure BIOS pour afficher un message de « chargement »Invoque une procédure de BIOS pour charger la portion initiale  de l’image du noyau à partir du disque à l’@ 0x00090000Invoque une procédure du BIOS pour charger le reste du noyau dans la RAM à l’adresse:

0x00010000  pour les petits noyaux (zimage)0x00100000  pour les gros noyaux (bzimage)

J.Boukhobza - Systèmes d'exploitation embarqués 16

Page 17: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

GRUB (GRand Unified Bootloader)Permet de charger un noyau depuis un système de fichier ext2 ou ext3Utilisation de 2 niveaux de chargement parmi 3

Le 1er niveau, MBR, démarre un niveau intermédiaire (1,5) qui peut utiliser un système de fichiers particulier sur lequel le noyau se situe (ex: niveau 1 charge reiserfs_stage1_5 si le noyau se trouve dans une partition reiser fs)Quand le niveau intermédiaire est chargé, le 2ème programme peut être chargé2ème niveau:

Affichage de la liste des noyaux dispo (/etc/grub.conf). Système de fichiers consulté et l’image du noyau par défaut ainsi que initrd (optionnel) sont chargés en mémoire .Quand les images sont prêtes, le 2ème programme invoque l’image du noyau.

J.Boukhobza - Systèmes d'exploitation embarqués 17

Page 18: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

GRUB & LILOExemple GRUB

/boot/menu.lst... title Kernel 2.6.7, test kernelroot (hd0,0) kernel /boot/bzImage-2.6.7-mytestkernel root=/dev/hda1 ro

title: label pour le setuproot: qui sélectionne comme lecteur racine le hd0, partition 0.kernel: spécifie l’emplacement du noyau à charger ainsi que certains paramètres passés pendant l’amorçage

Exemple LILO/etc/lilo.confimage=/boot/bzImage-2.6.7-mytestkernellabel=Kernel 2.6.7, my test kernelroot=/dev/hda6 read-only

J.Boukhobza - Systèmes d'exploitation embarqués 18

Page 19: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

La différence ?LILO sauvegarde les informations concernant la configuration dans le MBR, si changement il y a sbin/lilo doit être exécuté pour mettre à jour le MBRLILO ne peut lire plusieurs systèmes de fichiers et donc ne peut utiliser des « fichiers » pour le démarrageLILO n’a pas de ligne de commande interactive.

J.Boukhobza - Systèmes d'exploitation embarqués 19

Page 20: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Le noyauNoyau exécutable compressé dans une image

zImage: image compressée faisant moins de 512kobzImage: image compressée faisant plus de 512ko

Au début du noyau se trouve une routine qui:dresse une liste minimale de la configuration matérielle (malgré le fait que cela a déjà été fait par le BIOS)décompresse le noyau contenu dans l’imagele place en « haute mémoire »si un initrd est présent, la routine le place en mémoire (pour une utilisation ultérieure)

J.Boukhobza - Systèmes d'exploitation embarqués 20

Page 21: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Plus précisément … startSur les systèmes ACPI‐compliant, une table décrivant la cartographie de la mémoire physique est construite en RAMInitialise le clavier (ex: pression lllllllongue sur une touche)Initialisation de la carte graphiqueRéinitialisation du contrôleur de disque et des paramètres du disqueVérification des la présence d’une souris PS/2Vérification de la présence du support BIOS pour l’APM (Advanced Power Management)…Déplacement du noyau zImage à l’adresse 0x00100000 pour la décompressionReset de l’unité  FPU (Floating Point Unit)…Passe le processeur du mode réel au mode protégéPasse à la fonction suivante … startup_32( )

J.Boukhobza - Systèmes d'exploitation embarqués 21

Page 22: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

startup_32()arch/i386/boot/compressed/head.SInitialise les registres de segmentation et la pile (temporaire)Initialisation de certaines données (symboles) du noyau (mise à zéro)Invoque la fonction decompress_kernel( )pour décompresser l’image du noyauCette phase se traduit par l’affichage de "UncompressingLinux..." au début, puis "O K, booting the kernel.” une fois fini.L’image du noyau décompréssée est placée à l’adresse0x00100000

J.Boukhobza - Systèmes d'exploitation embarqués 22

Page 23: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

startup_32() arch/i386/kernel/head.S

Initialisation des registres de segments avec leur valeurs finalesRemplis/initialise le segment bss du noyau avec des  zérosInitialise la table de pages du noyauStockage de l’adresse du répertoire global de page PGD (reg cr3) et active la paginationActivation de la pile du noyau (processus 0)…Identification du processeurChargement des registres gdtr et idtr avec les adresses des GDT et IDT.Saut à la fonction (processus 0) start_kernel()

J.Boukhobza - Systèmes d'exploitation embarqués 23

Page 24: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

start_kernel()À peu près tous les composants noyau sont initialisé via cette 

fonctionsL’ordonnanceur est initialisé (invocation de sched_init( ))Le zonage de la mémoire est initialisé: build_all_zonelists( )Initilisation du système d’allocation de pages (Buddy): page_alloc_init( ) et mem_init( )L’horloge du système est initialisée: time_init( ) L’allocateur de slab est initialisé: kmem_cache_init( )Le thread noyau pour le processus 1 est crée par l’appel de kernel_thread( ). Ce thread noyau crée les autres threads du noyau et exécute le programme /sbin/init… fenêtre de connexion.

J.Boukhobza - Systèmes d'exploitation embarqués 24

Page 25: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

Le noyau (résumé)Point d’entrée du noyau: routine assembleur start() initialisation basique du matérielstartup_32(): met en place un environnement basique (pile..) et nettoie le bss.Le noyau est ensuite décompressé (fonction C decompress_kernel())Appel à une autre fonction startup_32

Tables de pages initialiséesPagination activéeDétection du CPU et du  FPU

Appel à la fonction start_kernel()(processus swapper)

Initialise les structures du noyauExecute sbin/init … processus 1 (init)

J.Boukhobza - Systèmes d'exploitation embarqués 25

Source http://www.ibm.com/developerworks/linux/library/l-linuxboot/index.html

./arch/i386/boot/setup.S

Page 26: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

initrdChargé en mémoire par le 2ème programme puis copié en RAM et montéSystème de fichiers principal temporaire en RAMPermet au noyau de démarrer sans avoir monté de disque physiquePermet la généricité par rapport à un ensemble d’architecture en y stockant l’ensemble des modules chargeables au démarrage de linuxAprès que le noyau soit démarré, le système de fichiers est chargé via un appel à pivot_root démontage d’initrd et montage du vrai système de fichiers.On peut créer de tout petits noyaux avec des pilotes de périphériques implémentés avec des modules chargeables à la demande … grâce à initrdSur un système embarqué, initrd peut être le système de fichiers principal ! (pas de disque)

J.Boukhobza - Systèmes d'exploitation embarqués 26

Page 27: Cours 7 Master 2 SE Université Bretagne Occidentale STICCsyst.univ-brest.fr/boukhobza/images/stories/Documents/Teachings/... · Introduction y Plupart des opérations de démarrage

initPremier programme de l’espace utilisateur écrit en C standardDans /sbin/initConfiguration de l’init dans /etc/inittabDans les systèmes embarqués, toute l’initialisation que l’on trouve dans init n’est pas obligatoire, un script shell peut être suffisant.

J.Boukhobza - Systèmes d'exploitation embarqués 27