Después de trabajar con Linux (principalmente como un usuario avanzado) durante años, me decidí a publicar mi primer parche del kernel de Linux (aunque trivial pero bueno necesito que empezar en alguna parte!) y me emocioné cuando primero fue aceptado por el mantenedor del subsistema y después 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 la esperanza de que de que sea aceptada en el núcleo principal. Esta HOW-TO se basa en un parche real que escribí y presenté y que consiguió aceptado en núcleo principal de ayer. La guía destaca sobre todo la mecánica de envío de parches y aspectos de diseño no necesariamente técnicos del kernel de Linux.

Paso 1: Instalar herramientas Git

Lo primero que tenemos que hacer es asegurarse de que tenemos las herramientas necesarias para crear y presentar nuestra parche del kernel 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 suficiente espacio (por lo 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 esperar 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 se 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#

A partir de aquí todo el trabajo se llevará a cabo en el directorio /usr/src/mylinux-2.6.

Paso 3: Ahora crea una sucursal local para realizar los cambios

De forma predeterminada, cuando se clona el árbol Git usted está en la rama principal.

# git branch
* master
#

El * anterior indica 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 está 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 que usted hizo los cambios en el archivo y 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. 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 definitiva 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 de la revisión que se le enviaremos un correo electrónico y también se convertirá en el identificador en el Git cometen de registro.

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 (en color marrón) que se convertirá en el registro de cambios de la Git cometen de registro.

No te preocupes por el texto en color anaranjado que comienza con #. Aquellos será ignorado 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 va a ser todo desorden.

Paso 5: Generar el parche


Así que ahora usted tiene cometer el parche en su repositorio Git locales, es el momento de generar el parche que le enviaremos a los 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-x86-Fix-reboot-problema-de-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: Solucionar 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 tablas.

Firmado-off-by: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch / x86 / kernel / reboot.c | 8 ++++++++
1 archivos cambiados, 8 inserciones (+), 0 eliminaciones (-)
diff -git a / 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

Note como el nombre del archivo fue recogido de su primera línea de la git commit log. También la -n opción añade el número de patch [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 desde la configuración de su Git que configure en el paso 1.

Paso 6: Revise 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 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 de la fuente 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 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 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 obtener la lista de las personas se refieren a las que usted debe enviar por correo electrónico su parche. Hay dos métodos para hacerlo:

Método 1: Utilizar 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 las fuentes del kernel. Usted necesita al menos un correo electrónico su parche para 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 se ocupa del subsistema contra el que usted está tratando de enviar su parche, entonces usted debe por lo menos email para Linux Kernel Mailing List (linux-kernel @ vger .kernel.org).

Paso 9: Prueba de email tu parche

Aunque se puede utilizar cualquier cliente de correo electrónico y host SMTP que desee y tener acceso a, he encontrado que el uso de Gmail fue la 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 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 ingresar, se le pedirá su contraseña de cuenta de Gmail que es necesario introducir para poder enviar realmente el correo electrónico.

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

Paso 10: Finalmente Enviar el parche

. Si todo se ve bien, entonces finalmente Enviar el parche sobre la base de 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í es que se comprometan registro de la aceptación de mi parche de Ingo Molnar que luego goteaba de árbol de Ingo Molnar al de Stephen Rothwell -linux siguiente árbol y finalmente en de Linus Torvald mainline Linux kernel árbol.

Eso es todo! Buena suerte con su primer parche!

Be Sociable, Share!