

Il s'agit d'une série de tutoriels pour les développeurs de systèmes d'exploitation Hobby qui sont nouveaux à l'architecture ARMV8-A d'ARM 64 bits. Les tutoriels feront une visite guidée étape par étape de la façon d'écrire un kernel de système d'exploitation monolithique pour un embedded system à zéro. Ils couvrent la mise en œuvre des tâches de systèmes d'exploitation courantes, comme l'écriture sur la console série, la configuration de la mémoire virtuelle et la gestion des exceptions HW. Tout en tirant parti des caractéristiques uniques de Rust pour fournir la sécurité et la vitesse.
Amusez-vous!
Cordialement,
Andre (@ Andre-Richter)
PS: Pour les autres langues, veuillez rechercher des fichiers de réadme alternatifs. Par exemple, README.CN.md ou README.ES.md . Un grand merci à nos traducteurs ?.
kernel autonome et botable.README aura une courte tl;dr donnant un bref aperçu des ajouts et affichez le code source diff au tutoriel précédent, afin que vous puissiez inspecter facilement les modifications / ajouts.tl;dr . Le plan à long terme est que tous les tutoriels obtiennent un texte intégral, mais pour l'instant cela est exclusif aux tutoriels où je pense que tl;dr et diff ne suffisent pas pour avoir l'idée.QEMU .UART .make doc dans chaque tutoriel. Il vous permet de parcourir le code largement documenté de manière pratique.make doc 
Les tutoriels sont principalement destinés aux distributions basées sur Linux . La plupart des choses fonctionneront également sur MacOS , mais ce n'est que expérimental .
Installez le moteur Docker.
( Linux uniquement ) Assurez-vous que votre compte utilisateur est dans le groupe Docker.
Préparez la chaîne d'outils Rust . La majeure partie sera gérée lors d'une première utilisation via le fichier Rust-Toolchain.toml. Ce qui nous reste à faire, c'est:
Si vous avez déjà installé une version de Rust:
cargo install cargo-binutils rustfiltSi vous devez installer Rust à partir de zéro:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt Dans le cas où vous utilisez Visual Studio Code , je recommande fortement d'installer l'extension Rust Analyzer.
( macOS uniquement ) Installez quelques joyaux Ruby .
Cela a été testé pour la dernière fois par l'auteur avec Ruby version 3.0.2 sur macOS Monterey . Si vous utilisez rbenv , le fichier respectif .ruby-version est déjà en place. Si vous n'avez jamais entendu parler de rbenv , essayez d'utiliser ce petit guide.
Exécutez ceci dans le dossier racine du référentiel:
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install Cette série essaie de mettre fortement l'accent sur la convivialité des utilisateurs. Par conséquent, des efforts ont été faits pour éliminer autant que possible le plus gros point de douleur dans le développement intégré: Toolchain hassle .
Rust lui-même aide déjà beaucoup à cet égard, car il a un support intégré à la compilation croisée. Tout ce dont nous avons besoin pour la compilation croisée d'un hôte x86 à l'architecture AArch64 de Raspberry Pi sera automatiquement installé par rustup . Cependant, outre le compilateur de rouille, nous utiliserons d'autres outils. Entre autres:
QEMU pour imiter notre noyau sur le système hôte.Minipush pour charger un noyau sur le Raspberry Pi à la demande sur UART .OpenOCD et GDB pour déboguer sur la cible.Il y a beaucoup de choses qui peuvent mal tourner lors de l'installation et / ou de la compilation de la version correcte de chaque outil sur votre machine hôte. Par exemple, votre distribution pourrait ne pas fournir la dernière version nécessaire. Ou vous manquez des dépendances difficiles à obtenir pour la compilation de l'un de ces outils.
C'est pourquoi nous utiliserons Docker chaque fois que possible. Nous fournissons un conteneur d'accompagnement qui a tous les outils ou dépendances nécessaires préinstallés, et il est tiré automatiquement une fois qu'il est nécessaire. Si vous voulez en savoir plus sur Docker et jeter un œil au conteneur fourni, veuillez vous référer au dossier Docker du référentiel.
Étant donné que le noyau développé dans les tutoriels fonctionne sur le matériel réel, il est fortement recommandé d'obtenir un câble de série USB pour obtenir l'expérience complète.
CP2102 .GND et GPIO 14/15 comme indiqué ci-dessous.chainloader est développé, qui sera le dernier fichier que vous devrez copier manuellement sur la carte SD pendant un certain temps. Il vous permettra de charger les noyaux de tutoriel pendant la demande de démarrage à la demande sur UART . 
La version originale des tutoriels a commencé comme une fourche des didacticiels impressionnants de Zoltan Baldaszti sur la programmation Bare Metal sur RPI3 en C . Merci de m'avoir donné une longueur d'avance!
Sous licence sous l'un ou l'autre des
à votre option.
À moins que vous ne soyez explicitement indiqué autrement, toute contribution intentionnellement soumise pour inclusion dans les travaux par vous, telle que définie dans la licence Apache-2.0, doit être autorisée à double licence comme ci-dessus, sans aucune condition supplémentaire.