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

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

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

हम क्या करने की जरूरत है पहली बात यह है कि हम बना सकते हैं और हमारे लिनक्स कर्नेल पैच प्रस्तुत करने के लिए आवश्यक उपकरण है कि सुनिश्चित करने के लिए है. मैं यह कैसे करने के लिए के लिए मेरे डेबियन लेनी प्रणाली का उपयोग कर रहा हूँ.

# 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: अपने परिवर्तन करें

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

BIOS के माध्यम से रिबूट करने के लिए छलावा जोड़ें.
कम से कम चार बोर्डों पर परीक्षण किया.

साइन-ऑफ द्वारा: कुशाल Koolwal <kushalkoolwal@gmail.com>
-
कट्टर / x 86 / कर्नेल / reboot.c | 8 ++++++++
1 फ़ाइलें, 8 सम्मिलन (+) 0 विलोपन बदल (-)
रचनाकार एक / चाप / x 86 / कर्नेल / reboot.cb / चाप / x 86 / कर्नेल / reboot.c -git
सूचकांक fc7aae1..715037c 100644
- एक / चाप / x 86 / कर्नेल / reboot.c
+++ बी / चाप / x 86 / कर्नेल / 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 अपने विषय के लिए पैच संख्या [पैच 1/1] कहते हैं और -s विकल्प साइन-बंद-से कहते हैं: लाइन. बंद पर हस्ताक्षर किए लाइन में उठाया है कि ईमेल चरण 1 में सेट है कि अपने Git के विन्यास से उठाया है.

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

अगले हम आदि 80 कॉलम सीमा, से अधिक हम सफेद रिक्त स्थान की तरह किसी भी स्पष्ट त्रुटियों को शामिल नहीं करता है प्रस्तुत करने के लिए कोशिश कर रहे हैं पैच, इस उद्देश्य के लिए कर्नेल स्रोतों के साथ प्रदान की जाती है कि एक पर्ल स्क्रिप्ट बुलाया 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: टेस्ट अपनी पैच ईमेल

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

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

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

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

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