लक्ष्य
मैं उबंटू पर एक साधारण डिवाइस ड्राइवर लिखने की कोशिश कर रहा हूं। मैं यह ग्रहण (या एक बेहतर आईडीई जो ड्राइवर प्रोग्रामिंग के लिए उपयुक्त है) का उपयोग करके करना चाहता हूं। यहाँ कोड है:
#include <linux/module.h>
static int __init hello_world( void )
{
printk( "hello world!\n" );
return 0;
}
static void __exit goodbye_world( void )
{
printk( "goodbye world!\n" );
}
module_init( hello_world );
module_exit( goodbye_world );
मेरा प्रयास
कुछ शोध के बाद, मैंने ड्राइवर को विकसित करने के लिए ग्रहण सीटीडी का उपयोग करने का फैसला किया (जबकि मुझे अभी भी यकीन नहीं है कि यह मल्टी-थ्रेडिंग डीबगिंग टूल का समर्थन करता है)। तो मैं:
- VMWare वर्चुअल मशीन पर Ubuntu 11.04 डेस्कटॉप x86 स्थापित किया गया,
- Synaptic Package Manager का उपयोग करके स्थापित
eclipse-cdtऔर लिनक्स-हेडर-2.6.38-8 , - कोड के ऊपर एक
C ProjectनामांकितTestDriver1और कॉपी-पेस्ट किया गया, - डिफ़ॉल्ट बिल्ड कमांड
makeको निम्न अनुकूलित बिल्ड कमांड में बदल दिया:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
समस्या
मुझे एक त्रुटि मिलती है जब मैं ग्रहण का उपयोग करके इस परियोजना का निर्माण करने की कोशिश करता हूं। यहाँ निर्माण के लिए लॉग है:
**** परियोजना TestDriver1 के लिए कॉन्फ़िगरेशन डिबग का निर्माण ****
Make -C /lib/modules/2.6.38-8-generic/build M = / home / isaac / कार्यक्षेत्र / TestDriver1
मेक: एंटरिंग डाइरेक्टरी '/usr/src/linux-headers-2.6.38-8-generic'
make: ***
vmlinux', needed byसभी को निशाना बनाने का कोई नियम नहीं ’। रूक जा।मेकिंग: 'डाइरेक्ट्री डाइरेक्टरी' /usr/src/linux-headers-2.6.38-8-generic '
दिलचस्प बात यह है कि इस परियोजना के निर्माण के shellबजाय जब मैं उपयोग करता हूं तो मुझे कोई त्रुटि नहीं मिलती है eclipse। उपयोग करने के लिए shell, मैं सिर्फ एक Makefileयुक्त बनाता हूं obj-m += TestDriver1.oऔर बनाने के लिए उपरोक्त makeकमांड का उपयोग करता हूं ।
तो, ग्रहण के साथ कुछ गलत होना चाहिए Makefile। हो सकता है कि यह vmlinuxआर्किटेक्चर (?) या किसी चीज़ की तलाश में है जबकि वर्तमान आर्किटेक्चर x86 है। शायद यह VMWare के कारण है?
जैसा कि मैंने समझा, eclipseमेकफ़ाइल्स को स्वचालित रूप से बनाता है और इसे मैन्युअल रूप से संशोधित करने से भविष्य में त्रुटियां होती हैं या प्रबंध makefileकरना मुश्किल होता है।
इसलिए, मैं इस परियोजना को ग्रहण पर कैसे संकलित कर सकता हूं?
autotoolsजल्द ही प्लगइन की जांच करूंगा । क्या आप ड्राइवर प्रोग्रामिंग के लिए कोई बेहतर आईडीई जानते हैं? क्या आपको लगता है कि मैं (एक आलसी VS उपयोगकर्ता जिनके पास लिनक्स में कोई अनुभव नहीं है) प्रबंधित कर सकता हैmakefile? क्याmakefileवास्तव में बड़ी परियोजनाओं में प्रबंधनीय है?