बदलना मैं एक अलग syscall तालिका के साथ अपना खुद का कस्टम कर्नेल बनाना चाहता था। (एक ही सिस्कोल लेकिन अलग-अलग स्थिति/संख्याओं में)लिनक्स कर्नेल सिस्टम कॉल नंबर
मैं कर्नेल 3.2.2 9 पर काम कर रहा था।
1) चाप में syscall स्थिति बदलने/86/कर्नेल/syscall_table_32.S
2) चाप में syscall मैक्रो नंबर बदलने/86:
गिरी बदलने काफी आसान था /include/asm/unistd_32.h
3) संकलन और नया कर्नेल
मैं syscalls के आसपास बंद कर स्थापित करने: sys_open
sys_read
के स्थान और नंबर ले लिया है, और इसके विपरीत।
मुझे लगा कि अगर मैं संशोधित कर्नेल हेडर के साथ glibc
संकलित करता हूं, तो मेरे पास एक चलने वाली प्रणाली हो सकती है, लेकिन दुर्भाग्य से, यह पर्याप्त नहीं था और मेरा सिस्टम बूट नहीं होगा।
क्या मुझे कुछ याद आ रही है? चलने वाली प्रणाली के लिए मुझे और क्या करने की ज़रूरत है?
चरणों मैं ले लिया है कर रहे हैं:
1) निर्माण और मेरे सवाल
2 में वर्णित) कर्नेल स्थापित करने नया कर्नेल हेडर निकालने make headers_install INSTALL_HDR_PATH=[path]
3) निर्माण का उपयोग कर पैरामीटर --with-headers=[path/include]
4) के साथ glibc 4) मैंने फ़ाइल सिस्टम को बाहरी रूप से एक्सेस करने के लिए एक लाइव सीडी का उपयोग किया नई glibc
स्थापित करते हैं, make install install_root=[the original file system]
(ताकि प्रणाली स्थापित दौरान तोड़ नहीं होगा) का उपयोग कर
मुझे आशा है कि नई glibc
ठीक से बनाया गया था, लेकिन मुझे यकीन नहीं कर रहा हूँ।
उसके बाद, जब सिस्टम बूट, बूट (initrafms) खोल स्क्रीन में बंद हो जाता है: मुझे लगता है मैं initrd
के पुनर्निर्माण की जरूरत है, लेकिन मैं कैसे नई syscall तालिका के अनुसार यह संकलन करते हैं?
कृपया विषय-संबंधी प्रश्नों को बंद न करें, खासकर जब उनके पास उत्थान और उत्तर हों। –
ऐसा क्यों करेगा? –
@ जोनासविएलिकी किसी ने "मददगार" से पहले इसे प्रश्न से संपादित किया, यह समझाया गया कि यह एक नया सिस्कोल जोड़ने के लिए स्कूल के असाइनमेंट के बाद प्रयोग था। संदिग्ध उपयोगिता के दौरान, यहां पर किए गए परिवर्तन निश्चित रूप से ध्यान देते हैं कि चीजें कैसे काम करती हैं और कई निर्भरताएं हैं। ऐसी प्रणाली को हैक करना जो कोई भी निर्भर करता है, चीजों को सीखने का एक शानदार तरीका हो सकता है। स्पष्टीकरण के लिए –