Quelles considérations doivent être sockets lors du choix de la version du kernel pour un périphérique embarqué?

J'ai utilisé buildroot pour créer avec succès un kernel, un système de files racine et des compilateurs croisés pour me permettre d'écrire du code d'application pour fonctionner sur un périphérique embarqué. Actuellement, je n'ai pas besoin d'écrire des pilotes de périphériques et je n'ai actuellement aucune idée de comment s'y prendre quand même mais il est fort probable qu'à l'avenir j'aurai besoin de le faire. De ma search, j'ai compris que l'API du kernel peut changer entre les versions et que l'écriture d'un pilote de périphérique est spécifique à une version du kernel contrairement à l'écriture d'une application au niveau de l'user. Fondamentalement, je voudrais savoir:

  1. Ce qui précède est-il correct?
  2. Quels facteurs doivent être pris en considération pour décider quelle version du kernel utiliser?

La raison pour laquelle je request est que de toute la littérature que j'ai lue sur le sujet (et la participation à un cours de Linux embedded) traite des kernelx de la version 2.6.x. Je construis par système embarqué en utilisant un kernel 3.6.11 mais je me request pourquoi le cours et la littérature semble traiter avec ces kernelx plus anciens. Y a-t-il des aspects bénéfiques à l'utilisation d'un kernel plus ancien ou y at-il des inconvénients à l'utilisation de versions plus récentes?

3.x est juste la suite de 2.x – à un moment donné Linus a décidé que la partie "x" de la version est trop grande. Généralement, vous voulez probablement un kernel raisonnablement récent, probablement marqué comme "long terme" . Beaucoup dépend également de votre application – alors que les trous de security à distance dans le kernel sont plutôt rares, les problèmes locaux sont beaucoup plus fréquents.

La sélection d'un kernel est un problème contraignant:

  1. le kernel doit être suffisamment nouveau pour supporter de manière fiable le matériel sur lequel vous travaillez (par exemple, les pilotes NIC)
  2. le kernel doit être suffisamment nouveau pour prendre en charge de manière fiable les fonctionnalités logicielles que vous prévoyez d'utiliser (par exemple: iptables)
  3. le kernel doit être suffisamment nouveau pour se débarrasser du plus de vulnérabilités possible
  4. le kernel doit être suffisamment vieux pour être fiable (il y a une telle chose comme «saignement»)
  5. le kernel doit être de série qui recevra des mises à jour à long terme (à less que ce soit un système qui, une fois déployé, n'a aucune chance d'être mis à jour, cela n'a pas d'importance, mais vous devez accorder plus de poids aux n ° 4 et n ° 3)

Une fois que vous parcourez cette list, la list des kernelx qui répondent réellement à vos besoins a tendance à être très petite, donc la solution a tendance à être claire.

Vous ne pouvez pas utiliser le kernel stable le plus récent? Si vous avez un ancien code source pour les pilotes de périphériques, je pense que tout ce que vous devriez vérifier est que les noms des périphériques correspondent (comme /dev/eth0 est /dev/enp2s0f0 -> je ne sais toujours pas pourquoi).