COMO: Crear y enviar su primer parche del kernel de Linux usando GIT
Después de trabajar con Linux (sobre todo como un usuario avanzado) de los años, me decidí a publicar mi primer parche para el kernel de Linux (aunque trivial, pero bueno tiene que comenzar en alguna parte!) y me emocioné cuando por primera vez fue aceptada por el mantenedor del subsistema y, a continuación en última instancia, que corría en el núcleo principal.
Lo que sigue es una guía paso a paso sobre cómo presentar un núcleo de Linux parches y espero que se acepte en el núcleo principal. Este tutorial esta basado en un parche real que he escrito y presentado, y que fue aceptada en núcleo principal de ayer. La guía pone de relieve sobre todo la mecánica de envío de parches y los aspectos de diseño no necesariamente técnicos del kernel de Linux.
Paso 1: Instalar las herramientas de Git
Lo primero que tenemos que hacer es asegurarse de que tenemos las herramientas necesarias para crear y presentar nuestro parche para el kernel de Linux. Estoy usando mi sistema Debian Lenny en este how-to.
# apt-get update
# apt-get install git git-email gitk
Además, es una buena idea configurar algunos pocos parámetros que Git va a utilizar cuando se genera el parche:
# git config --add user.name "Kushal Koolwal"
# git config --add user.email "kushalkoolwal@gmail.com"
Paso 2: Árbol Clon Linus Git
La siguiente cosa que usted puede querer hacer es clonar el árbol de Linus Git preferentemente en su máquina Linux. Asegúrese de que tiene suficiente espacio (al menos 2 GB) antes de clonar el árbol. En el momento de escribir estas líneas el tamaño total del árbol fue de alrededor de 950 + MB.
debian:~# cd /usr/src/
debian:/usr/src/# git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 mylinux-2.6
Ahora a esperar por 30 minutos más o menos, dependiendo de su velocidad de conexión a Internet, antes de todo el árbol se descarga en el directorio mylinux-2.6 (directorio se creará de forma automática ya que se han especificado en el comando). Cualquier mosaico se debe hacer siempre en contra de este árbol para asegurarse de que los cambios no pueden entrar en conflicto con los cambios realizados por otros desarrolladores.
debian:/usr/src/# cd mylinux-2.6
debian:/usr/src/mylinux-2.6# ls
arch COPYING crypto drivers fs init Kbuild kernel MAINTAINERS mm README samples security tools virt block CREDITS Documentation firmware include ipc Kconfig lib Makefile net REPORTING-BUGS scripts sound usr
debian:/usr/src/mylinux-2.6#
De aquí en adelante todo el trabajo se hará en / usr/src/mylinux-2.6 directorio.
Paso 3: Ahora cree una sucursal local para realizar los cambios
Por defecto, cuando se clona el árbol Git usted está en la rama principal.
# git branch
* master
#
El * indica que por encima de la rama actual.
Vamos a crear una nueva rama de mi MenlowRebootFix en el que vamos a hacer nuestros cambios en el código:
# git branch MenlowRebootFix
Entonces usted necesita a la caja por encima de la rama recién creada:
# git checkout MenlowRebootFix
Confirme que se encuentra en la rama de arriba:
# git branch
*MenlowRebootFix
master
#
Paso 4: Realice los cambios
Ahora me voy a hacer cambios en el archivo arch/x86/kernel/reboot.c. Después de realizar los cambios al archivo y se guarda darle el siguiente comando:
# git commit -a
El comando anterior se abrirá un editor de texto en la misma ventana en la pantalla del terminal (mi editor de texto por defecto es nano) así:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch Test1
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: arch/x86/kernel/reboot.c
#
Ahora vamos a entrar en nuestro mensaje de registro. Tenga mucho cuidado con lo que se escribe en el mensaje de registro debido a que estos mensajes lleguen a ser parte del árbol de Git Linux comprometerse registro y la gente estará buscando Su compromiso sobre la base de estos mensajes. Aquí está lo que he escrito y esto es lo que la ventana de mi editor final que parecía:
x86: Fix reboot problem on VersaLogic Menlow boards
VersaLogic Menlow based boards hang on reboot unless reboot=bios is used. Add quirk to reboot through the BIOS.
Tested on at least four boards.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch Test1
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: arch/x86/kernel/reboot.c
#
Ahora el texto en color azul se convertirá en su línea de asunto principal de la revisión que se enviará por correo electrónico y también se convertirá en el identificador en el registro de git commit.
Nota: Es muy importante que primero escriba el nombre del subsistema al que pertenece el parche. En mi caso, ya que estoy modificando el archivo reboot.c en el directorio de la arquitectura x86, empiezo por la línea de sujeto con 86.
Después de que usted necesita para dejar una línea en blanco. a continuación, escriba una breve descripción acerca de su cambio (de color marrón) que se convertirá en la lista de cambios del registro de confirmación de Git.
No te preocupes por el texto en color naranja que comienza con #. Aquellos será ignorado por compromiso Git.
and description , your description will become part of the subject line and it will be all mess. Nota: Si usted no deja una línea en blanco entre el sujeto y la descripción, la descripción de su pasarán a formar parte de la línea de asunto y será todos los comedores.
Paso 5: Generar el parche
Así que ahora usted tiene cometen el parche en su repositorio Git local, es el momento de generar el parche que le enviaremos a los mantenedores respectivos y listas de correo. Para generar el parche se limitan a dar el siguiente comando:
# git format-patch -s -n master..MenlowRebootFix
Esto debería crear un archivo 0001-86-Fix-reboot-problema-de-VersaLogic-Menlow boards.patch en el directorio actual, cuyo contenido será:
Desde 04056e508c996b023857f8076da7fb54096d10e9 Lun Sep 17 00:00:00 2001
De: <kushalkoolwal@gmail.com> Kushal Koolwal
Fecha: Sábado, 19 de febrero 2011 13:14:03 -0800
Asunto: [PATCH 1/1] x 86: el problema de reinicio Fix VersaLogic juntas Menlow.
VersaLogic Menlow basadas en tablas de colgar en el reinicio a menos reboot = bios se utiliza.
Añadir capricho para reiniciar a través de la BIOS.
Probado en al menos cuatro tablas.
Firmado-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 | + + + + + + + +
1 archivos modificados, 8 inserciones (+), 0 eliminaciones (-)
git diff-a/arch/x86/kernel/reboot.cb/arch/x86/kernel/reboot.c
Índice fc7aae1 .. 715037c 100644
- A/arch/x86/kernel/reboot.c
+ + + B/arch/x86/kernel/reboot.c
@ @ -285,6 +285,14 @ @ Static struct __ dmi_system_id initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME ", P4S800"),
},
},
+ {/ * Manejar problemas con el reinicio de VersaLogic Menlow tablas * /
+. Callback = set_bios_reboot,
+. Ident = "VersaLogic consejo basado en Menlow"
+. Partidos = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporación"),
+ DMI_MATCH (DMI_BOARD_NAME, "Menlow VersaLogic bordo"),
+},
+},
{}
};
-
1.7.2.3
Nótese cómo el nombre del archivo se ha recogido desde su primera línea de la de registro de confirmación de Git. También la opción-n se suma el número de parche [PATCH 1/1] con su tema y la opción-s se suma al Signed-off-by: la línea. El correo electrónico que se recoge en la línea de fuera firmado se recoge en la configuración de su Git que se establece en el paso 1.
Paso 6: Comprobar el parche para los errores
El siguiente paso es asegurarse de que el parche que estamos tratando de presentar no contenga errores obvios, como espacios en blanco, que superan el 80 límite de columna, etc Hay un script en perl llamado checkpath.pl que se proporciona con las fuentes del kernel para este propósito :
# scripts/checkpatch.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
y usted debería ver algo como esto:
Salida:
total: 0 errors, 0 warnings, 14 lines checked
0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch has no obvious style problems and is ready for submission.
Hay otras secuencias de comandos también incluidas dentro de las fuentes del kernel para arreglar / limpiar el parche como:
scripts/cleanfile
scripts/cleanpatch
Paso 7: Pruebe su parche
Una vez más, es muy importante que se aplique el parche al árbol de la Git Linus, compilarlo y probarlo antes de enviar el parche contra la corriente.
# git checkout master
# patch -p1 < 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
# make-kpkg --append-to-version=test-patch kernel_image kernel_headers
Paso 8: Obtener la lista de la gente a someterse a la revisión
Suponiendo que el parche compilado, trabajó de la manera que quieran y su correo electrónico de prueba se veía bien el siguiente paso es obtener la lista de las personas se refieren a los que usted debe enviar su revisión. Hay dos métodos para hacerlo:
Método 1: Utilizar el guión previsto en el código fuente del kernel
# scripts/get_maintainer.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
Salida:
Thomas Gleixner <tglx@linutronix.de> (maintainer:X86 ARCHITECTURE...)
Ingo Molnar <mingo@redhat.com> (maintainer:X86 ARCHITECTURE...,commit_signer:5/8=62%)
"H. Peter Anvin" <hpa@zytor.com> (maintainer:X86 ARCHITECTURE...,commit_signer:3/8=38%)
x86@kernel.org (maintainer:X86 ARCHITECTURE...)
Don Zickus <dzickus@redhat.com> (commit_signer:2/8=25%)
Peter Zijlstra <apzijlstra@chello.nl> (commit_signer:2/8=25%)
Borislav Petkov <bp@alien8.de> (commit_signer:1/8=12%)
linux-kernel@vger.kernel.org (open list)
#
Método 2: Consulte el archivo MAINTAINERS
El otro método es hacer referencia a la MAINTAINERS archivo que es dar en el interior del árbol de código fuente del kernel. Usted necesita por lo menos a su parche de correo electrónico a todas las personas que tienen "M" antes de su nombre.
Nota: También es necesario enviar el parche a la lista de correo al menos una. Si usted no puede encontrar ninguna lista de correo, sobre la base de los dos métodos anteriores, que se preocupa por el subsistema en la que está tratando de enviar el parche, entonces al menos debe de correo electrónico a la lista de correo del kernel de Linux (linux-kernel @ vger . kernel.org).
Paso 9: Correo electrónico de prueba el parche
Aunque se puede usar cualquier cliente de correo electrónico y servidor SMTP que desee y tener acceso a, he encontrado que el uso de Gmail era la mejor, ya que muchos de los desarrolladores del kernel, use eso. Ahora es muy importante que primero probar el parche mediante el envío de sus propias direcciones de correo electrónico (cuenta la posibilidad de correo electrónico diferente con diferentes proveedores de correo). Yo uso el siguiente:
git send-email --smtp-encryption=tls --smtp-server=smtp.gmail.com --smtp-user=kushalkoolwal@gmail.com --smtp-server-port=587 --to "KKoolwal <myname@koolsolutions.com>" --to "Kushal Koolwal <myname@yahoo.com>" --cc "KK <myname@hotmail.com>" 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
Después de pulsar enter, se le pedirá su contraseña de la cuenta Gmail, que es necesario introducir con el fin de enviar realmente el correo electrónico.
A continuación, compruebe las cuentas de correo electrónico indicada anteriormente para comprobar si tienes el correo electrónico y todo se ve bien para su presentación.
Paso 10: Finalmente Enviar a revisión
Si todo parece estar en ese momento por fin enviar el parche sobre la base de la lista de personas a las que se encuentran en el paso 8. Esto es lo que en realidad terminó con:
# git send-email --smtp-encryption=tls --smtp-server=smtp.gmail.com --smtp-user=kushalkoolwal@gmail.com --smtp-server-port=587 --from "Kushal Koolwal <kushalkoolwal@gmail.com>" --to "Thomas Gleixner <tglx@linutronix.de>" --to "Ingo Molnar <mingo@redhat.com>" --to "H. Peter Anvin <hpa@zytor.com>" --to "x86@kernel.org" --cc "linux-kernel@vger.kernel.org" 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch
Aquí está el registro de confirmación de la aceptación de mi parche de Ingo Molnar que entonces corría de árbol Ingo Molnar de Stephen Rothwell linux-al lado del árbol y, finalmente, en Linus Torvald en la línea principal del núcleo de Linux árbol.
¡Eso es! Buena suerte con su primer parche!











11 de marzo 2011 a las 9:19 am
Hola mi nombre es Abderrahmane i'am de Argelia
en un primer momento lo siento por mi Inglés.
que haya un sistema Debian se ejecuta como servidor, me gustaría añadir un poco de servicio como el asterisco y la mensajería, no tengo que copmile el kernel para hacer un sistema personalizado,
mi meta es hacer de Debian personalizado que después de instalación de cd o en vivo a mi serverice estará listo para correr como atsrisk apache ...
muchas gracias
Responder a este comentario
07 de abril 2011 a las 12:31 am
Hola,
gracias por esta guía genial!
Creo que hay un pequeño error. Creo que contribuirá a obtener es "patch-p1 <0001-86-Fix-reboot-problema-de-VersaLogic-Menlow boards.patch" en lugar de "patch-p1 0001-86-Fix-reboot-problema-de-VersaLogic- Menlow boards.patch ".
Al respecto,
Tom
Responder a este comentario
21 de junio 2011 a las 24:11
Howto Excelente con lo que tengo mi parche fácilmente creados e incluidos en el proceso de desarrollo del kernel Linux. Gracias.
Compilar el kernel prueba podría ser un poco difícil para nosotros newbiez. Aquí hay un excelente wiki para ayudar en los sistemas de Ubuntu:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
H. Thomas
Responder a este comentario
30 de junio 2011 a las 11:36 pm
Hola,
Aquí es algo similar centrado en los sistemas embebidos - buscar
2010-10 ¿Cómo hacer un parche de GNU / Linux kernel - Embedded Live London
http://www.reliableembeddedsystems.com/publications.html
Un cordial saludo,
Robert
Responder a este comentario
23 de julio 2011 a las 6:59 am
Gracias por una clara y técnica de cómo hacerlo. Usted es una inspiración para
nosotros en la comunidad de Debian y Linux.
Puesto que, usted tiene la educación de posgrado oficial, referencias de libros adicionales, tales
¿Por qué se produce un error que los programas pueden ser útiles.
http://www.amazon.com/Why-Programs-Fail-Systematic-Debugging/dp/1558608664
Responder a este comentario
25 de septiembre 2011 a las 3:19 am
Todavía estoy aprendiendo acerca de Ubuntu. A lo lejos que parchear el kernel. Lol
Responder a este comentario
18 de octubre 2011 a las 23:13
muy buen tutorial sobre COMO:. Crear y enviar su primer parche del kernel de Linux usando GIT Gracias por eso ...
y tengo un blog de Linux por mi cuenta ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
gracias
Responder a este comentario
25 de enero 2012 a las 8:05 pm
[...] Restrictiva sobre el estilo del correo electrónico, parches, etc, consulte el FAQ de la lista del kernel. Pero hay un buen tutorial para evitar la mayor parte de la [...]
09 de febrero 2012 a las 15:48
Gracias por el primer gran. Intentar añadir git a mi proceso de envío de código.
Responder a este comentario