विधिपत्र: बनाएँ और अपना पहला लिनक्स कर्नेल GIT का उपयोग कर पैच प्रस्तुत
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 कर्नेल पेड़.
यह बात है! आपका पहला पैच के साथ गुड लक!











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