Compiler un noyau GNU/Linux selon vos besoins

Un noyau GNU/Linux?

Le noyau ou "kernel" de votre système est le coeur de votre architecture, il gère la cohabitation matérielle et logicielle (Hardware / Software). Il s'agit du chef d'orchestre, qui permet une communication entre tous vos composants informatiques et électroniques.

Pour fonctionner correctement votre noyau aura besoin de certains requis:

-gestion de la mémoire virtuelle
-gestion du stockage
-gestion du ou des processeur(s)
-

(Un concept important à retenir).
*Retenons que le matériel est tout aussi déterminant que tout le reste).

Nous allons nous concentrer sur un des petits plaisirs du linuxien. Un admin sys doit y passer un jour ou l'autre non ? ^_^ les dev vont plus vite dans leur apprentissage; pourquoi ? Les systèmes sont tous très capricieux, complexes et avec énormément de spécificités à prendre en compte, les couches OSI et TCIP/IP en sont un exemple car la plupart de ses couches ne sont pas exploitées par le développeur lambda, ils ont par ailleurs tous les deux un oeil attentionné face à tout script. L'apprentissage système peut se résumer en deux mots: Adaptation et Simplification.
A une époque il n'y avait pas autant d'outils à dispositions et accessibles à tous. On utilisait un peu tous les mêmes packages. Ce temps est révolu. Ces dernières années auront suffit à faire émerger le métier de développeur au centre de toutes les attentions.

Tous le disent haut et fort "compiler la première fois sera dur et long en réflexion mais ça vous servira toute votre vie ! ✌".
A lui seul, cet argument suffit pour comprendre les bénéfices de ses propres compilations noyaux, logiciels ou à l'aide des technologies web.

La compilation de noyau est essentiel pour l'administrateur système qui aime peaufiner paramètres et OS aux petits oignons.

La programmation système sans entrer dans les particularités langages est légèrement semblable à la compilation d'applications mobiles et web du développeur, un peu comme des cousins plus ou moins éloignés.

Avec les mêmes possibilités pour trouver les solutions grâce aux débogueurs respectifs.





*Cartes mères et composants ne seront développés dans cet article dédié au noyau.

A qui doit on ce plaisir ?

Nous devons cette possibilité à Linus Torvalds pour pallier les contraintes PC de l'époque, encore d'actualités aujourd'hui mais depuis soutenu par les bios "UEFI"  (EFI - ESP by malékal).

Voici une image qui résume bien le schéma kernel de linux:

La compilation est un des atouts de notre système préféré. Rare sont ceux qui commencent par la compilation mais à chacun son apprentissage. Comprendre la logique de votre noyau linux vous permettra un confort non négligeable et un affinage maîtrisé du noyau, matériel et paramétrages.

Savoir compiler requiert davantage de temps en lecture, préparation et raisonnement que pour la compilation en elle même. D'ailleurs vous le faites aussi à cet instant précis.

L'architecture Linux


Voici l'organisation en quatre anneaux des architectures X86:
Anneau de protection sur WIKIPEDIA

Les séparations de niveaux permettent une répartition des privilèges plus stricte et pointilleuse :

Le niveau 0 permet au noyau seul, de modifier son état et d'accéder en lecture/écriture au matériel.

Le niveau 1 et 2 sont utilisés pour les périphériques d'entrées/sorties  (I/O).

Le niveau 3 est le seul disponible pour l'espace utilisateur.


Bien évidemment le niv 0 doit fonctionner parfaitement, une mauvaise manipulation ou commande suffit à casser votre système sans possibilité de rattrapage.

ARM ET SYSTEMES EMBARQUES

ARM = https://www.arm.com/
Architecture https://fr.wikipedia.org/wiki/Architecture_ARM


Les systèmes embarqués utilisent généralement des microprocesseurs à basse consommation d'énergie ou des microcontrôleurs, dont la partie logicielle est en partie ou entièrement programmée dans le matériel, généralement en mémoire dans une mémoire morte (ROM), EPROM, EEPROM, FLASH, etc. Généralement appelé un firmware.

Vous possédez probablement déjà un appareil sous architecture ARM même sans le savoir.


Pour ceux que ça intéresse, observez l'historique de la compagnie, les références valent le détour...History of ARM 😀

Liste non exhaustive:
Routeurs - Rasperry pi - Arduino - Téléphones - Tablettes - IOT...

Les processeurs ARM sont devenus dominants dans le domaine de l'embarqué, en particulier la téléphonie mobile, tablettes et IOT. Ils bénéficient d'une faible consommation électrique et sont fabriqués sous licence par un grand nombre de constructeurs. 

Aujourd'hui, ARM est surtout connu pour ses systèmes sur puce (SoC), intégrant sur une seule puce : microprocesseur (micro CPU), processeur graphique (GPU), DSPFPUSIMD, et contrôleur de périphériques. Ceux-ci sont présents dans la majorité des smartphones et tablettes présent sur le marché. Ils proposent des architectures, qui sont vendues sous licence de propriété intellectuelle aux concepteurs. Avec différentes options dans lesquelles les constructeurs peuvent choisir ce qui les intéresse pour compléter avec leurs propres options ou celles de tiers concepteurs. 


Mais revenons à nos moutons.
Un système optimisé selon vos besoins, ni + ni -.
Même en désactivant tous les services inutiles de votre système d'exploitation Windows, vous n'atteindrez jamais la modularité et la flexibilité d'un système GNU/Linux...

Grâce aux micros et nano systèmes on peut trouver sur le marché un tas de produits aux utilités, fonctionnalités et caractéristiques totalement différentes. Quelques exemples:
-Un appareil photos 4K dans lequel le constructeur ou fabricant a implémenté les services d'un routeur wifi, dédié au partage en direct, aux dimensions minimes de l4cmx6cm2.5cm et même waterproof...avec la cage°°.

-Plus petits, les clés usb wifi et bluetooth sont aussi de bons exemples.

-Le VoCore2 est un des nombreux beaux exemples, un nano pc Linux de la taille d'une pièce de monnaie, pouvant servir de routeur et capable de lancer le jeu DOOM.

Les avantages des micros et nanos systèmes sont multiples et ne résident pas que dans l'espace disque. Ils tendent vers des personnalisations et optimisations accrues.

Minix qui est un système d'exploitationclone d'Unix, fondé sur un micro-noyau créé par le professeur Andrew Stuart Tanenbaum à des fins pédagogiques, volontairement réduit afin qu'il puisse être compris entièrement par ses étudiants en un semestre, et qui a servi de source d'inspiration à Linus Torvalds pour créer Linux.



















A quoi peuvent servir ses connaissances ? Ces minis systèmes en plus de redonner vie à de vieux ordinateurs ont grandement simplifiés et sont déjà mêlés aux développement IOT actuelles. Ses connaissances seront utiles pour tout les particuliers qui feront cet effort. Pensez learning machine et aux futurs convergences de nos technologies de pointes. Bientôt vous pourrez peut être réparer votre robot de ménage, de compagnie ou de travail par vous même, à l'aide d'un peu de code et d'une bonne compréhension machine.
Ils ne seront jamais autonomes au point de se "réparer" physiquement (qui sait??) mais surtout Logiquement...^_^ .

Savoir compiler votre propre noyau est utile le jour ou vous êtes confronté à un appareil non reconnu par votre système Linux. Cette possibilité d'implémenter de nouvelles fonctionnalités ou modules sur un dispositif matériel quelconque est très apprécié du "linuxien" et "geek" qui recherche avant tout un apprentissage éducatif des choses. Le mauvais coté de la force, lui vous obligera à patcher et combler  les éventuelles failles de sécurité (matériel, logiciel et OS).

Recompiler en adaptant le noyau à votre PC

Depuis toujours, vous pouvez installer n'importe quel système linux en ligne si vous êtes connecté à internet, j'ai déjà eu l'occasion de le faire pour quelques configurations musclés mais ça, ça compte pour du beurre :). Les tutos ne manquent pas pour installer des distributions linux en ligne.

Pour compiler correctement, il faut déjà bien connaître votre matériel et composants informatiques. Cela vous fera gagner du temps tout en consolidant vos acquis. Cela revient à vous familiariser davantage avec votre ordinateur qu'avec votre gestionnaire de périphériques (sous windows...), connaître les caractéristiques techniques et composants de vos appareils vous aidera ainsi à mieux vous faire comprendre. Assez parlé, mise en pratique.

Adapter le noyau à votre ordinateur

Multiplier les compilations, faire des tests, des copies, des sauvegardes à l'aide de machines virtuelles, Raspberry pi ou encore avec un vieil appareil "obsolète" .
Ne touchez pas à vos routeurs ^_^...+ tard peut être...:)

Je prendrais 3 exemples de code minimalistes


Un peu d'infos WIKI sur l'internet des objets:

https://fr.wikipedia.org/wiki/Internet_des_objets


Plateformes IOT:

https://mydevices.com/

https://www.iotinabox.com/






Articles à découvrir (par vous même lol) sur le même sujet:

2 Interactions entre l'espace utilisateur, noyau et matériel

3 Cloisonner des processus au sein du noyau Linux

4 Comment déboguer le noyau ?
5 Modification des appels systèmes du noyau Linux


Y'a un pixel qui traîne sur le Blog depuis sa création ^_^ (me demande combien l'ont trouvé)