После работы с 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: клон Линуса 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-x 86-Fix-перезагрузки-проблемы-на-VersaLogic-Menlow-boards.patch в текущем каталоге, содержание будет:

От 04056e508c996b023857f8076da7fb54096d10e9 Пн 17 сентября 2001 00:00:00
От: Кушаль 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 добавляет завизированы-по: линия. E-mail, который взял в подписанном в автономном режиме определена из конфигурации вашего 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!