HOWTO: создать и отправить первое ядро Linux патч используя GIT
После работы с 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 ядро дерева.
Вот и все! Удачи вам в первый патч!











11 марта 2011 в 9:19
Привет, меня зовут Абдеррахман i'am из Алжира
На первый извините за мой английский.
Вы Debian Система работает как сервер, я хотел бы добавить некоторые услуги, как звездочки и обмена сообщениями, мне нужно copmile ядром для создания пользовательского системы,
моя цель сделать пользовательский Debian, что после инсталляции с компакт-диска CD или живую мою serverice будет готов для запуска, как atsrisk Apache ...
спасибо
Ответить на этот комментарий
7 апреля 2011 в 12:31 утра
Привет,
Спасибо за этот великий HOWTO!
Я думаю, что есть небольшая ошибка. Я думаю, что shold быть "патч-p1 <0001-86-Fix-перезагрузка-задачи-на-VersaLogic-Menlow-boards.patch" вместо "патч-p1 0001-86-Fix-перезагрузка-задачи-на-VersaLogic- Menlow-boards.patch ".
Regard,
Том
Ответить на этот комментарий
21 июня 2011 в 12:11
Отличный HOWTO с тем, что я получил свой участок легко созданы и включены в процесс разработки Linux ядра. Спасибо.
Составление тестов ядра может быть немного сложной для нас newbiez. Вот отличный вики, чтобы помочь в системах Ubuntu:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
Br Томас
Ответить на этот комментарий
30 июня 2011 в 11:36 вечера
Привет,
Вот нечто подобное сосредоточены на встраиваемых - поиск
2010-10 Как сделать GNU / Linux ядро патч - 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 в мой процесс представления кода.
Ответить на этот комментарий