24 | | This section describes successively the ALMOS-MKH boot loader for the TSAR architecture, the ALMOS-MKH boot loader for the |
25 | | I86 architecture, and the generic ALMOS-MKH kernel initialization procedure. |
| 21 | To build the various boot_info_t structures (one per cluster), the boot-loader uses the '''arch_info_t''' binary structure, that is described in |
| 22 | section [wiki:arch_info Hardware Platform Definition]. This binary structure is contained in the '''arch_info.bin''' file, and must be stored |
| 23 | in the file system root directory. |
| 24 | |
| 25 | This method allows -in principle - the boot_loader to check and reconfigure the hardware components, to guaranty that the generated boot_info_t structures contain only functionally tested hardware components. |
| 26 | |
| 27 | We describe below the boot_loader for the TSAR architecture, the boot_loader for the I86 architecture, and the generic kernel initialization procedure. |
| 34 | The TSAR boot_loader allocates - in each cluster containing a physical memory bank - five fixed size memory zones, to store various |
| 35 | binary files or data structures : |
| 36 | || || size || local physical address || |
| 37 | || préloader code itself || 16 Kb || 0x0 || |
| 38 | || boot-loader code local copy || 1 Mb || 0x100000 || |
| 39 | || arch_info.bin file local copy || 2 Mb || 0x200000 || |
| 40 | || kernel.elf binary file || 1 Mb || 0x400000 || |
| 41 | || execution stacks (one per core) || 1 Mb || 0x500000 || |
33 | | the shared resources (such as the récupère les informations décrivant les caractéristiques de la plateforme matérielle (nombre de clusters, nombre de coeurs par cluster, périphériques disponibles, ciblage des interruptions, etc.) dans le fichier binaire '''arch_info.bin'''. Il utilise pour construire - dans chaque cluster - la structure de données '''boot_info_t''', utilisée par l'instance locale du noyau ALMOS-MK, et décrivant les composants matériels disponibles dans le cluster, ainsi que les caractéristiques générales de la plateforme. Cette structure est rangée au début du segment de données '''kdata''' du noyau et est utilisée - dans caque cluster - par la fonction '''kernel_init()'''. Ces informations en entrée et en sortie du boot-loader peuvent sembler redondantes mais cette traduction (arch-info -> boot_info) permet - en principe - au boot-loader de vérifier le bon fonctionnement de la plateforme matérielle et de détecter les pannes dues au vieillissement du matériel. Dans cette approche, les structures '''boot_info_t''' générées par le boot-loader ne contiennent que les composants matériels effectivement utilisables par le noyau. Cette vérification/reconfiguration n'est pas implémentée. |
| 43 | In each cluster hosting one kernel instance, the physical memory must contain at least 6 Mbytes. |
| 44 | All the values are configuration parameters, that can be redefined in the '''boot_config.h''' file. |
| 45 | This memory is only used for temporary storage : when the boot_loader completes, and transfer control to the kernel_init procedure, |
| 46 | the kernel code (i.e. the code and data segments) has been copied at physical address 0x4000 in all clusters. |
| 47 | The four pages (16 Kbytes) reserved for the prelloader are only used in cluster 0 and can be saved if the preloader is stored in an external ROM. |
35 | | Par convention, on définit - dans chaque cluster - des zones de mémoire physique de longueur fixe pour les différents fichiers binaires et/ou structures de données utilisés pendant le démarrage du système. |
36 | | * Pour le code du pré-loader : une zone de '''16 Ko''', à partir de l'adresse 0x0. |
37 | | * Pour le code du boot-loader: une zone de mémoire physique de '''1Mo''', à partir de l'adresse 0x100000. |
38 | | * Pour le fichier binaire '''arch_info.bin''': une zone de mémoire physique de '''2Mo''', à partir de l'adresse 0x200000. |
39 | | * Pour le code du noyau: une zone de '''1Mo''', à partir de l'adresse 0x400000. |
40 | | * Pour les piles d'exécutions des cores: une zone mémoire de '''1Mo''', à partir de l'adresse 0x500000. |