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

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

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

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

(आप आदेश में निर्दिष्ट किया है के बाद से निर्देशिका बनाया जाएगा स्वचालित) पूरे पेड़ अपनी निर्देशिका mylinux-2.6 में डाउनलोड हो जाता है अब, इससे पहले अपने इंटरनेट कनेक्शन की गति के आधार पर 30 मिनट या ऐसा करने के लिए प्रतीक्षा करें. कोई घपला हमेशा अपने परिवर्तन अन्य डेवलपर्स द्वारा किए गए परिवर्तनों के साथ संघर्ष नहीं हो सकता है कि सुनिश्चित करने के लिए इस पेड़ के खिलाफ किया जाना चाहिए.

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-86-फिक्स रिबूट समस्या पर VersaLogic-Menlow-boards.patch जिनकी सामग्री हो जाएगा अपने मौजूदा निर्देशिका में बनाना चाहिए:

04056e508c996b023857f8076da7fb54096d10e9 सोम सितम्बर 17 00:00:00 2001 से
से: कुशाल Koolwal <kushalkoolwal@gmail.com>
तिथि: शनि, 19 फ़रवरी 2011 13:14:03 -0800
विषय: [पैच 1/1] x 86: VersaLogic Menlow बोर्डों पर रिबूट समस्या को ठीक करें.
रिबूट = BIOS प्रयोग किया जाता है जब तक VersaLogic Menlow आधारित बोर्डों रिबूट पर लटका.

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 100,644
- 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] कहते हैं और एस विकल्प पर हस्ताक्षर किए बंद करके कहते हैं: रेखा. बंद पर हस्ताक्षर किए लाइन में उठाया है कि ईमेल आप चरण 1 में सेट है कि अपने Git के विन्यास से उठाया है.

चरण 6: त्रुटियों के लिए अपने पैच की जांच करें

अगले हम इस उद्देश्य के लिए कर्नेल स्रोतों के साथ प्रदान की जाती है कि checkpath.pl नामक एक पर्ल स्क्रिप्ट है आदि, 80 स्तंभ सीमा से अधिक है, हम प्रस्तुत करने की कोशिश कर रहे हैं पैच सफेद रिक्त स्थान की तरह किसी भी स्पष्ट त्रुटियों शामिल नहीं है कि यह सुनिश्चित करने की जरूरत है :

# 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: टेस्ट अपने पैच ईमेल

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

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

आप हिट दर्ज करने के बाद, यह आप वास्तव में ईमेल भेजने के लिए आदेश में प्रवेश करने की जरूरत है जो आपके जीमेल खाते के पासवर्ड के लिए पूछेंगे.

अब आप ईमेल मिला है और सब कुछ प्रस्तुत करने के लिए अच्छा लग रहा है सत्यापित करने के लिए ऊपर दिए गए ईमेल खातों की जाँच करें.

कदम 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 के पेड़ से trickled जो इंगो Molnar द्वारा मेरे पैच की स्वीकृति के लिनक्स अगले पेड़ और अंत में लीनुस Torvald के में मुख्य लाइन लिनक्स कर्नेल पेड़.

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

मिलनसार होना, शेयर!