2012-07-29 15 views
16

पर नया ड्राइवर कोड जोड़ना मैंने एक लिनक्स डिवाइस ड्राइवर विकसित किया है। अभी तक मैं इसे उबंटू 12.04 पर बांह के लिए क्रॉस-कंपाइलर के साथ संकलित कर रहा हूं और फिर इसे अपने हाथ लिनक्स छवि में घुमा रहा हूं। लेकिन मैं सीखना चाहता हूं कि मैं इसे लिनक्स स्रोत कोड में कैसे जोड़ सकता हूं और बांह लिनक्स के कॉन्फ़िगरेशन के माध्यम से जोड़ने/निकालने का विकल्प देता हूं, ताकि मैं इसे लिनक्स स्रोत कोड संकलन के साथ संकलित कर सकूं?लिनक्स स्रोत कोड

कोई विचार?

उत्तर

3

पैच बनाएं और कर्नेल टैरबॉल को कम करने और कॉन्फ़िगरेशन/संकलन से पहले एक चरण के रूप में इस पैच को लागू करना जोड़ें।

6

आपको कर्नेल स्रोत उपनिर्देशिका की Kconfig फ़ाइल में कॉन्फ़िगरेशन विकल्प जोड़ने की आवश्यकता है जिसमें आपका डिवाइस ड्राइवर रखा जाएगा। आपको उस निर्देशिका के मेकफ़ाइल में लाइन जोड़ने की भी आवश्यकता है। जाहिर है आपको स्रोत फ़ाइलों को उस निर्देशिका में कॉपी करने की आवश्यकता है।

के बाद से अपने ड्राइवर एआरएम वास्तुकला पर निर्भर करता है, Kconfig में, आप में से एक विकल्प लगाने की जरूरत है की तरह 'पर निर्भर करता है':

config SND_ARMAACI 
tristate "ARM PrimeCell PL041 AC Link support" 
depends on ARM_AMBA 

और अपने Makefile

obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o 
snd-aaci-objs  := aaci.o 

की तरह दिखाई देगा तो अब जब आप अपने कर्नेल स्रोत पेड़ में मेनकॉन्फिग बनाते हैं, तो आपको कॉन्फ़िगरेशन में कॉन्फ़िगर किया गया कॉन्फ़िगरेशन विकल्प मिलेगा और आप इसे कर्नेल में संकलित करने के लिए चुन सकते हैं या मॉड्यूल के रूप में निर्मित या बिल्कुल संकलित नहीं कर पाएंगे।

आपके ड्राइवर का उपप्रणाली निर्देशिका में उदाहरणों की खोज करें।

+0

आपके उत्तर के लिए धन्यवाद। मैंने इसे समझ लिया और जैसा आपने उल्लेख किया वही किया। लेकिन अब एक नई समस्या है। जब मैं अपने ड्राइवर कोड को मॉड्यूल के रूप में संकलित करता हूं और लिनक्स कर्नेल में इन्सोड करता हूं, तो मैं अपने डिवाइस को/dev/के अंतर्गत बनाया जा सकता हूं। लेकिन जब मैं अपना कोड कर्नेल पेड़ में डालता हूं और कर्नेल संकलित करता हूं तो मैं अपने डिवाइस को/dev के नीचे नहीं देख सकता। कृपया ध्यान दें कि मैं डिवाइस नोड बनाने के लिए class_create() और device_create() का उपयोग कर रहा हूं। इसके अलावा मैंने ऊपर वर्णित तरीके से कर्नेल पेड़ में अपना कोड जोड़ा है। – Ravi

+0

क्या आपने ड्राइवर को बनाया है। यानी ड्राइवर को हाइलाइट करें और 'वाई' दबाएं ताकि यह तारांकन के साथ उपसर्ग हो: [*] – microMolvi

35

हाथ आर्किटेक्चर में अपने स्वयं के ड्राइवर को संकलित करने के लिए आपको नीचे बताए गए कुछ चरणों का पालन करना होगा।

  1. एक अपने ड्राइवर के लिए my_drvr अंदर ड्राइवरों की तरह निर्देशिका (जो लिनक्स स्रोत कोड में है) बनाएँ और अपने ड्राइवर (my_driver.c) इस निर्देशिका के अंदर फाइल डाल दिया। ऐसा लगता है कि /linux_source_code/drivers/my_drvr/my_driver.c

  2. अपने ड्राइवर निर्देशिका के अंदर एक Makefile पैदा करेगा (vi किसी भी संपादक का उपयोग) और इस obj-$(CONFIG_MY_DRIVER) += my_driver.o रख दिया और इस फ़ाइल को सहेजने के अंदर।हो जाएगा ताकि /linux_source_code/drivers/my_drvr/Makefile

  3. की तरह आपके ड्राइविंग निर्देशिका (vi किसी भी संपादक का उपयोग) के अंदर एक Kconfig फ़ाइल बनाएं और इस के अंदर डाल

    config MY_DRIVER 
    tristate "my driver" //gives your driver description like vendor name etc. 
    depends on ARM 
    default y if ARM 
    help 
        my driver module.
  4. सहेजें इस फाइल, इस वसीयत /linux_source_code/drivers/my_drvr/Kconfig

  5. तरह दिखाई देता है लिनक्स स्रोत ड्राइवर Makefile और Kconfig फ़ाइल में औरपर Makefile और Kconfig फ़ाइल दोनों जोड़ें

  6. में Makefile अंतिम पंक्ति में नीचे जोड़ने

     obj-y += my_drvr/

    या

     obj-$(CONFIG_MY_DRIVER) += my_drvr/
  7. Kconfig फ़ाइल में अंतिम पंक्ति में नीचे जोड़ने

    source "drivers/my_drvr/Kconfig"
  8. अंत में जोड़ने के लिए वास्तुकला में Kconfig फ़ाइल pecific कॉन्फ़िग फ़ाइल जो इस में kernel_source/arch/arm/configs/--defconfig पर किया जाएगा पिछले

    नोट में
    CONFIG_MY_DRIVER=y

रेखा से नीचे जोड़ें: - पिछले कदम अपनी वास्तुकला के अनुसार अलग होगा, ताकि आप ध्यान रखना है। अब आप कमांड का उपयोग करके अपने ड्राइवर को संकलित कर सकते हैं। (उदाहरण: sun7i_defconfig)

+1

उत्कृष्ट। सटीक और संक्षिप्त। धन्यवाद। –

संबंधित मुद्दे