2010-10-22 7 views
5

में सिस्टमकॉल कहां जोड़ूं, मैं लिनक्स उबंटू कर्नेल के एक नए संस्करण में एक नया helloworld सिस्टम कॉल जोड़ने की कोशिश कर रहा हूं। मैं वेब पर देख रहा हूं लेकिन मुझे यह दिखाने के लिए एक सतत उदाहरण नहीं मिल रहा है कि मुझे कर्नेल में नरकवर्ल्ड सिस्टम कॉल को जोड़ने के लिए संशोधित करने के लिए कौन सी फाइलें संशोधित करनी होंगी।मैं लिनक्स कर्नेल स्रोत

मैंने कई कोशिश की है और संकलन त्रुटि हुई है। मुझे पता है कि कर्नेल को संकलित कैसे करें, लेकिन मुझे नहीं पता कि मैं अपना सी प्रोग्राम सिस्टम कॉल कहां जोड़ता हूं, और जहां मैं इस कॉल को सिस्टम कॉल टेबल में जोड़ता हूं और मुझे कुछ और करना है।

मैं नवीनतम लिनक्स उबंटू कर्नेल पर काम कर रहा हूं।

मैं एक नई प्रणाली कॉल शुरू की, एक सरल कॉल बुलाया mycall साथ कर्नेल संकलित, अब मुझे लगता है कि कॉल का परीक्षण होगा अपने आवेदन के हैडर फ़ाइल में त्रुटियों संकलन हो रही है, नीचे मेरी हेडर फ़ाइल है

#include<linux/unistd.h> 

#define __NR_mycall 317 

_syscall1(long, mycall, int, i) 

यह सिंटेक्स त्रुटि मैं

[email protected]:~$ gcc -o testmycall testmycall.c 
In file included from testmycall.c:3: 
testmycall.h:7: error: expected declaration specifiers or ‘...’ before ‘mycall’ 
testmycall.h:7: error: expected declaration specifiers or ‘...’ before ‘i’ 
testmycall.c: In function ‘_syscall1’: 
testmycall.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token 
testmycall.h:7: error: parameter name omitted 
testmycall.h:7: error: parameter name omitted 
testmycall.c:11: error: expected ‘{’ at end of in 

हो रही है मैं निकोलाई एन Fetissov

+0

आपने क्या प्रयास किया? क्या संकलन त्रुटियां हुईं? [क्या यह अभी भी होमवर्क है?] (Http://stackoverflow.com/questions/3977675/i-need-information-on-system-calls-and-understanding-them) - कृपया इस तरह के टैग करें। उस प्रश्न के उत्तर में जुड़ा आलेख सामान्य सिद्धांतों के लिए अच्छा है, मुझे लगता है, हालांकि थोड़ा सा पुराना है, क्योंकि कर्नेल विकास तेजी से आगे बढ़ता है। एक युक्ति: पुरानी संस्करणों में 'आर्क/i386' में होने वाली चीजें अब' arch/x86' (32-बिट और 64-बिट सामग्री विलय हो गई हैं) में हैं। [एलएक्सआर] (http://lxr.linux.no/linux) वर्तमान या पुराने कर्नेल संस्करणों को खोजने के लिए उपयोगी है। –

+0

http://tldp.org/HOWTO/html_single/Implement-Sys-Call-Linux-2.6-i386/ –

+0

मैं दुर्घटना से संकलन त्रुटि से छुटकारा पा लिया, मैं फिर कोशिश करूंगा और यदि यह आता है तो मैं पोस्ट संपादित करूंगा त्रुटि के साथ, आर्क/x86 पर सलाह के लिए ठीक चीयर्स, अब यह कोशिश कर रहे हैं, लगभग एक घंटे में वापस आ जाएगा जब मैं यह सब किया और संकलन भी !!!!! – molleman

उत्तर

3

'_syscall1 से नीचे दिए गए लिंक से मदद का एक बहुत कुछ मिल गया है 'मैक्रो जो आप उपयोग कर रहे हैं अप्रचलित है। इसके बजाय syscall (2) का प्रयोग करें।

उदाहरण:

#include <stdio.h> 
#include <linux/unistd.h> 
#include <sys/syscall.h> 

#define __NR_mysyscall  317 

int main(void) 
{ 
     long return_value; 

     return_value = syscall(__NR_syscall); 

     printf("The return value is %ld.\n", return_value); 

     return 0; 
} 
0

2 अध्याय, ऑपरेटिंग सिस्टम principles- Galvin। सीधे आगे की प्रक्रिया।

+0

पोस्ट करते समय कृपया 'हस्ताक्षर' शामिल न करें; आपका उपयोगकर्ता बॉक्स पहले से ही आपका नाम दिखाता है। इसके अलावा ... मुझे यकीन नहीं है कि यह जवाब क्या है। –