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

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

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

Первое, что мы должны сделать, чтобы убедиться, что у нас есть все необходимые инструменты для создания и представления нашей Kernel Patch 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+ 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

Теперь ждать в течение 30 минут или около того, в зависимости от скорости подключения к Интернету, прежде чем все дерево получает загруженных в каталоге Майлинукс-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-86-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 добавляет завизированы-о: линия. В письме, которое взял в подписанном в автономном режиме определена от конфигурации вашего Git, что вы установили на шаге 1.

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

Далее нам нужно, чтобы убедиться, что патч мы пытаемся представить не содержит явных ошибок, как пробелы, более 80 предел столбца и т.д. Существует Перл называется 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!