Cómo convertirse en desarrollador del kernel de Linux
Cómo participar en el desarrollo del kernel de Linux
---------------------
Esto es un Este artículo le proporcionará los mejores consejos sobre cómo participar en el desarrollo del kernel de Linux. Lo guiará
para convertirse en desarrollador del kernel de Linux y aprenderá cómo trabajar con la comunidad de desarrollo del kernel de Linux. Contiene la menor cantidad posible de detalles técnicos sobre la programación del kernel, pero le indicará la dirección correcta para adquirir este conocimiento.
Si algo de este artículo ya no se aplica, envíe un parche al responsable del archivo que figura al final del artículo.
Comenzando
----
¿Quieres saber cómo convertirte en desarrollador del kernel de Linux? ¿O su jefe le dice que "escriba un controlador de Linux para este dispositivo"? El propósito de este artículo es enseñarle todos los trucos del oficio para lograr estos objetivos. Describirá el proceso que debe seguir y le dará algunos consejos sobre cómo trabajar con la comunidad del kernel. También intentará explicar por qué la comunidad del kernel opera de la forma en que lo hace.
La mayor parte del kernel de Linux está escrito en lenguaje C y algunos códigos relacionados con la arquitectura utilizan lenguaje ensamblador. Para
participar en el desarrollo del kernel, debe dominar el lenguaje C. No necesitas saber lenguaje ensamblador (para ninguna arquitectura) a menos que quieras desarrollar código de bajo nivel para esa arquitectura. Aunque los libros enumerados a continuación no pueden reemplazar una sólida educación en lenguaje C y años de experiencia en desarrollo, siguen siendo buenas referencias si es necesario:
- "El lenguaje de programación C" de Kernighan y Ritchie [Prentice Hall]
"Lenguaje de programación C (segunda edición · Nueva edición)" (Traducido por Xu Baowen y Li Zhi) [Machinery Industry Press]
- "Programación práctica en C " por Steve Oualline [O'Reilly]
"Programación práctica en lenguaje C (tercera edición)" (traducido por Guo Dahai) [China Electric Power Press]
- " C: A Manual de referencia" de Harbison y Steele [Prentice Hall]
"Manual de referencia del lenguaje C (quinta edición del libro original)" (traducido por Qiu Zhongpan y otros) [Machinery Industry Press]
El kernel de Linux se desarrolla utilizando GNU C y la cadena de herramientas GNU. Aunque sigue el estándar ISO C89, también utiliza algunas extensiones que no están definidas en el estándar. El kernel es un entorno C autosuficiente y no depende del soporte de la biblioteca C estándar, por lo que
no admite algunas definiciones del estándar C. Por ejemplo, no se permite el uso de operaciones de división de números grandes y de punto flotante de tipo largo.
A veces es realmente difícil determinar cuáles son los requisitos de la cadena de herramientas del kernel y qué extensiones utiliza y, lamentablemente, todavía no existe un material de referencia claro que los explique. Consulte la página de información de gcc (que se muestra mediante el comando "info gcc"
) para obtener información al respecto.
Recuerde que está aprendiendo a interactuar con una comunidad de desarrollo existente. Está formado por un grupo diverso de personas que tienen altos estándares de código, estilo y proceso. Estos estándares se resumen en la práctica a largo plazo y son adecuados para grandes equipos de desarrollo que están dispersos geográficamente. Están bien documentados y se recomienda que aprenda todo lo posible sobre estos estándares antes de desarrollarlos, en lugar de esperar que otros se adapten a su comportamiento o al de su empresa.
Problemas legales
--------
El código fuente del kernel de Linux está protegido por la GPL (Licencia pública general) que se publica a continuación. Para obtener detalles de esta licencia
consulte el archivo COPIAR en el directorio de origen. Si tiene más preguntas sobre esto, comuníquese con un abogado
y no pregunte en el grupo de correo del kernel de Linux. Debido a que las personas en el grupo de correo electrónico no son abogados, no espere que sus palabras tengan efecto legal.
Para preguntas frecuentes y respuestas sobre la GPL, visite el siguiente enlace:
para explicar estos cambios al responsable de las páginas de manual (manpages)
.
Los siguientes son los documentos que necesita leer en el código del kernel:
README
El archivo presenta brevemente los antecedentes del kernel de Linux y describe cómo configurar y compilar el kernel. Los nuevos usuarios del kernel deberían comenzar aquí.
Documentación/Cambios
El archivo proporciona la lista mínima de paquetes necesarios para compilar y utilizar el kernel.
Documentación/CodingStyle
Describe el estilo de codificación y la lógica del kernel de Linux. Todo código nuevo debe cumplir con las especificaciones definidas en este documento
. La mayoría de los mantenedores solo aceptarán parches que cumplan con las regulaciones, y muchos solo ayudarán a verificar el código que se ajuste al estilo.
Documentación/SubmittingPatches
Documentación/SubmittingDrivers
Estos dos documentos describen claramente cómo crear y enviar parches, incluidos (pero no limitados a):
- Contenido del correo electrónico
- Formato del correo electrónico
- Seleccionar destinatarios
El cumplimiento de estas regulaciones no garantiza un envío exitoso (ya que todos los parches deben pasar una rigurosa revisión de contenido y estilo
), pero ignorarlos casi significa fracasar.
Otra documentación excelente sobre cómo generar parches correctamente incluye:
"The Perfect Patch"
/mailman/listinfo/kernel-mentors
Antes de modificar realmente el código del kernel, es necesario comprender cómo funciona el código que se va a modificar. No hay mejor manera de lograr esto que leer el código directamente (la mayoría de los trucos se comentarán en consecuencia) y
algunas herramientas especialmente diseñadas también pueden ayudar. Por ejemplo, una herramienta de ayuda especialmente recomendada es el proyecto "Referencia cruzada de código Linux", que muestra el código fuente en páginas web catalogadas e indexadas.
Se puede acceder a uno de los repositorios de fuentes del kernel actualizados y actualizados en:
gt;
git.kernel.org:/pub/scm/ linux/kernel/git; /lenb/linux-acpi-2.6.git
- Árbol de fuentes de desarrollo de dispositivos, Jens Axboe lt; axboe@suse.degt
git.kernel/. scm/linux/kernel/git/axboe/linux-2.6-block.git
- árbol de fuentes de desarrollo DRM, Dave Airlie lt; airlied@linux.iegt;
git.kernel; .org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git
- árbol de fuentes de desarrollo ia64, Tony Luck lt tony.luck@intel.comgt;
git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git
- árbol de fuentes de desarrollo ieee1394, Jody McIntyre lt; scjody @modernduck.comgt;
git.kernel.org:/pub/scm/linux/kernel/git/scjody/ieee1394.git
- árbol de fuentes de desarrollo de infiniband, Roland Dreier lt ;rolandd@cisco. comgt;
git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
- árbol de fuentes de desarrollo de libata, Jeff Garzik lt;jgarzik@ pobox.comgt;
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
-Árbol fuente de desarrollo del programa del controlador de red, Jeff Garzik lt;jgarzik@pobox.comgt;
git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
- pcmcia árbol de fuentes de desarrollo, Dominik Brodowski lt;linux@dominikbrodowski.netgt;
git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git
- Árbol de fuentes de desarrollo SCSI, James Bottomley lt; James.Bottomley@SteelEye.comgt
git.kernel.org:/pub/scm/linux/kernel/git/jejb /scsi-misc- 2.6.git
Conjuntos de parches administrados con Quilt:
- USB, PCI, núcleo de controlador e I2C, Greg Kroah-Hartman lt gregkh@suse;
<. p>kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
-x86-64, parte i386, Andi Kleen lt;ak@suse.degt;
ftp.firstfloor.org:/pub/ ak/x86_64/quilt/
Se pueden encontrar otros árboles de fuentes del kernel en /netiquette/
Cuando muchas personas responden a su correo electrónico, la lista de copias del correo electrónico puede volverse muy larga. . No elimine a nadie de la lista CC
a menos que tenga una buena razón para hacerlo. Tampoco se limite a responder a la lista de correo. Acostúmbrese a recibir el mismo correo electrónico dos veces (una del remitente y otra de la lista de correo) y no intente resolverlo agregando algunos encabezados extraños. A la gente no le va a gustar esta pregunta.
Recuerda conservar el contexto y la fuente de tu respuesta. Mantenga las líneas "Fulano de tal dijo..." en la parte superior de su correo electrónico de respuesta. Coloque sus comentarios entre párrafos citados en lugar de en la parte superior del correo electrónico.
Si incluye parches en el correo electrónico, asegúrese de que sean texto sin formato legible (como se describe en
Documentación/Envío de parches). Los desarrolladores del kernel no quieren encontrar archivos adjuntos
o parches comprimidos. Sólo de esta manera podrán asegurarse de poder comentar directamente en cada línea de su código. Por favor, asegúrate
de que el programa de correo electrónico que utilizas no modifica espacios ni tabulaciones. Un método de prueba preventivo es enviarse primero el correo electrónico
a usted mismo y luego intentar ver si puede aplicar con éxito el parche que recibió. Si la prueba no tiene éxito, ajuste o reemplace su programa de envío de correo electrónico hasta que funcione correctamente.
En resumen, sea respetuoso con los demás suscriptores de la lista de correo.