Después de trabajar con Linux (en su mayoría como un usuario avanzado) durante años, me decidí a publicar mi primer parche para el kernel de Linux (aunque trivial pero oye, necesito empezar en alguna parte!) y me emocioné cuando por primera vez fue aceptada por el mantenedor del subsistema y luego en última instancia, que corría en núcleo principal.

Lo que sigue es una guía paso a paso sobre cómo presentar un núcleo Linux parche y esperamos que se aceptó en el núcleo principal. Este HOW-TO se basa en un parche real que escribí y presenté y que fue aceptado en el núcleo de la línea principal de ayer. La guía pone de relieve sobre todo la mecánica del envío de parches y 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 enviar nuestro parche para el kernel de Linux. Estoy usando mi sistema Debian Lenny para este how-to.

# apt-get update
# apt-get install git git-email gitk

Además, es una buena idea para configurar algunos pocos parámetros que Git 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 Árbol

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 espacio suficiente (al menos 2 GB) antes de clonar el árbol. En el momento de escribir esto, 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 espere 30 minutos más o menos, dependiendo de su velocidad de conexión a Internet, antes de que todo el árbol se descarga en su mylinux-2.6 directorio (directorio se creará automáticamente ya 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 llevará a cabo en el directorio /usr/src/mylinux-2.6.

Paso 3: Ahora crear 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 arriba su rama actual.

Vamos a crear una nueva rama mis MenlowRebootFix en el 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 de arriba:

# git branch
*MenlowRebootFix
master
#

Paso 4: Realice los cambios

Ahora 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) de esta manera:

# 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 escribe en el mensaje de registro, ya que estos mensajes se convertirán en parte del árbol de Linux Git cometer registro y la gente va a buscar su commit basa en estos mensajes. Aquí está lo que he escrito y he aquí lo que mi ventana del editor definitivo 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 línea de asunto principal del parche que va a enviar por correo electrónico y también se convertirá en el identificador en el Git registro de confirmación.

Nota: Es muy importante que primero escribe el nombre del subsistema al que su parche pertenece. En mi caso ya que estoy modificando el archivo reboot.c en el directorio de la arquitectura x86, empiezo por línea de 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 el registro de cambios de la Git registro de confirmación.

No te preocupes por el texto en el color naranja que comienza con #. Los que serán ignorados por git commit.

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 será todo desorden.

Paso 5: Generar el parche


Así que ahora usted tiene cometer su parche en el repositorio Git locales, es el momento de generar el parche que le enviaremos a sus respectivos mantenedores y listas de correo. Para generar parche simplemente dar el siguiente comando:

# git format-patch -s -n master..MenlowRebootFix

Esto debería crear un archivo 0001-x86-Fix-reinicio-problema-en-VersaLogic-Menlow-boards.patch en el directorio actual, cuyo contenido será:

De 04056e508c996b023857f8076da7fb54096d10e9 lun 17 de septiembre 2001 00:00:00
Desde: Kushal Koolwal <kushalkoolwal@gmail.com>
Fecha: sábado, 19 de febrero 2011 13:14:03 -0800
Asunto: [PATCH 1/1] x86: Fijar problema reinicio en los tablones de VersaLogic Menlow.
Placas basadas VersaLogic Menlow cuelgan en el reinicio a menos que se utiliza reboot = bios.

Añadir capricho 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 archivos cambiados, 8 inserciones (+), 0 eliminaciones (-)
diff -git un / arch / x86 / kernel / reboot.cb / arch / x86 / kernel / reboot.c
fc7aae1..715037c índice 100644
- A / arch / x86 / kernel / reboot.c
+++ B / arch / x86 / kernel / reboot.c
@@-285,6 +285,14@@Estática struct dmi_system_id __initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME, "P4S800"),
},
},
+ {/ * Problemas con la manija de reiniciar en los tablones de VersaLogic Menlow * /
+ .callback = Set_bios_reboot,
+ .ident = "Mesa basado VersaLogic Menlow",
+ = {.matches
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Corporación"),
+ DMI_MATCH ("tablero VersaLogic Menlow" DMI_BOARD_NAME,),
+},
+},
{}
};
-
1.7.2.3

Tenga en cuenta cómo el nombre del archivo fue recogido de su primera línea de la git commit log. También la opción -n añade el número de parche [PATCH 1/1] para el sujeto y la opción -s añade el-off-by firmado: línea. El correo electrónico que se recogió en la línea de firmado se recoge a partir de la configuración de su Git que se establece 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, exceder el límite de la columna 80, etc. Hay una llamada checkpath.pl script en perl que se proporciona con los 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 previstas dentro de la 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 aplique el parche para el árbol 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 las personas a presentar 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 que se refieren a los que usted debe enviar por correo electrónico su parche. Hay dos métodos para hacerlo:

Método 1: Utilice el guión previsto en el código fuente del núcleo

# 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 es hacer referencia a la MANTENEDORES archivo que es proporcionar dentro del árbol de fuentes del núcleo. Usted necesita por lo menos un correo electrónico su parche a todas las personas que tienen "M" antes de su nombre.

Nota: También es necesario enviar por correo electrónico su 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 tiene que ver con el subsistema contra el que usted está tratando de presentar su parche, entonces usted debe por lo menos de correo electrónico para Linux Kernel Mailing List (linux-kernel @ vger .kernel.org).

Paso 9: Probar Enviar el parche

Aunque se puede utilizar cualquier cliente de correo electrónico y host SMTP que desee y tener acceso a, me encontré con que el uso de Gmail fue el mejor ya que una gran cantidad de desarrolladores del kernel que utilice. Ahora bien, es muy importante que primero pruebe su parche mediante el envío de sus propias direcciones de correo electrónico (posible cuenta 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 llegar a entrar, se le pedirá su contraseña de cuenta de Gmail que usted necesita para entrar en el fin de enviar realmente el correo electrónico.

Ahora echa cuentas de correo electrónico que figuran a continuación para verificar si tienes la dirección de correo electrónico y todo se ve bien para su presentación.

Paso 10: Por último Enviar el parche

. Si todo se ve bien, entonces finalmente Contacte a su 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í hay que cometer registro de la aceptación de mi parche de Ingo Molnar que luego corría de árbol de Ingo Molnar a Stephen Rothwell -linux siguiente árbol y finalmente en Linus Torvald de la línea principal de Linux kernel árbol.

Eso es todo! Buena suerte con su primer parche!

Be Sociable, Share!