विधिपत्र: बनाएँ और GIT का उपयोग कर अपना पहला लिनक्स कर्नेल पैच प्रस्तुत
साल के लिए लिनक्स (ज्यादातर एक उन्नत उपयोगकर्ता के रूप में) के साथ काम करने के बाद, मैं अपने पहले पोस्ट करने का फैसला लिनक्स कर्नेल पैच (तुच्छ लेकिन हे तुम कहीं शुरू करने की जरूरत है, हालांकि!) और मैं तो यह पहली सबसिस्टम अनुरक्षक द्वारा स्वीकार कर लिया गया जब रोमांचित था अंततः यह 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
पूरे पेड़ अपनी निर्देशिका में डाउनलोड हो जाता है अब, इससे पहले अपने इंटरनेट कनेक्शन की गति के आधार पर, 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-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 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 प्रतिबद्ध लॉग की पहली पंक्ति से उठाया गया था कि कैसे ध्यान दें. रेखा: यह भी विकल्प को-n अपने विषय और एस के लिए [पैच 1/1] विकल्प पर हस्ताक्षर किए बंद करके कहते पैच संख्या कहते हैं. पर हस्ताक्षर किए बंद लाइन में उठाया है कि ईमेल आप चरण 1 में सेट है कि अपने Git के विन्यास से उठाया है.
चरण 6: त्रुटियों के लिए अपने पैच की जांच करें
हम इस उद्देश्य के लिए कर्नेल स्रोतों के साथ प्रदान की जाती है कि checkpath.pl कहा जाता है एक perl स्क्रिप्ट है कि हम प्रस्तुत करने की कोशिश कर रहे हैं पैच 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
यहाँ है प्रतिबद्ध लॉग तो इंगो मोलनार के पेड़ से स्टीफन रोथवेल के लिए trickled जो इंगो Molnar द्वारा मेरे पैच की स्वीकृति के लिनक्स अगले पेड़ और अंत में लीनुस Torvald के में मुख्य लाइन लिनक्स कर्नेल पेड़.
यह है! अपना पहला पैच के साथ गुड लक!













9:19 पर 11 मार्च, 2011 हूँ
हे मेरे नाम अल्जीरिया से abderrahmane i'am है
मेरी अंग्रेजी के लिए पहले माफी पर.
आप, मैं तारांकन और संदेश की तरह कुछ सेवा जोड़ने के लिए सर्वर के रूप में चल रहे एक debian प्रणाली चाहते हैं है, मैं एक कस्टम प्रणाली बनाने के लिए कर्नेल copmile करने की आवश्यकता है,
अपने लक्ष्य को सीडी या लाइव सीडी से instalation के बाद मेरे serverice atsrisk अपेक की तरह चलाने के लिए तैयार हो जाएगा कि कस्टम डेबियन बनाने के लिए है ...
बहुत बहुत धन्यवाद
इस टिप्पणी का जवाब दें
12:31 पर 7 अप्रैल 2011 हूँ
हाय,
इस महान howto के लिए धन्यवाद!
मैं एक छोटी सी गलती है लगता है. मैं इसके बजाय "पैच पी 1 0001-86-फिक्स रिबूट की समस्या पर VersaLogic-" पैच पी 1 <0001-86-फिक्स रिबूट की समस्या पर VersaLogic-Menlow-boards.patch "हो shold लगता Menlow-boards.patch ".
सम्मान,
टॉम
इस टिप्पणी का जवाब दें
12:11 बजे 21 जून, 2011
मैं अपने पैच आसानी से बनाया और लिनक्स कर्नेल विकास की प्रक्रिया में शामिल हो गया है के साथ बहुत बढ़िया howto. धन्यवाद.
परीक्षण कर्नेल संकलन हमें newbiez लिए चुनौतीपूर्ण एक छोटा सा हो सकता है. यहाँ Ubuntu सिस्टम पर मदद करने के लिए एक उत्कृष्ट विकी है:
https://wiki.ubuntu.com/KernelTeam/GitKernelBuild .
Br थॉमस
इस टिप्पणी का जवाब दें
23:36 पर 30 जून, 2011
हाय,
यहाँ एम्बेडेड प्रणाली पर ध्यान केंद्रित कुछ इसी तरह की है - के लिए खोज
कैसे एक ग्नू / लिनक्स कर्नेल पैच बनाने के लिए 2010-10 - एंबेडेड लाइव लंदन
http://www.reliableembeddedsystems.com/publications.html
सादर,
रोबर्ट
इस टिप्पणी का जवाब दें
6:59 पर 23 जुलाई 2011 हूँ
कैसे करने के लिए एक स्पष्ट और तकनीकी के लिए धन्यवाद. आप के लिए एक प्रेरणा हैं
डेबियन और लिनक्स समुदाय में हमें.
के बाद से, अगर आप अतिरिक्त पुस्तक संदर्भ औपचारिक स्नातक शिक्षा है ऐसे
कार्यक्रम विफल रहता है क्यों के रूप में सहायक हो सकता है.
http://www.amazon.com/Why-Programs-Fail-Systematic-Debugging/dp/1558608664
इस टिप्पणी का जवाब दें
3:19 पर 25 सितम्बर, 2011 हूँ
मैं अभी भी Ubuntu के बारे में सीख रहा हूँ. सुदूर दूर कर्नेल पैच करने के लिए. Lol
इस टिप्पणी का जवाब दें
11:13 पर 18 अक्टूबर 2011
विधिपत्र पर वास्तव में अच्छा ट्यूटोरियल:. उस के लिए धन्यवाद बनाएँ और GIT का उपयोग कर अपना पहला लिनक्स कर्नेल पैच प्रस्तुत ...
और मैं अपने खुद के ... की एक लिनक्स ब्लॉग है http://www.linuxthebest.com/root-in-ubuntu-tutorial.html
धन्यवाद
इस टिप्पणी का जवाब दें
8:05 पर 25 जनवरी, 2012
[...] मेल, पैच, आदि की शैली के बारे में प्रतिबंधक, गिरी सूची का प्रश्न देखें. लेकिन के सबसे [...] से बचने के लिए एक अच्छा ट्यूटोरियल है
3:48 बजे फ़रवरी 9, 2012
महान प्राइमर के लिए धन्यवाद. अपने कोड प्रस्तुत करने की प्रक्रिया के लिए git जोड़ने की कोशिश कर रहा है.
इस टिप्पणी का जवाब दें
11:10 पर 30 जुलाई, 2012 हूँ
पर एक नज़र रखना
बजे से signoff git
बजाय का उपयोग करने की
पैच पी 1 <
"हूँ git" git प्रतिबद्ध पाठ सहित अपने git के पेड़ के लिए पूर्ण प्रतिबद्ध बढ़ जाएगा. "पैच" केवल स्रोत कोड में परिवर्तन लागू होगी और परिवर्तन git करने के लिए प्रतिबद्ध नहीं होगा.
गलत हो जाता है कि एक प्रतिबद्ध रद्द करने के लिए "बजे से गर्भपात git" का प्रयोग करें.
इस टिप्पणी का जवाब दें
11:45 पर 1 जनवरी 2013 हूँ
[...] गिरी, मैं दिशा निर्देशों के सबसे वहाँ भी लागू है. के रूप में एक गाइड करने के लिए "कैसे", मैं कदम से आदेशों कदम का वर्णन करता है कि वेब पर इस लेख पाया है, वास्तव में, मैं git एक पैच श्रृंखला ईमेल करने में सक्षम है [...]
7:16 पर 9 जनवरी 2013 हूँ
परिचय अच्छा लगा. मैं सिर्फ पहली बार के लिए Git के साथ काम करना शुरू किया - साल के एक नंबर के लिए SVN और CVS का उपयोग के बावजूद. यह काफी दिलचस्प अब तक :) साबित हो गया है
मैं आज रात घर मिलता है जब इस ट्यूटोरियल और अभ्यास की बचत होगी.
काम अच्छा लगा.
इस टिप्पणी का जवाब दें
18:18 पर 30 मार्च 2013
हाय, इस howto के लिए धन्यवाद. मैं अपनी पहली लिनक्स कर्नेल पैच लिखा था, और कल अनुरक्षक के लिए यह ईमेल.
हालांकि, कैसे मैं अपने पैच स्वीकार किया जाता है तो पता है या नहीं कर सकते?
धन्यवाद
इस टिप्पणी का जवाब दें