Cómo: Crear y presentar su primer parche del kernel Linux usando GIT
Después de trabajar con Linux (en su mayoría como un usuario avanzado) de los años, he decidido publicar mi primer parche del kernel Linux (aunque trivial pero bueno tiene que empezar en alguna parte!) y yo estaba muy emocionado cuando primero fue aceptado por el mantenedor del subsistema y luego en última instancia, se corría en núcleo principal.
Lo que sigue es una guía paso a paso sobre cómo presentar un kernel Linux parche y espero que se acepte en el núcleo principal. Este tutorial esta basado en un parche real que escribí y presenté y que me aceptaron en núcleo principal de ayer. La guía destaca sobre todo la mecánica de enviar los parches y los aspectos de diseño no necesariamente técnicos de kernel Linux.
Paso 1: Instalar herramientas Git
Lo primero que tenemos que hacer es asegurarnos de que tenemos las herramientas necesarias para crear y enviar nuestro parche para el kernel Linux. Estoy usando mi sistema Debian Lenny para este ejemplo.
# apt-get update
# apt-get install git git-email gitk
Además, es una buena idea para configurar unos 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: Clone Linus 'Git Tree
La siguiente cosa que usted puede querer hacer es clonar árbol Git de Linus preferentemente en su máquina Linux. Asegúrese de que tiene suficiente espacio (por lo 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 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 esperar 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á automáticamente puesto que usted ha especificado en el comando). Cualquier patchwork siempre debe hacerse en contra de este árbol para asegurarse de que los cambios podrían no 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 hace en / usr/src/mylinux-2.6 directorio.
Paso 3: Ahora crear una sucursal local para realizar los cambios
Por defecto, cuando se clona el árbol Git se encuentra en la rama principal.
# git branch
* master
#
* El anterior indica su rama actual.
Vamos a crear una nueva rama de mi MenlowRebootFix en la que vamos a hacer nuestros cambios de código:
# git branch MenlowRebootFix
Entonces usted necesita a la comprobación de la rama recién creada anteriormente:
# git checkout MenlowRebootFix
Confirme que se encuentra en la rama sobre:
# 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 en el archivo y lo guardó dar 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. Ten mucho cuidado con lo que escribe en el mensaje de registro debido a que estos mensajes serán parte del árbol Git Linux cometer registro y la gente va a estar buscando su commit en base a estos mensajes. Aquí está lo que he escrito y he aquí lo que mi última ventana editor parecía que:
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 principal línea de asunto del parche que usted un correo electrónico y también se convertirá en el identificador en el registro de confirmación Git.
Nota: Es muy importante que primero escribe el nombre del subsistema al que pertenece el parche. En mi caso, ya estoy modificando el archivo reboot.c en el directorio de la arquitectura x86, empiezo por el asunto con x86:.
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 Git.
No se preocupe por el texto de color naranja que comienza con #. Éstos serán ignorados por commit 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, su descripción se convertirá en parte de la línea de asunto y todo habrá lío.
Paso 5: Crear el parche
Así que ahora tenemos cometer el parche en su repositorio Git local, es el momento de generar el parche que le enviaremos a sus respectivos mantenedores y listas de correo. Para generar el parche simplemente dar el siguiente comando:
# git format-patch -s -n master..MenlowRebootFix
Esto debería crear un archivo 0001-86-Fix-reboot-problema-on-VersaLogic-Menlow boards.patch en el directorio actual, cuyo contenido será:
Desde 04056e508c996b023857f8076da7fb54096d10e9 Lun 17 Sep 2001 00:00:00
De: Kushal Koolwal <kushalkoolwal@gmail.com>
Fecha: Tue, 19 de febrero 2011 13:14:03 -0800
Asunto: [PATCH 1/1] x86: Problema reinicio Fix en los tablones de VersaLogic Menlow.
VersaLogic placas basadas en Menlow cuelga al reiniciar a menos que se utiliza reboot = bios.
Añadir Quirk para reiniciar a través de la BIOS.
Probado en al menos cuatro tableros.
Firmado-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 ficheros cambiados, 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 en los tablones de VersaLogic Menlow * /
+. Callback = set_bios_reboot,
+. Ident = "tablero basado en Menlow VersaLogic",
+ = {Partidos.
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporación"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic bordo Menlow"),
+},
+},
{}
};
-
1.7.2.3
Tenga en cuenta cómo se ha elegido el nombre del archivo de su primera línea de registro de confirmación Git. También la opción-n añade el número de patch [PATCH 1/1] para el sujeto y la opción-s se suma el Signed-off-by: line. El correo electrónico que se recogió en la línea de off firmado es tomado de la configuración de su Git que estableció en el Paso 1.
Paso 6: Verifique su parche para errores
Lo siguiente que necesitamos para asegurarse de que el parche que estamos tratando de presentar no contiene errores obvios, como espacios en blanco, que superan el 80 límite de la columna, etc Hay un script en perl llamado checkpath.pl que se proporciona con las fuentes del kernel para este fin :
# 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 otros scripts también prestados dentro del código fuente del kernel para corregir / 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 Git el 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 personas que presenten parche
Asumiendo que su parche compilado, trabajó de la manera que usted quiere que sus mensajes de correo electrónico de prueba y se veía bien el siguiente paso es conseguir que la lista de personas a las que se refieren a que debe enviar su revisión. Hay dos métodos para hacerlo:
Método 1: Utilice la secuencia de comandos proporcionada en las fuentes 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 MANTENEDORES
El otro método consiste en referirse a la MANTENEDORES archivo que se proporcionará en el interior del árbol de fuentes del núcleo. Usted necesita por lo menos el parche email a todas las personas que tienen "M" antes de su nombre.
Nota: También es necesario enviar el parche a por lo menos una lista de correo. Si usted no puede encontrar ninguna lista de correo, a partir de los dos métodos anteriores, que se ocupa del subsistema ante el cual está tratando de presentar su parche, entonces al menos debe de correo electrónico a la lista de correo del kernel Linux (linux-kernel @ vger . kernel.org).
Paso 9: Test Email el parche
Aunque se puede utilizar cualquier cliente de correo electrónico y servidor SMTP que desee y tener acceso a, he encontrado que el uso de Gmail fue el mejor ya que muchos de los desarrolladores del kernel que use. Ahora es muy importante que primero pruebe su parche enviándolo sus propias direcciones de correo electrónico (posible cuenta de correo electrónico 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 llegar a ingresar, se le pedirá la contraseña de la cuenta de Gmail que es necesario introducir para poder enviar realmente el mensaje.
Ahora revisa las cuentas de correo antes mencionados para verificar si usted tiene el correo electrónico y todo se ve bien para su presentación.
Paso 10: Por último Enviar el parche
Si todo parece correcto, entonces finalmente email tu parche basado en la lista de las personas que encontró en el paso 8. Esto es lo que en realidad terminó usando:
# 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 luego corría de árbol de Ingo Molnar que Stephen Rothwell linux-next árbol y, finalmente, en la Linus Torvald kernel Linux mainline árbol.
Eso es todo! Buena suerte con su primer parche!













11 de marzo 2011 a las 9:19 am
hey my name is abderrahmane i'am de argelia
en un primer momento lo siento por mi Inglés.
usted tiene un sistema Debian funcionando como servidor, me gustaría añadir algún servicio como asterisco y mensajería, ¿Es necesario copmile el kernel para hacer un sistema personalizado,
mi objetivo es hacer debian personalizado que después de instalación desde el CD o en vivo cd mi serverice estará listo para correr como atsrisk apache ...
muchas gracias
Responder a este comentario
07 de abril 2011 en 12:31a.m.
Hola,
gracias por este gran howto!
Creo que hay un pequeño error. Creo que no debe dejar ser "patch-p1 <0001-86-Fix-reboot-problema-on-VersaLogic-Menlow boards.patch" en lugar de "patch-p1 0001-86-Fix-reboot-problema-on-VersaLogic- Menlow boards.patch ".
Sobre el particular,
Tom
Responder a este comentario
21 de junio 2011 a las 24:11
Excelente howto con lo que yo tengo mi parche fácilmente creados e incluidos en el proceso de desarrollo del kernel de linux. Gracias.
Compilar el kernel de prueba puede ser un poco difícil para nosotros newbiez. He aquí un excelente wiki para ayudar en sistemas Ubuntu:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
H. Thomas
Responder a este comentario
30 de junio 2011 a las 23:36
Hola,
Aquí es algo similar centrado en sistemas embebidos - buscar las
2010-10 ¿Cómo hacer un parche GNU / Linux kernel - Embedded Live London
http://www.reliableembeddedsystems.com/publications.html
Saludos,
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. Usted es una inspiración para
nosotros en la comunidad Debian y Linux.
Puesto que, usted tiene la educación de postgrado formal, referencias de libros adicionales,
¿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 sobre 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 HOWTO:. Crear y presentar su primer parche para el kernel Linux usando GIT Gracias por eso ...
y tengo un blog linux de mi propia ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
gracias
Responder a este comentario
25 de enero 2012 a las 20:05
[...] Restrictiva sobre el estilo del correo, parches, etc, consulte la 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 gran iniciador. Tratando de añadir git a mi proceso de envío de código.
Responder a este comentario
30 de julio 2012 a las 11:10 am
Echa un vistazo a
git am-visto bueno
en lugar de utilizar
patch-p1 <
"Git am" se sumará la confirmación completa de su árbol git incluyendo el texto commit git. "Parche" sólo se aplicará a los cambios en el código fuente y los cambios no se compromete a git.
Utilice "git am-aborto" para cancelar un compromiso que va mal.
Responder a este comentario
01 de enero 2013 a las 11:45 am
[...] Kernel, supongo que la mayoría de las directrices se aplican allí también. Como un "cómo" guiar, encontré este artículo en la web que describe el paso de los comandos a paso, en realidad, git es capaz de enviar una serie de parches [...]
09 de enero 2013 a las 7:16 am
Niza introducción. Acabo de empezar a trabajar con Git por primera vez - a pesar de usar SVN y CVS para un número de años. Se ha demostrando ser muy interesante hasta ahora :)
Salvará este tutorial y la práctica cuando llegue a casa esta noche.
Buen trabajo.
Responder a este comentario
30 de marzo 2013 a las 18:18
hola, gracias por este howto. Escribí mi primer parche para el kernel linux, y enviarlo por correo electrónico al mantenedor ayer.
Sin embargo, ¿cómo puedo saber si se acepta mi parche o no?
gracias
Responder a este comentario