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 que usted necesita para comenzar en alguna parte!) y yo estaba muy emocionado 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 espero que se acepte en el núcleo principal. Este tutorial esta basado en un parche real que he escrito y presentado, y que fue aceptado en el núcleo de la línea principal de ayer. La guía destaca sobre todo la mecánica de enviar los parches y no necesariamente los aspectos técnicos de diseño del núcleo 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 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 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 esto, el tamaño total del árbol era 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 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 llevará a cabo en el directorio / usr/src/mylinux-2.6.

Paso 3: Ahora crea 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 en el 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 por encima:

# git branch
*MenlowRebootFix
master
#

Paso 4: Realice los cambios

Ahora voy a realizar 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 commit log y la gente va a buscar en su compromiso sobre la base de estos mensajes. Aquí está lo que he escrito y he aquí lo que la ventana de mi editor final 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 bien, el texto en color azul se convertirá en su línea de asunto principal de la revisión que usted un 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 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 del git commit log.

No te preocupes por el texto en el color naranja que comienza con #. Éstos serán ignorados por Git cometió.

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: Generar el parche


Así que ahora usted tiene cometen 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-en-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: Sab, 19 de febrero 2011 13:14:03 -0800
Asunto: [PATCH 1/1] x86: Fijar problema reboot en los tablones de VersaLogic Menlow.
Placas basadas VersaLogic Menlow cuelgan en el reinicio a menos que se utiliza reboot = bios.

Añadir peculiaridad que 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 (-)
a/arch/x86/kernel/reboot.cb/arch/x86/kernel/reboot.c diff-git
fc7aae1 índice .. 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"),
},
},
+ {/ * Problemas de la manija con el reinicio en los tablones de VersaLogic Menlow * /
+. Callback = set_bios_reboot,
+. Ident = "mesa basado VersaLogic Menlow",
+. Partidos = {
+ DMI_MATCH (DMI_BOARD_VENDOR "VersaLogic Corporación"),
+ DMI_MATCH (DMI_BOARD_NAME, "tablero VersaLogic Menlow"),
+},
+},
{}
};
-
1.7.2.3

Observe como el nombre del archivo que fue recogido de su primera línea de Git registro de confirmación. También la opción-n se suma el número de patch [PATCH 1/1] para el sujeto y la opción-s se suma la compensación Firmado por: line. 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 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, exceder el límite de la columna 80, 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 aplique el parche al árbol de Linus Git, compilarlo y probarlo antes de enviar el parche del desarrollador.

# 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 para

Asumiendo que su parche compilado, trabajó de la manera que usted quiere que sus mensajes de correo electrónico de prueba y tenía buena pinta, el siguiente paso es conseguir que la lista de personas que se refieren a los que usted debe enviar su parche. Hay dos métodos para hacerlo:

Método 1: Utilizar el guión previsto en el código fuente 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 es hacer referencia a la MANTENEDORES archivo que se proporciona dentro del árbol de fuentes del núcleo. Usted necesita por lo menos un correo electrónico su parche a todas las personas que han "M" antes de su nombre.

Nota: También es necesario enviar por correo electrónico su parche al menos a 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 de correo electrónico para Linux Kernel Mailing List (linux-kernel @ vger . kernel.org).

Paso 9: Test Enviar a un 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 utilice. Ahora es muy importante que primero pruebe su parche mediante el envío de sus propias direcciones de correo electrónico (cuenta de correo electrónico sea posible 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 deberá introducir para poder enviar realmente el correo electrónico.

Ahora compruebe las cuentas de correo electrónico que aparecen arriba para comprobar si tienes el correo electrónico y todo se ve bien para su presentación.

Paso 10: Enviar Finalmente el parche

Si todo parece estar bien, entonces usted finalmente envía por correo electrónico 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í es que se comprometan de 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!