En première introduction, le code du noyau Linux est constitué des couches logicielles suivantes :
Il contient également (non exhaustif):
Le code spécifique à l'architecture du processeur se trouve dans le dossier \arch. Il contient un sous-dossier par architecture CPU, comme \arm ou \x86. Ce code comprend la gestion de la mémoire de bas niveau, la gestion des interruptions, des routines en assembleur, le code du format exécutable et de liaison, etc.
Le code des pilotes de périphériques se trouve dans plusieurs dossiers.
Le code de la pile réseau se trouve dans le dossier \net. Il contient le code des différents protocoles réseau.
Le code de gestion de la mémoire se trouve dans le dossier \mm. Il comprend la gestion de la mémoire au démarrage, l'allocation de mémoire, le mappage de fichiers en mémoire, l'échange de mémoire sur le disque dur, etc.
Le code de gestion des processus se trouve dans le dossier \kernel. Il comprend la gestion des processus, des threads, de l'ordonnancement, des piles, de la signalisation, du Berkeley Packet Filter (BPF)...
Le code des systèmes de fichiers se trouve dans le dossier \fs.
Il comprend:
L'interface d'appel système est l'ensemble des fonctions exposées par le noyau Linux à l'espace utilisateur.
Les fonctions sont définies dans le dossier relatif au domaine fonctionnel. Elles reposent sur du code commun (avec la possibilité d'utiliser du code spécifique à l'architecture).
fsopenest défini dans \fs\fsopen.c avec l'utilisation de SYSCALL_DEFINE2 SYSCALL_DEFINE2est défini dans \include\linux\syscalls.h. __SYSCALL_DEFINExsous-jacentes peuvent être remplacées par du code dépendant de l'architecture, si une convention d'appel différente est utilisée. Le dossier \init contient le code utilisé pour le démarrage du noyau. En particulier, le fichier \init\main.c est le point d'entrée.
Le code relatif à la sécurité se trouve dans les dossiers suivants
Le dossier \virt implémente KVM (Kernel Base Virtual Machine).