После работы с Linux (в основном в качестве продвинутого пользователя) в течение многих лет, я решил разместить свой ​​первый патч для ядра 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: Клон Линуса 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 минут или около того, в зависимости от скорости подключения к Интернету, прежде чем все дерево получает загруженный в ваш каталог Майлинукс-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: Внесите изменения

Теперь я собираюсь сделать изменения в файле arch/x86/kernel/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
От: Kushal Koolwal <kushalkoolwal@gmail.com>
Дата: Сб, 19 февраля 2011 13:14:03 -0800
Тема: [PATCH 1/1] x86: Fix проблему перезагрузки на VersaLogic Menlow плат.
Платы на VersaLogic Menlow повесить при перезагрузке, если не используется перезагрузка = BIOS.

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

Подпись-офф-по: Kushal Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
1 файлы изменились, 8 вставок (+), 0 делеции (-)
Разница-мерзавец a/arch/x86/kernel/reboot.cb/arch/x86/kernel/reboot.c
Индекс fc7aae1 .. 715037c 100644
- A/arch/x86/kernel/reboot.c
+ + + B/arch/x86/kernel/reboot.c
@ @ -285,6 +285,14 @ @ Статическая структура dmi_system_id __ initdata reboot_dmi_table [] = {
DMI_MATCH (DMI_BOARD_NAME, "P4S800"),
}
}
+ {/ * Проблемы ручка с перезагрузкой на VersaLogic Menlow плат * /
+. Обратного вызова = set_bios_reboot,
+. Идент = "основана VersaLogic Menlow доска",
+. Соответствует = {
+ DMI_MATCH (DMI_BOARD_VENDOR, "VersaLogic Корпорация»),
+ DMI_MATCH (DMI_BOARD_NAME, "VersaLogic Menlow доска"),
+},
+},
{}
};
-
1.7.2.3

Обратите внимание, как имя файла был выбран из вашей первой линии Git совершить журнал. Также опция-н добавляет номер патча [PATCH 1/1] к объекту съемки и-ы опция добавляет подпись-офф-по: линия. В письме, которое взял в подписанном в автономном режиме определена от конфигурации вашего 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: Получить список людей представить патч

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

Метод 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: Наконец Присылайте ваши патч

. Если все выглядит прямо тогда вы, наконец, напишите ваш патч на основе списка людей, которых вы нашли в шаге 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!