Entorno de piratería de kernel

22

He estado trabajando en sistemas operativos integrados como uCOS, ThreadX. Si bien he codificado aplicaciones en Linux, ahora planeo comenzar a aprender Linux Kernel. Tengo pocas preguntas sobre el medio ambiente.

  1. ¿Cuál es la mejor distribución, que tiene herramientas fáciles de usar para el desarrollo del kernel? (hasta ahora había usado RHEL y Fedora. Si bien me siento cómodo con esto, también parece que Ubuntu tiene scripts incorporados para compilar fácilmente el kernel make_kpkg, etc.)

  2. ¿Puedes describir la mejor configuración para la depuración del kernel? Mientras depuraba otros sistemas operativos integrados, utilicé el puerto serie para volcar el progreso, JTAG, etc. ¿Qué tipo de configuración usan los desarrolladores del kernel de Linux? (¿Mi PC de banco de pruebas con puerto serie es suficiente para mis necesidades? En caso afirmativo, ¿cómo configurar el kernel para volcar al puerto serie?) Estoy planeando redirigir los mensajes del kernel a la consola serie que se leerán en mi computadora portátil.

  3. ¿Qué herramienta es mejor para depurar y rastrear el código del kernel? Como se mencionó anteriormente, ¿es la consola serie la única forma? ¿O existe algún tipo de interfaz IDE / JTAG para PC?

rajaganesh87
fuente
3
Para el n. ° 1, el propio Linus usa Fedora, por lo que posiblemente dice algo. No sé lo suficiente sobre este tema para realmente dar una respuesta, pero me interesaría lo que otras personas digan.
jonescb
1
make_kpkg proviene de Debian, en el que se basa Ubuntu y mi distribución favorita;)
Cuenta eliminada el

Respuestas:

14

Mi gusto personal para el desarrollo del kernel de Linux es Debian. Ahora para sus puntos:

  1. Como probablemente haya adivinado, Ubuntu no aporta nada nuevo al núcleo para facilitar el desarrollo de afaik, aparte de lo que ya está disponible en Debian. Por ejemplo, make_kpkg es una característica de Debian y no Ubuntu. Aquí hay algunos enlaces para comenzar con las tareas comunes de desarrollo del kernel de Linux en Debian:

  2. La forma más fácil de depurar el kernel es usando QEMU y GDB. Algunos enlaces para comenzar:

    Sin embargo, debe tener en cuenta que este método no es viable para ciertos escenarios, como la depuración de problemas de hardware específicos y otros, para los cuales sería mejor utilizar la depuración en serie física y el hardware real. Para esto, puede usar KGDB (también funciona con ethernet). KDB también es una buena opción. Ah, y por cierto, tanto KGDB como KDB se han fusionado en el Kernel de Linux. Más sobre esos dos aquí . Otro método genial, que funciona maravillosamente para problemas no relacionados con el hardware, es usar el kernel de Linux en modo de usuario . Ejecutar el Kernel en modo de usuario como cualquier otro proceso le permite depurarlo como cualquier otro programa ( ejemplos ). Más sobre Linux en modo de usuarioAquí . UML es parte del kernel de Linux desde 2.6.0, por lo que puede construir cualquier versión oficial del kernel anterior en modo UML siguiendo estos pasos .

  3. Vea el ítem 2. Desafortunadamente, no existe el mejor método final aquí, ya que cada herramienta / método tiene sus ventajas y desventajas.

Shinnok
fuente
¡Gracias! para la respuesta detallada Por cierto, estoy interesado en subsistemas fs y bio en kernel. ¿Qué tipo de configuración sería la mejor para mí?
rajaganesh87
UML y QEMU es probablemente el camino a seguir, ya que puedes jugar fácilmente con sistemas de archivos sin costo alguno.
Shinnok
Muy buenos enlaces, solo una cosa. Mi favorito también es Debian, pero Kernel Development se puede hacer con cualquier distribución. Tal vez la holgura sea la mejor manera si eres purista, ya que usa un núcleo de vainilla, pero las configuraciones no son malas, encontrarás lo mejor.
D4RIO
Encontré algunos enlaces útiles más: [Enlace 1] ( ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html ) [Enlace 2] ( ibm.com/developerworks/linux/tutorials/l-kernelhack2/index. html )
rajaganesh87
6

Si está desarrollando una plataforma integrada que no está basada en hardware i386, deberá realizar una compilación cruzada. El proyecto Emdebian proporciona cadenas de herramientas para desarrollar muchas arquitecturas (ARM, m68k, MIPS y más) en PC (i386 o amd64). Eso significa que bajo Debian, simplemente puede agregar los repositorios y apt-get instalar la cadena de herramientas para el objetivo (s) de su elección.

Gilles 'SO- deja de ser malvado'
fuente
3

Las sondas JTAG existen, pero son bastante caras (y las compañías que las construyen tienen contratos exclusivos). La mejor manera de depurar el código del kernel es iniciarlo en kvm o qemu con gdbserver dentro de la emulación.

Simon Richter
fuente
Aún mejor, use el modo de usuario Linux. Linux como un proceso regular de usuario.
vonbrand
0

Esencialmente, cualquier distribución de línea principal debería funcionar bien para esto (usan su propia distribución para hackearla). Use lo que se sienta más cómodo.

vonbrand
fuente