HOWTO: создать и отправить первые ядра Linux патч использовании GIT
После работы с 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 минут или около того, в зависимости от скорости подключения к Интернету, прежде чем все дерево получает загруженный в ваш каталог Майлинукс-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
Эта команда откроет текстовый редактор в том же окне на экране терминала (моя умолчанию текстовый редактор 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-перезагрузка-задачи-на-VersaLogic-Menlow-boards.patch в текущем каталоге, содержание которых будет:
От 04056e508c996b023857f8076da7fb54096d10e9 Пн 17 сентября 2001 00:00:00
Из: Kushal Koolwal <kushalkoolwal@gmail.com>
Дата: Сб, 19 февраля 2011 13:14:03 -0800
Тема: [PATCH 1/1] x86: Исправлена проблема перезагрузки на 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 обратного вызова,
+. Ident = "VersaLogic Menlow плата на базе»,
+. Матчах = {
+ 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 колонки предела, и т.д. Существует 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 файл, который обеспечит в дереве исходных текстов ядра. Вам нужно по крайней мере Ваш E-mail патч для всех людей, которые имеют «М» перед их именем.
Примечание: Кроме того, необходимо, чтобы отправить свою патч по крайней мере одного списка рассылки. Если вы не в состоянии найти любую рассылку, и на основе этих двух методов, которая связана с подсистемой, против которого вы пытаетесь представить ваш патч, то вы должны хотя бы письмо 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
После нажатия попасть, она будет спрашивать ваш пароль учетной записи 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 дерева.
Вот и все! Удачи вам в ваших первого патча!













11 марта 2011 в 9:19 утра
Привет меня зовут Abderrahmane i'am из Алжира
Сначала извините за мой английский.
Вы Debian система работает как сервер, я хотел бы добавить некоторые службы, как звездочки и обмена сообщениями, мне нужно copmile ядро, чтобы заставить пользовательские системы,
моей целью является сделать пользовательский Debian, что после инсталляции с компакт-диска CD или жить своей serverice будет готов для запуска как atsrisk Apache ...
спасибо большое
Ответить на этот комментарий
7 апреля 2011 в 12:31 утра
Привет,
Спасибо за это большое HOWTO!
Я думаю, что есть небольшая ошибка. Я думаю, что Shold быть "патч-P1 <0001-x86-Fix-перезагрузка-задачи-на-VersaLogic-Menlow-boards.patch" вместо "патч-P1 0001-x86-Fix-перезагрузка-задачи-на-VersaLogic- Menlow-boards.patch ".
Regard,
Том
Ответить на этот комментарий
21 июня 2011 в 12:11
Отлично HOWTO, что я получил мой патч легко созданы и включены в процесс разработки Linux ядра. Спасибо.
Компиляция ядра тест может быть немного сложной для нас newbiez. Вот прекрасная Вики, чтобы помочь на системах Ubuntu:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
Тормозной Томас
Ответить на этот комментарий
30 июня 2011 в 11:36 вечера
Привет,
Вот нечто подобное сосредоточены на встраиваемых систем - Поиск
2010-10 Как сделать GNU / Linux Kernel Patch - Embedded Живая Лондоне
http://www.reliableembeddedsystems.com/publications.html
С уважением,
Роберт
Ответить на этот комментарий
23 июля 2011 в 6:59 утра
Спасибо за четкую и технические инструкции. Вы служат источником вдохновения для
нам в сообщество Debian и Linux.
Так, у вас есть формальное образование выпускник, дополнительные ссылки такие книги
Как Почему программы невозможно может быть полезным.
http://www.amazon.com/Why-Programs-Fail-Systematic-Debugging/dp/1558608664
Ответить на этот комментарий
25 сентября 2011 в 3:19 утра
Я все еще учусь об Ubuntu. Далеко патч ядра. Lol
Ответить на этот комментарий
18 октября 2011 в 11:13 вечера
действительно хороший учебник по HOWTO:. создать и отправить первые ядра Linux патч использовании GIT Спасибо за это ...
и у меня есть Linux блог моего собственного ... http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
спасибо
Ответить на этот комментарий
25 января 2012 в 8:05 вечера
[...] Ограничительных о стиле почте, патч, и т.д., см. справку ядра списке. Но есть хороший учебник, чтобы избежать большей части [...]
9 февраля 2012 в 3:48 вечера
Спасибо большое за грунт. При попытке добавить Git к моему процессу представления кода.
Ответить на этот комментарий
30 июля 2012 в 11:10
Посмотреть на
AM-мерзавец SIGNOFF
вместо использования
патч-P1 <
"Мерзавец AM" добавят полной фиксации вашего дерева Git Git включая фиксацию текста. «Заплатки» будет применяться только изменения исходного кода и изменения не будут привержены Git.
Используйте "мерзавец AM-Отмена", чтобы отменить фиксацию, что пойдет не так.
Ответить на этот комментарий
1 января 2013 в 11:45
[...] Ядро, я думаю, большинство из правила применяются и там. Как "как" руководство, я нашел эту статью в Интернете, который описывает команды шаг за шагом, а на деле, Git может письмо патч серии [...]
9 января 2013 в 7:16
Ницца интро. Я только начал работать с Git в первый раз - несмотря на использование SVN и CVS в течение ряда лет. Это было довольно интересно доказывает до сих пор :)
Спасет этот урок, и практике, когда я возвращаюсь домой сегодня вечером.
Хорошая работа.
Ответить на этот комментарий
30 марта 2013 в 6:18 вечера
Привет, спасибо за этот документ. Я написал свой первый патч для ядра Linux, и отправить его сопровождающему вчера.
Тем не менее, как я могу знать, если мой патч принято или нет?
спасибо
Ответить на этот комментарий