Environnement de piratage du kernel

J'ai travaillé dans OS embarqué comme uCOS, ThreadX. Bien que j'ai codé des applications sous Linux, maintenant je vais commencer à apprendre Linux Kernel. J'ai quelques questions concernant l'environnement.

  1. Quelle est la meilleure dissortingbution, qui a des outils faciles à utiliser pour le développement du kernel? (pour l'instant, j'ai utilisé RHEL et Fedora.) Bien que je sois à l'aise avec ces derniers, Ubuntu a aussi des scripts embeddeds pour une compilation facile du kernel comme make_kpkg , etc.)

  2. Pouvez-vous décrire la meilleure configuration pour le debugging du kernel? Pendant le debugging d'autres systèmes d'exploitation embarqués, j'ai utilisé le port série pour save les progrès, JTAG, etc. Quel type d'installation utilise le kernel Linux? (Est-ce que mon PC de testbed avec port série est suffisant pour mes besoins? Si oui, comment configurer le kernel pour le vidage au port série?) Je prévois de redirect les messages du kernel vers la console série qui sera lue dans mon ordinateur portable.

  3. Quel outil est le meilleur pour le debugging et le traçage du code du kernel? Comme mentionné précédemment, la console série est-elle le seul moyen? Ou n'importe quel type d'interface IDE / JTAG existe pour PC?

    Ma saveur personnelle pour le développement du kernel Linux est Debian. Maintenant pour vos points:

    1. Comme vous l'avez probablement deviné, Ubuntu n'apporte rien de nouveau à l'amélioration du kernel du kernel afaik, en dehors de ce qui est déjà disponible dans Debian. Par exemple, make_kpkg est un exploit Debian. et pas Ubuntu. Voici quelques liens pour vous familiariser avec les tâches de développement courantes du kernel Linux dans Debian:

      • Chapitre 4 – Tâches communes au kernel de Debian Linux Kernel Handbook
      • Chapitre 10 – Debian et le kernel de la FAQ Debian GNU / Linux
    2. La méthode la plus simple pour faire le debugging du kernel utilise QEMU et gdb. Quelques liens pour vous aider à démarrer:

      Bien que vous devriez être conscient que cette méthode n'est pas viable pour certains scénarios comme le debugging de problèmes matériels spécifiques et pour lesquels vous feriez mieux d'utiliser le debugging série physique et le matériel réel. Pour cela, vous pouvez utiliser KGDB (il fonctionne en utilisant Ethernet aussi). KDB est aussi un bon choix. Oh, et d'ailleurs, KGDB et KDB ont été fusionnés dans le kernel Linux. Plus sur ces deux ici . Une autre méthode cool, qui fonctionne merveilleusement pour les problèmes non liés au matériel, utilise le kernel Linux en mode user . Exécuter le kernel en mode user comme n'importe quel autre process vous permet de le déboguer comme n'importe quel autre programme ( exemples ). Plus d'informations sur User-mode Linux ici . UML fait partie du kernel Linux depuis 2.6.0, vous pouvez donc build n'importe quelle version officielle du kernel au-dessus en mode UML en suivant ces étapes .

    3. Voir 2. Malheureusement, il n'y a pas de meilleur ici, puisque chaque outil / méthode a ses avantages et inconvénients.

    J'espère que cela vous aidera à commencer votre voyage fou dans le développement du kernel Linux.

    Si vous développez pour une plate-forme embeddede qui n'est pas basée sur le matériel i386, vous devrez comstackr. Le projet Emdebian fournit des outils à développer pour de nombreuses architectures (ARM, M68k, MIPS et plus) sur des PC (i386 ou amd64). Cela signifie que sous Debian, vous pouvez simplement append les référentiels et apt-get installer la chaine d'outils pour la ou les cibles de votre choix.

    Les sondes JTAG existent, mais elles sont assez chères (et les entresockets qui les construisent ont des contrats exclusifs). La meilleure façon de déboguer le code du kernel est de le lancer dans kvm ou qemu avec gdbserver à l'intérieur de l'émulation.

    Essentiellement, toute dissortingbution principale devrait fonctionner correctement (ils utilisent leur propre dissortingbution pour pirater). Utilisez ce que vous sentez plus confortable.