Linux (ज्यादातर एक उन्नत उपयोगकर्ता के रूप में) के साथ साल के लिए काम करने के बाद, मैं मेरी पहली पोस्ट करने का निर्णय लिया लिनक्स कर्नेल पैच (हालांकि तुच्छ लेकिन हे तुम कहीं शुरू करने की जरूरत है!) और मैं रोमांचित था जब वह पहली बार सबसिस्टम अनुरक्षक द्वारा स्वीकार कर लिया गया और फिर अंततः यह mainline कर्नेल में trickled.

बाद कैसे एक Linux कर्नेल को प्रस्तुत करने के लिए एक कदम दर कदम गाइड है पैच और आशा है कि यह mainline कर्नेल में स्वीकार हो जाता है. यह कैसे करने के लिए एक वास्तविक पैच है कि मैंने लिखा है और प्रस्तुत की और जो mainline कर्नेल में कल स्वीकार किए जाते हैं हो गया है पर आधारित है. गाइड ज्यादातर पैच और तकनीकी जरूरी नहीं Linux कर्नेल के डिजाइन पहलुओं भेजने के यांत्रिकी पर प्रकाश डाला गया है.

चरण 1: Git के उपकरण स्थापित

पहली बात तो हम क्या करने की जरूरत है यकीन है कि हम आवश्यक उपकरण बनाने के लिए और हमारे लिनक्स कर्नेल पैच प्रस्तुत कर रहा है. मैं कैसे करने के लिए इस के लिए मेरे 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 ट्री

अगली बात तुम करना चाहते हो सकता है आपके Linux मशीन पर लीनुस Git के पेड़ अधिमानतः क्लोन है. सुनिश्चित करें कि आप पर्याप्त जगह है (कम से कम 2GB) इससे पहले कि तुम पेड़ क्लोन. इस लेखन के समय पेड़ की कुल आकार 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 मिनट या ऐसा करने के लिए प्रतीक्षा करें, अपने इंटरनेट कनेक्शन की गति पर निर्भर करता है, इससे पहले कि पूरे पेड़ अपनी निर्देशिका में डाउनलोड हो जाता है 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: अपने परिवर्तन करें

अब मैं 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
#

अब हम हमारे प्रतिबद्ध लॉग संदेश में प्रवेश करेंगे. बहुत सावधान रहना आप लॉग संदेश में प्रकार है क्योंकि इन संदेशों को लॉग इन करें और लोगों को प्रतिबद्ध लिनक्स 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 प्रतिबद्ध लॉग में पहचानकर्ता हो जाएगा अपने मुख्य विषय पंक्ति हो जाएगा.

नोट: यह बहुत महत्वपूर्ण है कि आप पहले उपतंत्र जो आपके पैच के अंतर्गत आता है के नाम लिखें. मेरे मामले में जब से मैं x86 आर्किटेक्चर निर्देशिका में reboot.c फ़ाइल संशोधित कर रहा हूँ, मैं 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 फिक्स रिबूट समस्या पर VersaLogic-Menlow - boards.patch बनाना चाहिए:

04056e508c996b023857f8076da7fb54096d10e9 सोम 17 सितम्बर 00:00:00 +२,००१ से
: कुशल Koolwal <kushalkoolwal@gmail.com> से
दिनांक: Sat, 19 फरवरी 2011 13:14:03 -0800
विषय: [1 पैच / 1] x 86: 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 सूचकांक .. 100,644 715037c
- 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 प्रतिबद्ध लॉग की पहली पंक्ति से उठाया गया था. भी विकल्प n पैच संख्या कहते हैं [पैच 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: देखरेख फ़ाइल का संदर्भ लें

अन्य विधि का उल्लेख करने के लिए है देखरेख फ़ाइल है कि कर्नेल स्रोत पेड़ के अंदर उपलब्ध कराई गई है. आप कम से कम ईमेल करने के लिए की जरूरत है सभी लोग हैं, जो उनके नाम से पहले 'एम' के लिए अपने पैच.

नोट: इसके अलावा, आप कम से कम एक मेलिंग सूची के लिए अपने पैच ईमेल की जरूरत है. यदि आप किसी मेलिंग सूची के ऊपर दो तरीकों पर आधारित है,, कि उपतंत्र खिलाफ जो आप अपने पैच प्रस्तुत करने की कोशिश कर रहे हैं के साथ संबंध है मिल करने में सक्षम नहीं हैं तो आप कम से कम लिनक्स कर्नेल मेलिंग सूची के लिए ईमेल (लिनक्स कर्नेल चाहिए @ vger kernel.org).

कदम 9: टेस्ट ईमेल अपने पैच

यद्यपि आप किसी भी ईमेल ग्राहक और SMTP मेजबान है कि आप चाहते हैं और करने के लिए उपयोग इस्तेमाल कर सकते हैं, मैंने पाया कि जीमेल का प्रयोग करने का सबसे अच्छा था, क्योंकि कर्नेल डेवलपर्स के एक बहुत कुछ है कि उपयोग. अब यह बहुत महत्वपूर्ण है कि आप पहली बार इसे भेजने अपने ईमेल पते (अलग मेल प्रदाताओं के साथ अलग ईमेल खाते) द्वारा अपने पैच परीक्षण. मैं निम्नलिखित का उपयोग करें:

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

यहाँ है कि प्रतिबद्ध लॉग इंगो Molnar द्वारा मेरे पैच की स्वीकृति जो फिर और इंगो Molnar पेड़ से स्टीफन Rothwell के लिए trickled लिनक्स अगले पेड़ और अंत में लीनुस Torvald में मुख्य लाइन Linux कर्नेल पेड़.

यह बात है! आपका पहला पैच के साथ गुड लक!

अन्य संबंधित पोस्ट: