После работы с Linux (в основном в качестве продвинутого пользователя) в течение многих лет, я решил разместить свой ​​первый ядра патч Linux (хотя тривиально, но эй вы должны чего-то начинать!), и я был в восторге, когда он впервые был принят подсистемы сопровождающего, а затем в конечном счете, это попадает к магистральной ядра.

Далее следует шаг за шагом руководство о том, как представить ядра Linux патч и надеемся, что она будет принята в основную ветку ядра. В этом документе мы основывается на фактическом патч, который я написал и представления, а какой был принят в основную ветку ядра вчера. Руководство в основном освещает механику отправки исправлений и не обязательно технические аспекты конструктивные ядра Linux.

Шаг 1: Установка Git Инструменты

Первое, что мы должны сделать, чтобы убедиться, что у нас есть все необходимые инструменты для создания и представления нашего ядра патч Linux. Я использую мою систему Debian Lenny для этого как-бы.

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

Кроме того, это хорошая идея, чтобы настроить некоторые несколько параметров, которые Git будет использовать, когда она генерирует патч:

# git config --add user.name "Kushal Koolwal"
# git config --add user.email "kushalkoolwal@gmail.com"

Шаг 2: Clone Линуса Git дерево

Следующее, что вы можете сделать, это клонировать Git дерево Линуса предпочтительно на вашем компьютере Linux. Убедитесь, что у вас достаточно места (по крайней мере, 2 Гб), прежде чем вы клонировать дерево. На момент написания этой статьи общий размер дерева было около 950+ Мб.

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

Теперь ждать в течение 30 минут или около того, в зависимости от скорости подключения к Интернету, прежде чем все дерево получает загружены в ваш каталог mylinux-2,6 (каталог будет создан автоматически, так как вы указали в команде). Любой лоскутное всегда должно быть сделано на этом дереве, чтобы убедиться, что ваши изменения не могут конфликтовать с изменениями, сделанными другими разработчиками.

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#

Здесь и далее все работы будут производиться в /usr/src/mylinux-2.6 каталоге.

Шаг 3: Теперь создайте местное отделение, чтобы сделать изменения

По умолчанию, когда вы клонировать Git дерево вы в главной ветке.

# git branch
* master
#

* Выше показывает текущее филиал.

Давайте создадим новый филиал мои MenlowRebootFix в которых мы будем делать наши изменения кода:

# git branch MenlowRebootFix

Тогда вам нужно пойти в кассу выше вновь созданный филиал:

# git checkout MenlowRebootFix

Убедитесь, что вы находитесь в выше отрасли:

# git branch
*MenlowRebootFix
master
#

Шаг 4: Внесите изменения

Теперь я собираюсь внести изменения в арки / x86 / ядра / файла reboot.c. После того как вы сделали изменения в файле и сохранили его дать следующую команду:

# git commit -a

Приведенная выше команда откроет текстовый редактор в том же окне на экране терминала (мой текст по умолчанию редактор нано) так:

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

Теперь мы будем вводить наш сообщение журнала при фиксации. Будьте очень осторожны, что вы печатаете в сообщении журнала, потому что эти сообщения станут частью Linux Git дерева совершить журнал, и люди будут искать ваш фиксации на основе этих сообщений. Вот что я набрал в и вот что мой окончательный окно редактора посмотрел его:

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
#

Теперь текст в синий цвет станет вашим основным предметом линия патча, который вы будете электронной почте и станет также идентификатор в Git совершить журнал.

Примечание: Очень важно, чтобы вы сначала введите имя подсистемы, к которым ваш патч принадлежит. В моем случае, так как я изменив файл reboot.c в каталоге x86 архитектуры, я начинаю по теме с x86:.

После этого вам нужно оставить один пустой строки. и введите краткое описание вашего изменения (в бордовом цвете), который станет изменений в Git совершить журнал.

Не беспокойтесь о тексте в оранжевый цвет, который начинается с символа #. Те будут игнорироваться Git совершить.

and description , your description will become part of the subject line and it will be all mess. Примечание: Если вы не оставите одну пустую строку между объектом и описанием, ваше описание станут частью сюжетной линии и все будет беспорядок.

Шаг 5: Создание собственной патч


Так что теперь у вас есть совершить свой патч в локальном репозитории Git, пора произвести патч, который мы вышлем на соответствующих сопровождающих и списков рассылки. Для создания патча просто дать следующую команду:

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

Это должно создать файл 0001-x86-Fix-перезагрузки-проблемы-на-VersaLogic-Menlow-boards.patch в текущем каталоге, содержание будет:

От 04056e508c996b023857f8076da7fb54096d10e9 Пн 17 сентября 00:00:00 2001
От: Кушаль Koolwal <kushalkoolwal@gmail.com>
Дата: Сб, 19 февраля 2011 13:14:03 -0800
Тема: [PATCH 1/1] x86: Fix проблема перезагрузки на VersaLogic Menlow плат.
Платы на VersaLogic Menlow повесить при перезагрузке, если не используется перезагрузка = BIOS.

Добавить причуда для перезагрузки через BIOS.
Проверено на по крайней мере, четырех досках.

Подписан-офф-по: Кушаль Koolwal <kushalkoolwal@gmail.com>
-
арка / x86 / ядро / reboot.c | 8 ++++++++
1 файлов изменилось, 8 вставок (+), 0 удалений (-)
дифференциал -git с / арки / x86 / ядро / reboot.cb / арки / x86 / ядра / reboot.c
Индекс fc7aae1..715037c 100644
- / Арки / x86 / ядро / reboot.c
+++ Б / арки / x86 / ядро / reboot.c
@@-285,6 +285,14@@Статическая структура dmi_system_id __initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME, "P4S800"),
},
},
+ {/ * Обработка проблемы с перезагрузкой на VersaLogic Menlow плат * /
+ .callback = Set_bios_reboot,
+ .ident = "VersaLogic Menlow основе платы",
+ .matches = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic корпорация"),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow доска"),
+},
+},
{}
};
-
1.7.2.3

Обратите внимание, как имя файла был выбран из вашей первой линии Git фиксации входа. Также опция -n добавляет номер патча [PATCH 1/1] к объекту и опция -s добавляет Signed-офф-о: линия. В письме, которое взял в подписанном от линии определена из конфигурации вашего Git, что вы установили на шаге 1.

Шаг 6: Проверьте патч для ошибки

Далее нам нужно убедиться, что патч мы пытаемся представить не содержит явных ошибок, как пробелы, более 80 предел столбца и т.д. Существует Perl скрипт называется checkpath.pl что обеспечивается исходники ядра для этой цели :

# scripts/checkpatch.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

и вы должны увидеть что-то вроде этого:

Выход:

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.

Есть и другие сценарии также предоставляемые внутри исходного кода ядра, чтобы исправить / убрать свой патч, как:

scripts/cleanfile
scripts/cleanpatch

Шаг 7: Проверка патч

Опять это очень важно, что вы применить патч к Линуса Git дерева, скомпилировать его и проверить его перед отправкой патч выше.

# 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

Шаг 8: Получить список людей, чтобы представить патч

Предполагается, что ваш патч скомпилирован, работал, как вы хотите его и тестовые письма выглядели хорошо на следующий шаг, чтобы получить список касаются людей, которым вы должны e-mail вашего патча. Есть два способа сделать это:

Способ 1. Использование сценария, представленную в исходных текстах ядра

# scripts/get_maintainer.pl 0001-x86-Fix-reboot-problem-on-VersaLogic-Menlow-boards.patch

Выход:

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

Способ 2: Обратитесь к файлу MAINTAINERS

Другой метод, чтобы обратиться к MAINTAINERS файл, который обеспечивает внутри дерева исходных кодов ядра. Вам нужно по крайней мере, напишите свой ​​патч для всех людей, которые имеют "M" до их имени.

Примечание: Кроме того, необходимо, чтобы ваш электронный пластырь, чтобы по крайней мере один список рассылки. Если вы не в состоянии найти любую почтовую рассылку, основываясь на вышеуказанных двух методов, то есть связаны с подсистемой, против которого вы пытаетесь представить свой ​​патч, то вы должны, по крайней мере, по электронной почте, чтобы Linux Kernel почтовой рассылки (Linux-ядро @ vger .kernel.org).

Шаг 9: Тест Присылайте ваши патч

Хотя вы можете использовать любой почтовый клиент и хост SMTP, что вы хотите, и иметь доступ к, я обнаружил, что с помощью Gmail был лучшим, так как много разработчиков ядра использовать. Сейчас очень важно, чтобы вы сначала протестировать патч, посылая ему свои собственные адреса электронной почты (возможный различный адрес электронной почты с разных почтовых служб). Я использую следующие:

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

После того как вы попали введите, он будет просить для вашего Gmail счета паролем, который вы должны ввести для того, чтобы на самом деле отправить письмо.

Теперь проверьте учетные записи электронной почты, перечисленные выше, чтобы проверить, если вы получили письмо, и все выглядит хорошо для представления.

Шаг 10: Наконец Присылайте ваши патч

. Если всё в порядке, то вы, наконец, на e-mail ваш патч на основе списка людей, которых вы нашли в шаге 8 Это то, что я на самом деле закончил с использованием:

# 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

Вот что совершают журнал о принятии моего патча Инго Молнар, которые затем сочилась из дерева Инго Молнара к Стивена Ротвелла Linux-рядом дерева и, наконец, в Линуса Торвальда магистральных ядра Linux дерева.

Это так! Удачи вам в вашем первом патче!

Быть общительным, Share!