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

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

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

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

# 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 + 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: Внесите изменения

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

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

Подпись-офф за: Кушал Koolwal <kushalkoolwal@gmail.com>
-
arch/x86/kernel/reboot.c | 8 + + + + + + + +
Файлов: 1 изменилась, 8 вставок (+), 0 удаления (-)
разн.-git 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 файл, который обеспечивает в дереве исходных текстов ядра. Вам нужно по крайней мере, электронная почта патч для всех людей, которые «М» перед его именем.

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

После того, как вы нажмете enter, он будет просить для 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 ядро дерева.

Вот и все! Удачи вам в первый патч!

Другие по теме: