Después de trabajar con Linux (en su mayoría como un usuario avanzado) durante años, he decidido publicar mi primer parche del kernel 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 se goteó 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 CÓMO ACTUAR se basa en un parche real que escribí y presenté y que fue aceptado en núcleo principal de ayer. La guía destaca sobre todo la mecánica del envío de parches y aspectos de diseño no necesariamente técnicos del kernel Linux.

Paso 1: Instalar herramientas Git

Lo primero que tenemos que hacer es asegurarse de que tenemos las herramientas necesarias para crear y presentar nuestro parche para el kernel Linux. Estoy usando mi sistema Debian Lenny para este CÓMO ACTUAR.

# 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 era 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 su mylinux-2.6 directorio (directorio se creará automáticamente desde que ha especificado en el comando). Cualquier patchwork siempre debe hacerse contra 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 hará en /usr/src/mylinux-2.6 directorio.

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 * anterior indica 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 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í es lo que he escrito y he aquí lo que la ventana de mi último 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 línea de asunto principal de la revisión que se 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 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 su parche en el 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: Sáb, 19 de febrero 2011 13:14:03 -0800
Asunto: [PATCH 1.1] x86: Solucionar 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 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 ficheros 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 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

Nótese cómo el nombre del archivo fue recogido de su primera línea de la Git registro de confirmación. También el -n opción agrega el número de parche [PATCH 1.1] para el sujeto y la opción de s agrega 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: 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 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 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 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 para

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 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 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 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 la 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: Prueba email tu 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 diferente posible 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 pulsa enter, 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 más arriba para verificar si usted tiene 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 usted 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í es que se comprometan registro de la aceptación de mi parche por 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!