Comment commencer à changer le code source Linux pour créer un système d'exploitation personnalisé? [fermé]

15

J'ai entendu dire que nous pouvons personnaliser Linux (disons Ubuntu) comme nous le souhaitons en changeant son code source et pouvons créer un tout nouveau système d'exploitation. J'ai téléchargé le code source du noyau linux sur le site www.kernel.org. Mais en le voyant, je ne peux rien comprendre, il y a tellement de répertoires, de fichiers dans les fichiers (car je pense qu'il y aurait un seul grand programme). Je veux le faire en tant que projet universitaire et je veux également contribuer à Linux en y apportant les modifications nécessaires. Mais après avoir posé cette question sur une partie du site, ils ont dit que le code source Linux était très énorme. Vous pouvez essayer minix. Maintenant, je suis très confus.

Veuillez me donner des suggestions avec des détails sur la façon dont je devrais commencer ce voyage (de changer le code source pour personnaliser Linux) avec les étapes nécessaires, ainsi que quelques livres de niveau débutant.

Dubex
la source
Quel est ton but? Comment aimeriez-vous contribuer?
Spidey
Pour créer mon propre système d'exploitation personnalisé en changeant son code source (linux) ... et pour apprendre comment fonctionne le système d'exploitation et pour le plaisir aussi
dubex
Le noyau nommé Linux n'est pas Gnu / Linux (Ubuntu, Debian, RedHat, Suse, etc. distrowatch.com ) Cependant, la plupart des gens utilisent le terme Linux pour désigner GNU / Linux + X11 +. Cependant, Linux n'est qu'un des noyaux, qui peut être utilisé avec GNU et d'autres systèmes d'exploitation. Si vous souhaitez modifier Ubuntu ou similaire, ce n'est pas la même chose que de modifier le noyau nommé Linux.
ctrl-alt-delor

Réponses:

29

Bienvenue sur unix.stackexchange.com!

Il n'y a pas de réponse facile à votre question, et des gens bien meilleurs que moi ont écrit des livres entiers sur le noyau Linux et les systèmes d'exploitation en général.

A propos de la portée du projet: écrire un système d'exploitation n'est pas une tâche simple! Même un système d'exploitation délibérément minimal comme Minix est une chose assez complexe! Pour vous donner une idée de Linux, pensez aux programmes C que vous avez écrits jusqu'à présent. Le cursus universitaire moyen a tendance à être de quelques milliers de lignes de C au maximum. Je pense que mon projet de dernière année était d'environ 30 à 35 000 lignes de C ++. Le noyau Linux est composé d'environ 13 000 000 lignes de code C.

Pourquoi tout est-il dans des fichiers séparés? Les projets importants sont stockés dans des fichiers séparés pour des raisons logistiques et pratiques. Pensez simplement à charger un fichier de 13 000 000 lignes dans un éditeur! Avant d'aborder un énorme projet comme Linux, vous devez absolument affiner vos compétences en C au point où la question `` pourquoi plusieurs fichiers '' se répond. Vous devriez également pouvoir lire le code C , pas seulement l'écrire. (plus difficile qu'il n'y paraît au premier abord)

Vous devriez certainement être très compétent en C. Le noyau est maintenu par des milliers de personnes, et vous serez appelé à comprendre les idiomes C personnels de chacun d'entre eux (accordé, dans les normes de codage du noyau assez rigides, mais quand même - tout le monde a leur propre style de résolution de problèmes).

Après avoir obtenu votre C fu, assurez-vous de bien comprendre les systèmes d'exploitation. Cela vous aidera à comprendre le code. Tout Linux n'est pas essentiel. Le noyau proprement dit est assez petit! Qu'est-ce que c'est:

  • Des milliers de pilotes matériels pour divers appareils.
  • Couches d'abstraction pour différentes classes de périphériques afin de simplifier les API et l'écriture des pilotes. Par exemple, nous avons le VFS pour les systèmes de fichiers, la couche Event pour les périphériques d'entrée, et cetera.
  • Des quantités choquantes de code et de fichiers compilés conditionnellement répondant aux diverses architectures qui exécutent Linux (toutes les machines Linux ne sont pas des PC Intel, et certaines sont incroyablement différentes de ce à quoi vous pourriez vous attendre). Le noyau doit gérer ces différences, ce qui signifie plus de code.

Un problème que vous trouverez immédiatement est que ces composants ne sont pas si faciles à débrancher, à changer et à rebrancher. Il existe de nombreuses interrelations. En bref, changer des bits du noyau est délicat.

La raison pour laquelle les gens vous ont suggéré Minix est simple: c'est un système d'exploitation complet, mais il n'est pas alourdi par les besoins d'un système aussi complexe que Linux. Le code est petit, mais offre toujours toutes les fonctionnalités. Après tout, les premières versions de Linux ont été inspirées par Minix.

Bien sûr, Minix a moins de support matériel de nos jours. Et alors? C'est une aubaine! Les ordinateurs modernes se virtualisent très bien. Utilisez-le à votre avantage: une machine virtuelle pour exécuter Minix est si légère qu'elle rendra le développement difficile.

Si votre projet est de construire un système d'exploitation, vous pourriez faire pire que de commencer par étudier Minix. Vous pouvez également acheter et lire le livre que Minix a été écrit pour accompagner « Les systèmes d'exploitation modernes d'Andrew Tanenbaum ».

Vous devez également définir vos objectifs et définir précisément vos termes . Si votre propre définition d'un système d'exploitation est celle de Microsoft (un système d'exploitation avec une interface graphique et une suite logicielle complète), vous pouvez être dans un très long projet! Des centaines de milliers de personnes ont travaillé depuis les années 1960 pour nous amener où nous en sommes, après tout.

Enfin, souvenez-vous du cri de guerre de l'informaticien: « ne réinventez jamais la roue! '(nous aimons faire des exceptions lors de l'apprentissage, bien sûr. Et pour le plaisir :))

Alexios
la source
1
serait [lien] (www.linuxfromscratch.org) remplir pleinement mon rêve ... merci d'avoir montré de l'intérêt ma question
dubex
LFS est fantastique pour apprendre comment fonctionne l'espace utilisateur d'un système POSIX. Pour autant que je sache, il est spécifique à Linux, donc il ne s'agit pas de modifier le noyau dans une direction inhabituelle (comme vous le feriez lorsque vous créez votre propre noyau). Mais c'est plus que cela, car une fois que votre noyau s'éloigne de POSIX, l'espace utilisateur sera incompatible et devra être porté ou réimplémenté.
Alexios
Désolé pour un malentendu ... Mais je ne voulais pas dire que je ferai mon propre noyau (car je n'ai pas beaucoup de talent :)). Je veux faire un changement dans le code source afin qu'il puisse être différent des autres et que c'est ma propre créativité. Par exemple: je voudrais un certain type d'animation avec du son (que j'ai fait), à l'écran lorsque Linux (disons ubuntu) démarre avec un logiciel de reconnaissance vocale installé. Encore merci.
dubex
1
Dans ce cas, vous créez votre propre distribution de Linux, et non un système d'exploitation différent. LFS est le bon outil pour cela. Bonne chance!
Alexios
1
@Alexios, réponse très bonne et descriptive, merci.
0xAF
7

Vérifiez le projet Linux From Scratch . Comme son nom l'indique, il contient tous les détails nécessaires pour créer votre propre distribution Linux

matcheek
la source
4

Je pense que la première chose que vous devez définir est "quels sont les changements que vous souhaitez apporter à l'OS". Tant que vous n'en aurez pas décidé, vous n'irez nulle part. Il n'y a pas de "voie unique" d'apprentissage.

De plus, je pense que vous devriez mieux définir ce que vous entendez par OS. Une grande partie (une partie majeure) du code source d'Ubuntu est en dehors de Linux. Linux n'est que le noyau , (il est parfois appelé système d'exploitation , en particulier dans les milieux universitaires, d'où la confusion), et il a donc le travail "simple" de:

  • gestion des ressources.
  • communiquer avec le matériel.

Tout autre changement se produirait à un niveau différent, qu'il s'agisse des utilitaires de base de l'utilisateur (souvent appelés utils ), de l'interface graphique, des applications de base d'une distribution, etc.

Si cependant, vous êtes toujours prêt à apprendre à pirater le noyau, vous devriez peut-être commencer par cette question , la question la plus votée sur ce site;)

rahmu
la source
désolé de ne pas être si précis en posant une question ... mais en réalité je n'ai aucune idée de tout cela en détail. En fait, je veux un certain type d'animation (avec du son) à l'écran lorsque Linux (disons ubuntu) démarre ... donnez-moi s'il vous plaît une idée d'explorer tous ces domaines et comment aller plus loin dans un domaine spécifique (par exemple, gui avec la communication avec le matériel) ) ...
dubex
@dubex commence avec plymouth et regarde les bibliothèques Linux pour jouer du son. SDL_mixer pourrait être facile.
sourcejedi
2

Cela peut être un peu à côté du point, mais si vous souhaitez en savoir plus sur le noyau Linux et commencer à le développer, vous devriez vraiment vous pencher sur les débutants du noyau . C'est un site qui vous donne un aperçu de la mécanique du noyau (comme l'a fait Alexios d'une manière excellente), mais vous permet également de choisir une petite tâche à gérer (être un soi-disant concierge du noyau). C'est une excellente façon d'apprendre et je le recommande vivement!

Tommy
la source