{{{ #!html

Construction d'un OS pour système embarqué

}}} [[PageOutline]] == Objectif du module == L'objectif de ce module est d'analyser en détail le fonctionnement d'un système d'exploitation pour système embarqué. Le cours rappelle brièvement les principaux concepts des systèmes d'exploitation, puis détaille l'implémentation d'un système d'exploitation spécifique pour des architectures matérielles de type SOC (system on chip), c'est à dire constituées d'un ou plusieurs processeurs 32 bits, de mémoire embarquée, et de différents contrôleurs de périphériques mappés en mémoire. On vise donc des systèmes embarqués autonomes capables de contrôler un équipement industriel. Le cours est organisé autour de la réalisation pratique d'un OS embarqué multi-tâches compatible POSIX. Les TME consistent à écrire, à partir de rien ou presque, les différents composants du système d'exploitation. Celui-ci est mis au point en simulation sur un SOC modélisé en SystemC en utilisant la plate-forme de modélisation SoCLib, et composé de 4 processeurs mips32, d'une mémoire, d'un timer, d'un multi-tty (terminal), d'un contrôleur video, d'un contrôleur de disque et d'un dma. La progression que vous allez suivre : * Un noyau d'OS qui virtualise le processeur, sans communication entre les taches, sans partage de devices mais avec une HAL. * Ajout des communication intertaches, partage de devices: mécanisme de file d'attente et événements. * user land : ABI kernel (liste des syscall) + phthread + dietlibc + compilation séparée. La figure et le tableau ci-après représentent l'architecture du SOC et le placement des mémoires et périphériques dans l'espace d'adressage physique. [[Image(plateforme.png,480px,nolink)]] {{{ #!html
Périphériques Segments dans la ROM Segments dans la RAM
TIMER_BASE 0xd3200000
TIMER_SIZE 0x00000080
ICU_BASE 0xd2200000
ICU_SIZE 0x00000020
DMA_BASE 0xd1200000
DMA_SIZE 0x00000014
TTY_BASE 0xd0200000
TTY_SIZE 0x00000040
BD_BASE 0xd5200000
BD_SIZE 0x20
KTEXT_LMA_BASE 0xbf800000
KTEXT_LMA_SIZE 0x00020000
KDATA_LMA_BASE 0xbf820000
KDATA_LMA_SIZE 0x00020000
UTEXT_LMA_BASE 0xbf840000
UTEXT_LMA_SIZE 0x00060000
UDATA_LMA_BASE 0xbf8A0000
UDATA_LMA_SIZE 0x00020000
BOOT_BASE 0xbfc00000
BOOT_SIZE 0x00001000
RAM_BASE 0x7F400000
RAM_SIZE 0x01000000
KTEXT_BASE 0x80000000
KDATA_BASE 0x80020000
KDATA_SIZE 0x003E0000
USR_TEXT_BASE 0x7F400000
USR_DATA_BASE 0x7F460000
USR_DATA_SIZE 0X00B9F000
 
 
}}} || == Equipe pédagogique et organisation du module == Les cours ont lieu en salle 112 bâtiment 41, le mercredi de 8h30 à 10h30. Les TME ont lieu les jeudi de 13h30 à 17h45 en salle 65-66 406. * Franck Wajsburt * Ghassan Almaless == Cours == * [htdocs:2011_mi074_1_intro.pdf Introduction] * [htdocs:2011_mi074_2_hello.pdf Hello World] == TME == * [wiki:TME1 Reset] * [wiki:TME2- Bootloader] * [wiki:TME3- kentry] * [wiki:TME4- heap_manager] * [wiki:TME5- hal_cpu hal_arch]