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.
¿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.)¿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.
¿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?
fuente
Respuestas:
Mi gusto personal para el desarrollo del kernel de Linux es Debian. Ahora para sus puntos:
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:
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 .
Vea el ítem 2. Desafortunadamente, no existe el mejor método final aquí, ya que cada herramienta / método tiene sus ventajas y desventajas.
fuente
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.
fuente
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.
fuente
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.
fuente