После работы с 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: клон Линуса 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

Эта команда открыть текстовый редактор в одном окне на экране терминала (мой текст по умолчанию редактор Nano), как это:

# 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-Reboot-проблемы-на-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>
-
архитектура / x86 / ядро / reboot.c | 8 ++++++++
1 файлы, измененные, 8 вставок (+), 0 делеции (-)
Разница -git A / архитектура / 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

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

. Если всё в порядке, то вы, наконец, 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!