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!

Be Sociable, Share!