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 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 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 la esperanza de que de que sea aceptada en el núcleo principal. Este COMO está basada 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 asegurarnos de que tenemos las herramientas necesarias para crear y presentar nuestro 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 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 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 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 has 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 crea una sucursal local para realizar sus cambios

Por defecto, 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: Haga 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) 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 lo 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 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 (en color marrón) que se convertirá en el registro de cambios de la Git registro de confirmación.

No te preocupes por el texto de color naranja 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 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 parche simplemente dar el siguiente comando:

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

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

Desde 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@@Static struct dmi_system_id __initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME "P4S800"),
},
},
+ {/ * Problemas de mango con 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

Nótese cómo el nombre del archivo fue recogido de su primera línea de la Git registro de confirmación. También la -n opción agrega 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 firmado es tomado de la configuración de su Git que estableció 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 un llamado 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 proporcionados dentro de la fuente del kernel para arreglar / limpiar su parche como:

scripts/cleanfile
scripts/cleanpatch

Paso 7: Pruebe su parche

Una vez más, es muy importante que aplique el parche en á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 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 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 usar cualquier cliente de correo electrónico y host 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 entrar, se le pedirá su contraseña de cuenta de Gmail que es necesario introducir para poder enviar realmente el correo electrónico.

Ahora compruebe cuentas de correo electrónico que figuran arriba para comprobar si tienes la dirección de 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í hay que cometer registro de la aceptación de mi parche de Ingo Molnar que luego goteaba de árbol de Ingo Molnar a 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!