लिनक्स कर्नेल: अच्छे शुरुआती ट्यूटोरियल [बंद]


52

मैं अपनी निजी मौज-मस्ती के लिए कर्नेल इंटर्न को संशोधित करने, पैच लगाने, डिवाइस ड्राइवरों और मॉड्यूल को संभालने में रुचि रखता हूं।

क्या कर्नेल हैकिंग के लिए एक व्यापक संसाधन है, जिसका उद्देश्य अनुभवी प्रोग्रामर के लिए है?


7
अजीब बात है कि इस तरह के विचारों और वोटों के साथ एक प्रश्न को ऑफ-टॉपिक के रूप में कैसे बंद किया जाता है।
योइमोसो

1
ड्यूरा लेक्स सेड लेक्स।
एडम मटन

1
Rectificare sapientis est
YoMismo

ज़रूर। सब के बाद, quidquid लैटीन तानाशाह अल्टम videtur बैठते हैं।
एडम मटन

XDDDD काफी सच है
YoMismo

जवाबों:


33
**TODO** +editPic: Linux Kernel Developer -> (Ring Layer 0)
         +addSection: Kernel Virtualization Engine

KERN_WARN_CODING_STYLE: Do not Loop unless you absolutely have to.

Uninitialized के लिए अनुशंसित पुस्तकेंvoid *i

"पुरुष पुस्तकों को तब तक नहीं समझते हैं जब तक उनके पास एक निश्चित मात्रा में जीवन नहीं होता है, या किसी भी दर पर कोई भी व्यक्ति एक गहरी पुस्तक को नहीं समझता है, जब तक कि वह अपनी सामग्री का कम से कम हिस्सा नहीं देख और जी लेता है"। -ईज़रा पाउंड

एक हजार कोड-मील की यात्रा एक कदम के साथ शुरू होनी चाहिए। यदि आप असमंजस में हैं कि निम्नलिखित में से कौन सी किताब शुरू करें, तो चिंता न करें, अपनी पसंद का कोई भी विकल्प चुनें। भटकने वाले सभी लापता नहीं हुए हैं। जैसा कि सभी सड़कें अंततः राजमार्ग से जुड़ती हैं , आप अपनी कर्नेल यात्रा में नई चीजों का पता लगाएंगे क्योंकि पृष्ठ बिना किसी मृत छोर को पूरा किए प्रगति करते हैं, और अंततः से कनेक्ट होते हैं code-set। सतर्क दिमाग के साथ पढ़ें और याद रखें: कोड साहित्य नहीं है

जो बचा है वह कोई चीज या भाव या छवि या मानसिक चित्र या स्मृति या विचार भी नहीं है। यह एक समारोह है। किसी प्रकार की एक प्रक्रिया। जीवन का एक पहलू जिसे कुछ "बड़े" के कार्य के रूप में वर्णित किया जा सकता है। और इसलिए, ऐसा प्रतीत होता है कि यह वास्तव में उस चीज़ से "अलग" नहीं है। चाकू के कार्य की तरह - कुछ काटना - वास्तव में, चाकू से खुद को अलग करना नहीं है। फ़ंक्शन इस समय उपयोग में हो सकता है या नहीं भी हो सकता है, लेकिन यह संभवतः अलग है।

सोलोवे स्ट्रैसेन डेराइज्ड अल्गोरिद्म फॉर प्राइमलिटी टेस्ट :

सोलोवे स्ट्रैसेन डेराइज्ड एल्गोरिथ्म फॉर प्राइमलिटी टेस्ट

विरोधाभास और विवाद न पढ़ें; न मानना ​​और न लेना; बात और प्रवचन खोजने के लिए नहीं; लेकिन तौलना और विचार करना। कुछ पुस्तकों को चखा जाना है, दूसरों को निगला जाना है, और कुछ को चबाया और पचाया जाना है: अर्थात्, कुछ किताबें केवल कुछ हिस्सों में पढ़ी जानी हैं, दूसरों को पढ़ी जानी हैं, लेकिन उत्सुकता से नहीं, और कुछ को पूरी तरह से पढ़ने के लिए , और परिश्रम और ध्यान के साथ।

static void tasklet_hi_action(struct softirq_action *a)
{
        struct tasklet_struct *list;

        local_irq_disable();
        list = __this_cpu_read(tasklet_hi_vec.head);
        __this_cpu_write(tasklet_hi_vec.head, NULL);
        __this_cpu_write(tasklet_hi_vec.tail, this_cpu_ptr(&tasklet_hi_vec.head));
        local_irq_enable();

        while (list) {
                struct tasklet_struct *t = list;

                list = list->next;

                if (tasklet_trylock(t)) {
                        if (!atomic_read(&t->count)) {
                                if (!test_and_clear_bit(TASKLET_STATE_SCHED,
                                                        &t->state))
                                        BUG();
                                t->func(t->data);
                                tasklet_unlock(t);
                                continue;
                        }
                        tasklet_unlock(t);
                }

                local_irq_disable();
                t->next = NULL;
                *__this_cpu_read(tasklet_hi_vec.tail) = t;
                __this_cpu_write(tasklet_hi_vec.tail, &(t->next));
                __raise_softirq_irqoff(HI_SOFTIRQ);
                local_irq_enable();
        }
}

कोर लिनक्स (5 -> 1 -> 3 -> 2 -> 7 -> 4 -> 6)

“प्रकृति में न तो कर्नेल है और न ही शेल; वह एक ही बार में सब कुछ है - जोहान वोल्फगैंग वॉन गोएथे

रीडर को ऑपरेटिंग सिस्टम अवधारणाओं के साथ अच्छी तरह से वाकिफ होना चाहिए ; लंबे समय तक चलने वाली प्रक्रियाओं की उचित समझ और निष्पादन की छोटी फटने वाली प्रक्रियाओं के साथ इसके अंतर; नरम और कठोर वास्तविक समय की कमी को पूरा करते हुए गलती सहनशीलता। पढ़ते समय, यह समझना महत्वपूर्ण है और n/ackकोर सबसिस्टम में लिनक्स कर्नेल स्रोत द्वारा किए गए डिज़ाइन विकल्प।

थ्रेड्स [और] सिग्नल [हैं] दुख, निराशा, डरावनी और पागलपन के एक प्लेटफ़ॉर्म-आश्रित निशान हैं (~ एंथनी बैक्सटे)। कहा जा रहा है कि आपको कर्नेल में गोता लगाने से पहले एक स्व-मूल्यांकन सी विशेषज्ञ होना चाहिए। आपके पास लिंक्ड लिस्ट्स, स्टैक्स, क्यूज़, रेड ब्लैक ट्रीज़, हैश फंक्शन्स, एट अल के साथ भी अच्छा अनुभव होना चाहिए।

volatile int i;
int main(void)
{
    int c;
    for (i=0; i<3; i++) {
        c = i&&&i;
        printf("%d\n", c);    /* find c */
    }
    return 0;
}

लिनक्स कर्नेल स्रोत की सुंदरता और कला जानबूझकर उपयोग किए जाने वाले कोड ऑबफ्यूज़ेशन में निहित है। यह अक्सर साफ और सुरुचिपूर्ण तरीके से दो या अधिक संचालन को शामिल करने वाले कम्प्यूटेशनल अर्थ को व्यक्त करने के लिए आवश्यक है। मल्टी-कोर आर्किटेक्चर के लिए कोड लिखते समय यह विशेष रूप से सच है।

रियल-टाइम सिस्टम , टास्क शेड्यूलिंग , मेमोरी कम्प्रेशन , मेमोरी बैरियर , एसएमपी पर वीडियो लेक्चर

#ifdef __compiler_offsetof
#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
  1. लिनक्स कर्नेल विकास - रॉबर्ट लव
  2. लिनक्स कर्नेल को समझना - डैनियल पी। बोवेट, मार्को सेसती
  3. लिनक्स KerneL डिजाइन की कला - यांग Lixiang
  4. व्यावसायिक लिनक्स कर्नेल आर्किटेक्चर - वोल्फगैंग मौएर
  5. यूनिक्स संचालन प्रणाली का डिजाइन - मौरिस जे। बाख
  6. लिनक्स वर्चुअल मेमोरी मैनेजर को समझना - मेल गोर्मन
  7. लिनक्स कर्नेल इंटर्नल - तिगरान ऐवज़ियन
  8. एंबेडेड लिनक्स प्राइमर - क्रिस्टोफर हॉलिनन

लिनक्स डिवाइस ड्राइवर (1 -> 2 -> 4 -> 3 -> 8 -> ...)

"संगीत आपको साथ नहीं ले जाता है। आपको अपनी भावनाओं और कहानी के उस छोटे छोटे कर्नेल पर ध्यान केंद्रित करने की अपनी क्षमता के साथ इसे सख्ती से साथ रखना होगा"। - डेबी हैरी

आपका कार्य मूल रूप से हार्डवेयर डिवाइस और सॉफ़्टवेयर कर्नेल के बीच एक उच्च गति संचार इंटरफ़ेस स्थापित करना है। आपको डिवाइस के व्यवहार को समझने के लिए हार्डवेयर संदर्भ डेटाशीट / मैनुअल पढ़ना चाहिए और यह नियंत्रण और डेटा स्टेट्स और भौतिक चैनल प्रदान करता है। आपके विशेष आर्किटेक्चर के लिए असेंबली का ज्ञान और वीएलएसआई हार्डवेयर का उचित ज्ञान वर्णन वीएचडीएल या वेरिलॉग जैसी भाषाएं आपको लंबे समय तक मदद करेगी।

प्रश्न : लेकिन, मुझे हार्डवेयर चश्मा क्यों पढ़ना है?

A : क्योंकि, "कार्बन और सिलिकॉन का एक सांचा है जो सॉफ्टवेयर नहीं चला सकता है" - राहुल सोननद

हालाँकि, ऊपर कम्प्यूटेशनल एल्गोरिदम ( ड्राइवर कोड - बॉटम-हाफ प्रोसेसिंग ) के लिए कोई समस्या नहीं है , क्योंकि यह एक यूनिवर्सल ट्यूरिंग मशीन पर पूरी तरह से नकली हो सकता है । यदि गणना परिणाम गणितीय डोमेन में सही है , तो यह निश्चित है कि यह भौतिक डोमेन में भी सही है ।

लिनक्स डिवाइस ड्राइवर्स पर वीडियो लेक्चर्स (Lec। 17 & 18), एंबेडेड ऑफ एंबेडेड केएमएस ड्राइवर , पिन कंट्रोल एंड जीपीआईओ अपडेट , कॉमन क्लॉक फ्रेमवर्क , एक वास्तविक लिनक्स ड्राइवर लिखें - ग्रेग केएच

static irqreturn_t phy_interrupt(int irq, void *phy_dat)
{
         struct phy_device *phydev = phy_dat;

         if (PHY_HALTED == phydev->state)
                 return IRQ_NONE;                /* It can't be ours.  */

         /* The MDIO bus is not allowed to be written in interrupt
          * context, so we need to disable the irq here.  A work
          * queue will write the PHY to disable and clear the
          * interrupt, and then reenable the irq line.
          */
         disable_irq_nosync(irq);
         atomic_inc(&phydev->irq_disable);

         queue_work(system_power_efficient_wq, &phydev->phy_queue);

         return IRQ_HANDLED;
}
  1. लिनक्स डिवाइस ड्राइवर्स - जोनाथन कॉर्बेट, एलेसेंड्रो रुबिनी और ग्रेग क्रोहा-हार्टमैन
  2. आवश्यक लिनक्स डिवाइस ड्राइवर्स - श्रीकृष्णन वेंकटेश्वरन
  3. लेखन लिनक्स डिवाइस ड्राइवर्स - जेरी कूपरस्टीन
  4. लिनक्स कर्नेल मॉड्यूल प्रोग्रामिंग गाइड - पीटर जे सलज़मैन, माइकल ब्यूरियन, ओरी पोमेरेंट्ज़
  5. लिनक्स PCMCIA प्रोग्रामर गाइड - डेविड हिंड्स
  6. लिनक्स एससीएसआई प्रोग्रामिंग हाउटो - हेइको ईबफेल्ट
  7. POSIX ऑपरेटिंग सिस्टम के लिए सीरियल प्रोग्रामिंग गाइड - माइकल आर स्वीट
  8. लिनक्स ग्राफिक्स ड्राइवर्स: एक परिचय - स्टीफन मार्चेसिन
  9. लिनक्स यूएसबी डिवाइस ड्राइवर्स के लिए प्रोग्रामिंग गाइड - डिटेल फ़्लिग
  10. लिनक्स कर्नेल डिवाइस मॉडल - पैट्रिक मोशेल

कर्नेल नेटवर्किंग (1 -> 2 -> 3 -> ...)

"इसे एक कबीला कहें, इसे एक नेटवर्क कहें, एक जनजाति कहें, इसे एक परिवार कहें: जो भी आप इसे कहते हैं, जो भी आप हैं, आपको एक की आवश्यकता है।" - जेन हावर्ड

कर्नेल में एक पैकेट वॉक-थ्रू समझना कर्नेल नेटवर्किंग को समझने की कुंजी है। अगर हम नेटफिल्टर या IPSec इंटर्नल को समझना चाहते हैं, तो इसे समझना बहुत जरूरी है। लिनक्स कर्नेल नेटवर्क परत की दो सबसे महत्वपूर्ण संरचनाएँ हैं: struct sk_buffऔरstruct net_device

static inline int sk_hashed(const struct sock *sk)
{
        return !sk_unhashed(sk);
} 
  1. लिनक्स नेटवर्क इंटर्नल्स को समझना - क्रिश्चियन बेनवेन्टी
  2. लिनक्स कर्नेल नेटवर्किंग: कार्यान्वयन और सिद्धांत - रामी रोसेन
  3. यूनिक्स नेटवर्क प्रोग्रामिंग - डब्ल्यू। रिचर्ड स्टीवंस
  4. लिनक्स नेटवर्क प्रोग्रामिंग के लिए निश्चित गाइड - कीर डेविस, जॉन डब्ल्यू। टर्नर, नाथन योकोम
  5. लिनक्स टीसीपी / आईपी स्टैक: एंबेडेड सिस्टम के लिए नेटवर्किंग - थॉमस एफ हर्बर्ट
  6. उदाहरण के लिए लिनक्स सॉकेट प्रोग्रामिंग - वॉरेन डब्ल्यू गे
  7. लिनक्स एडवांस्ड रूटिंग एंड ट्रैफिक कंट्रोल HOWTO - बर्ट हबर्ट

कर्नेल डिबगिंग (1 -> 4 -> 9 -> ...)

जब तक इसके साथ संवाद करने में कोई नहीं कहता है, तब तक जिसके परिणामस्वरूप परेशानी होती है। ~ एलन ट्यूरिंग, कंप्यूटर के बारे में

पेपर यूनिक्स फॉर बिगिनर्स (1979) में ब्रायन डब्ल्यू कार्निघन ने कहा, "सबसे प्रभावी डिबगिंग टूल अभी भी सावधानी से सोचा गया है, जो विवेकपूर्ण रूप से रखे गए प्रिंट स्टेटमेंट के साथ मिलकर है"। तेजी से निदान के लिए सही डेटा प्राप्त करने में मदद करने के लिए आपको क्या करना है, यह जानना। महान कंप्यूटर वैज्ञानिक Edsger Dijkstra ने एक बार कहा था कि परीक्षण कीड़े की उपस्थिति को प्रदर्शित कर सकते हैं लेकिन उनकी अनुपस्थिति को नहीं। अच्छी जांच प्रथाओं को समस्याओं को जल्दी से हल करने, अपने कौशल का निर्माण करने की आवश्यकता और विषय विशेषज्ञों के प्रभावी उपयोग की आवश्यकता को संतुलित करना चाहिए।

कई बार जब आप रॉक-बॉटम मारते हैं, तो कुछ भी काम नहीं करता है और आप अपने सभी विकल्पों से बाहर निकल जाते हैं। इसके बाद ही असली डिबगिंग शुरू होती है। एक बग आपको अप्रभावी समाधान पर एक निर्धारण से विघटित करने की आवश्यकता को प्रदान कर सकता है।

कर्नेल डिबग और प्रोफाइलिंग पर वीडियो व्याख्यान , कोर डंप विश्लेषण , GDB के साथ मल्टीकोर डिबगिंग , मल्टी-कोर रेस की शर्तों को नियंत्रित करना , इलेक्ट्रॉनिक्स को डीबग करना

/* Buggy Code -- Stack frame problem
 * If you require information, do not free memory containing the information
 */
char *initialize() {
  char string[80];
  char* ptr = string;
  return ptr;
}

int main() {
  char *myval = initialize();
  do_something_with(myval);
}
/*  “When debugging, novices insert corrective code; experts remove defective code.”
 *     – Richard Pattis
#if DEBUG
 printk("The above can be considered as Development and Review in Industrial Practises");
#endif
 */
  1. लिनक्स डिबगिंग और प्रदर्शन ट्यूनिंग - स्टीव बेस्ट
  2. लिनक्स अनुप्रयोग डिबगिंग तकनीक - ऑरेलियन मेलिनेट
  3. जीडीबी के साथ डिबगिंग: जीएनयू सोर्स-लेवल डिबगर - रोलैंड एच। पेसच
  4. डिबगिंग एंबेडेड लिनक्स - क्रिस्टोफर हॉलिनन
  5. GDB, DDD और ग्रहण के साथ डिबगिंग की कला - नॉर्मन एस। मैटलॉफ़
  6. क्यों कार्यक्रम विफल: व्यवस्थित डिबगिंग के लिए एक गाइड - एंड्रियास ज़ेलर
  7. सॉफ्टवेयर एक्सोरसिज़्म: डिबगिंग और ऑप्टिमाइज़िंग लिगेसी कोड के लिए एक हैंडबुक - बिल ब्लंडेन
  8. डिबगिंग: अधिकांश मायावी सॉफ्टवेयर और हार्डवेयर समस्याएं ढूँढना - डेविड जे
  9. थिंकिंग द्वारा डिबगिंग: एक बहुविषयक दृष्टिकोण - रॉबर्ट चार्ल्स मेट्ज़गर
  10. बग का पता लगाएं: गलत कार्यक्रमों की एक पुस्तक - एडम बर्र

फ़ाइल सिस्टम (1 -> 2 -> 6 -> ...)

"मैं वर्चुअल मेमोरी लेना चाहता था, कम से कम यह फाइल सिस्टम के साथ युग्मित है"। - केन थॉम्पसन

UNIX सिस्टम पर, सब कुछ एक फाइल है; अगर कुछ फ़ाइल नहीं है, तो यह एक प्रक्रिया है, नामांकित पाइप और सॉकेट को छोड़कर। एक फाइल सिस्टम में, एक फाइल का प्रतिनिधित्व किया जाता है inode, एक प्रकार का क्रम संख्या जिसमें वास्तविक डेटा के बारे में जानकारी होती है जो फ़ाइल बनाती है। लिनक्स वर्चुअल फ़ाइल सिस्टम VFSप्रत्येक फ़ाइल सिस्टम से मेमोरी में सूचना को कैश करता है क्योंकि यह माउंट और उपयोग किया जाता है। फ़ाइल सिस्टम को सही ढंग से अपडेट करने के लिए बहुत सावधानी बरतनी चाहिए क्योंकि इन कैश के भीतर डेटा को संशोधित किया जाता है क्योंकि फाइलें और निर्देशिकाएं बनाई जाती हैं, जिन्हें लिखा और हटाया जाता है। इन कैश में सबसे महत्वपूर्ण है बफ़र कैश, जिसे इस तरह से एकीकृत किया जाता है कि अलग-अलग फ़ाइल सिस्टम अपने अंतर्निहित ब्लॉक स्टोरेज डिवाइस तक पहुंचते हैं।

भंडारण प्रणालियों पर वीडियो व्याख्यान , फ्लैश फ्रेंडली फ़ाइल सिस्टम

long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
{
        struct open_flags op;
        int fd = build_open_flags(flags, mode, &op);
        struct filename *tmp;

        if (fd)
                return fd;

        tmp = getname(filename);
        if (IS_ERR(tmp))
                return PTR_ERR(tmp);

        fd = get_unused_fd_flags(flags);
        if (fd >= 0) {
                struct file *f = do_filp_open(dfd, tmp, &op);
                if (IS_ERR(f)) {
                        put_unused_fd(fd);
                        fd = PTR_ERR(f);
                } else {
                        fsnotify_open(f);
                        fd_install(fd, f);
                }
        }
        putname(tmp);
        return fd;
}

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
        if (force_o_largefile())
                flags |= O_LARGEFILE;

        return do_sys_open(AT_FDCWD, filename, flags, mode);
}
  1. लिनक्स फाइल सिस्टम - मोशे बार
  2. लिनक्स फाइलसिस्टम - विलियम वॉन हेगन
  3. UNIX फाइलसिस्टम: इवोल्यूशन, डिज़ाइन और कार्यान्वयन - स्टीव डी। पाटे
  4. प्रैक्टिकल फ़ाइल सिस्टम डिज़ाइन - डोमिनिक गिम्पैलो
  5. फ़ाइल सिस्टम फोरेंसिक विश्लेषण - ब्रायन कैरियर
  6. लिनक्स फाइलसिस्टम पदानुक्रम - बिनह गुयेन
  7. BTRFS: लिनक्स बी-ट्री फाइलसिस्टम - ओहद रोडे
  8. StegFS: लिनक्स के लिए एक स्टेग्नोग्राफ़िक फ़ाइल सिस्टम - एंड्रयू डी। मैकडॉनल्ड्स, मार्कस जी। कुह्न

सुरक्षा (1 -> 2 -> 8 -> 4 -> 3 -> ...)

"यूनिक्स को अपने उपयोगकर्ताओं को बेवकूफ चीजें करने से रोकने के लिए नहीं बनाया गया था, क्योंकि यह उन्हें चतुर चीजें करने से भी रोक देगा"। - डग Gwyn

यदि इसका उपयोग नहीं किया जाता है तो कोई तकनीक काम नहीं करती है। तकनीक के साथ नैतिकता बदलती है।

" एफ × एस = के " स्वतंत्रता और सुरक्षा का उत्पाद एक स्थिर है। - निवेन के नियम

क्रिप्टोग्राफी ऑनलाइन ट्रस्ट का आधार बनाती है। हैकिंग तकनीकी, भौतिक या मानव-आधारित तत्व में सुरक्षा नियंत्रण का शोषण कर रहा है। कर्नेल को अन्य चल रहे कार्यक्रमों से सुरक्षित करना एक सुरक्षित और स्थिर प्रणाली की ओर पहला कदम है, लेकिन यह स्पष्ट रूप से पर्याप्त नहीं है: अलग-अलग उपयोगकर्ता-भूमि अनुप्रयोगों के बीच सुरक्षा की कुछ डिग्री मौजूद होनी चाहिए। शोषण स्थानीय या दूरस्थ सेवाओं को लक्षित कर सकता है।

"आप अपने भाग्य को हैक नहीं कर सकते, जानवर बल ... आपको जीवन में एक पीछे के दरवाजे, एक साइड चैनल की आवश्यकता है।" - क्लाइड शेज़ा

कंप्यूटर समस्याओं को हल नहीं करते हैं, वे समाधान निष्पादित करते हैं। प्रत्येक गैर-नियतात्मक एल्गोरिथम कोड के पीछे , एक निर्धारित दिमाग होता है। - / var / लॉग / dmesg

क्रिप्टोग्राफी और नेटवर्क सुरक्षा पर वीडियो व्याख्यान , सुरक्षा के लिए नाम स्थान , दूरस्थ हमलों के खिलाफ सुरक्षा , सुरक्षित एंबेडेड लिनक्स

env x='() { :;}; echo vulnerable' bash -c "echo this is a test for Shellsock"
  1. हैकिंग: शोषण की कला - जॉन एरिकसन
  2. द रूटकिट आर्सेनल: एस्केप एंड एविज़न इन द डार्क कॉर्नर ऑफ़ द सिस्टम - बिल ब्लंडेन
  3. हैकिंग एक्सपोज़्ड: नेटवर्क सिक्योरिटी सीक्रेट्स - स्टुअर्ट मैकक्लेर, जोएल स्कम्ब्रे, जॉर्ज कुर्तज़
  4. कर्नेल शोषण के लिए एक गाइड: कोर पर हमला - एनरिको पेरला, मासिमिलियानो ओल्डानी
  5. द आर्ट ऑफ़ मेमोरी फ़ॉरेंसिक्स - माइकल हेल ली, एंड्रयू केस, जेमी लेवी, एरॉन वाल्टर्स
  6. प्रैक्टिकल रिवर्स इंजीनियरिंग - ब्रूस डांग, अलेक्जेंड्रे गज़ेट, एलियास बाचलानी
  7. व्यावहारिक मैलवेयर विश्लेषण - माइकल सिकोरस्की, एंड्रयू होनिग
  8. अधिकतम लिनक्स सुरक्षा: आपके हैक्स सर्वर की सुरक्षा के लिए एक हैकर गाइड - बेनामी
  9. लिनक्स सुरक्षा - क्रेग हंट
  10. वास्तविक विश्व लिनक्स सुरक्षा - बॉब टॉक्सन

कर्नेल स्रोत (0.11 -> 2.4 -> 2.6 -> 3.18)

"शराब की तरह, कर्नेल प्रोग्रामिंग की महारत समय के साथ परिपक्व होती है। लेकिन, शराब के विपरीत, यह प्रक्रिया में मीठा हो जाता है"। - लवलीन मुछेका

आप यह नहीं सोच सकते हैं कि प्रोग्रामर कलाकार हैं, लेकिन प्रोग्रामिंग एक अत्यंत रचनात्मक पेशा है। यह तर्क-आधारित रचनात्मकता है। कंप्यूटर विज्ञान की शिक्षा किसी को भी एक विशेषज्ञ प्रोग्रामर नहीं बना सकती है जो ब्रश और रंगद्रव्य का अध्ययन करने से ज्यादा किसी को विशेषज्ञ चित्रकार बना सकता है। जैसा कि आप पहले से ही जानते हैं, पथ को जानने और मार्ग पर चलने के बीच अंतर है; अपनी आस्तीन को रोल करने और कर्नेल स्रोत कोड के साथ अपने हाथों को गंदा करने के लिए यह अत्यंत महत्वपूर्ण है। अंत में, इस प्रकार आपके द्वारा प्राप्त कर्नेल ज्ञान , जहां भी आप जाएंगे, आप चमक जाएंगे ।

अपरिपक्व कोडर नकल करते हैं; परिपक्व कोडर चोरी; खराब कोडर्स खराब होते हैं जो वे लेते हैं, और अच्छे कोडर्स इसे कुछ बेहतर या कम से कम कुछ अलग बनाते हैं। अच्छा कोडर अपनी चोरी का पूरे मनोयोग से स्वागत करता है, जो अनोखा है, उससे बिल्कुल अलग, जहां से यह फटा था।

कर्नेल व्यंजनों पर वीडियो व्याख्यान

linux-0.11
├── boot
│   ├── bootsect.s      head.s      setup.s
├── fs
│   ├── bitmap.c    block_dev.c buffer.c        char_dev.c  exec.c
│   ├── fcntl.c     file_dev.c  file_table.c    inode.c     ioctl.c
│   ├── namei.c     open.c      pipe.c          read_write.c
│   ├── stat.c      super.c     truncate.c
├── include
│   ├── a.out.h     const.h     ctype.h     errno.h     fcntl.h
│   ├── signal.h    stdarg.h    stddef.h    string.h    termios.h
│   ├── time.h      unistd.h    utime.h
│   ├── asm
│   │   ├── io.h    memory.h    segment.h   system.h
│   ├── linux
│   │   ├── config.h    fdreg.h fs.h    hdreg.h     head.h
│   │   ├── kernel.h    mm.h    sched.h sys.h       tty.h
│   ├── sys
│   │   ├── stat.h      times.h types.h utsname.h   wait.h
├── init
│   └── main.c
├── kernel
│   ├── asm.s       exit.c      fork.c      mktime.c    panic.c
│   ├── printk.c    sched.c     signal.c    sys.c       system_calls.s
│   ├── traps.c     vsprintf.c
│   ├── blk_drv
│   │   ├── blk.h   floppy.c    hd.c    ll_rw_blk.c     ramdisk.c
│   ├── chr_drv
│   │   ├── console.c   keyboard.S  rs_io.s
│   │   ├── serial.c    tty_io.c    tty_ioctl.c
│   ├── math
│   │   ├── math_emulate.c
├── lib
│   ├── close.c  ctype.c  dup.c     errno.c  execve.c  _exit.c
│   ├── malloc.c open.c   setsid.c  string.c wait.c    write.c
├── Makefile
├── mm
│   ├── memory.c page.s
└── tools
    └── build.c
  1. लिनक्स की शुरुआत 0.11 स्रोत (स्रोत कोड की 20,000 लाइनों से कम) के साथ होती है। लिनक्स ०.११ की तुलना में २० साल के विकास के बाद, लिनक्स बहुत विशाल, जटिल और सीखने में मुश्किल हो गया है। लेकिन डिजाइन अवधारणा और मुख्य संरचना में कोई मौलिक परिवर्तन नहीं है। लिनक्स 0.11 सीखना अभी भी महत्वपूर्ण व्यावहारिक महत्व रखता है।
  2. कर्नेल हैकर्स के लिए अनिवार्य पढ़ना => Linux_source_dir/Documentation/*
  3. आपको कम से कम एक कर्नेल मेलिंग सूची में सदस्यता और सक्रिय होना चाहिए। कर्नेल newbies से शुरू करें ।
  4. आपको पूर्ण स्रोत कोड पढ़ने की आवश्यकता नहीं है। एक बार जब आप कर्नेल एपीआई और उसके उपयोग से परिचित हो जाते हैं, तो सीधे उस सब-सिस्टम के स्रोत कोड से शुरू करें जिसे आप रुचि रखते हैं। आप कर्नेल के साथ प्रयोग करने के लिए अपने प्लग-एन-प्ले मॉड्यूल को लिखने के साथ भी शुरू कर सकते हैं।
  5. डिवाइस ड्राइवर लेखकों को अपने स्वयं के समर्पित हार्डवेयर होने से लाभ होगा। रास्पबेरी पाई से शुरू करें ।

2
धन्यवाद! यह एक बहुत व्यापक जवाब है। एक नज़र डालेंगे
एडम मटन

1
यह उत्तर आश्चर्यजनक है
pkqxdd

अद्भुत जवाब! मैंने एक ट्यूटोरियल भी बनाया है जो मुझे रूचि दे सकता है: github.com/cirosantilli/linux-kernel-module-cheat इसमें एक उच्च स्वचालित सेटअप शामिल है जो आपके लिए लिनक्स कर्नेल, QEMU और रूट फाइल सिस्टम बनाता है। GDB Linux कर्नेल स्टेप डीबग सेटअप शामिल है।
सिरो सेंटिल्ली 新疆 改造 iro i 事件 '12


5

मेरा सुझाव है कि आप ग्रेग क्रोहा-हार्टमैन द्वारा " लिनक्स कर्नेल को संक्षेप में पढ़ें" और " लिनक्स कर्नेल को समझना ", रॉबर्ट लव द्वारा। अवश्य पढ़े :)


2
kroah.com/lkn - नि: शुल्क ऑनलाइन
जोशुआ एनफील्ड

@ जोश ये किताबें 5-6 साल पहले लिखी गई थीं, क्या अब भी ये सामयिक हैं?
एलेक्स बोल्तोव

मैं जवाब नहीं दे सकता कि किसी भी उचित विश्वसनीयता के साथ :( अन्य जिम्मेदारियों ने मेरे समय का उपभोग किया, और मैं इसे पढ़ने के लिए आसपास कभी नहीं आया। उम्मीद है कि wzzrd इन टिप्पणियों को देख सकता है और टिप्पणी कर सकता है।
जोशुआ एनफील्ड

1
हां, किताबें अभी भी प्रासंगिक हैं। कई, मान्यता से परे कई विवरण बदल गए हैं। ऊपर उल्लिखित कर्नेल न्यूबीज़ पृष्ठ को देखें (या lwn.net के कर्नेल पृष्ठ को गहन चर्चा और ब्रेकिंग न्यूज़ के लिए देखें)।
वॉनब्रांड

4

लिनक्स डिवाइस ड्राइवर्स एक और अच्छा संसाधन है। यह आपको आंतरिक कामकाज में शामिल होने का एक और तरीका देगा। प्रस्तावना से:

यह सतह पर, लिनक्स सिस्टम के लिए डिवाइस ड्राइवर लिखने के बारे में एक किताब है। यह एक योग्य लक्ष्य है, निश्चित रूप से; नए हार्डवेयर उत्पादों का प्रवाह जल्द ही कभी भी धीमा होने की संभावना नहीं है, और किसी को उन सभी नए गैजेट्स को लिनक्स के साथ काम करना होगा। लेकिन यह पुस्तक इस बारे में भी है कि लिनक्स कर्नेल कैसे काम करता है और अपनी जरूरतों या रुचियों के लिए अपने कामकाज को कैसे अनुकूलित करता है। लिनक्स एक खुली प्रणाली है; इस पुस्तक के साथ, हमें उम्मीद है, यह डेवलपर्स के एक बड़े समुदाय के लिए अधिक खुला और सुलभ है।


मैं हमेशा लक्ष्य उन्मुख सीखने को मेरे लिए अमूर्त सीखने से अधिक उत्पादक लगता हूं। LDD पुस्तक ने मुझे प्रगति करने के लिए एक छोटा सा पर्याप्त हिस्सा काटने का मौका दिया।
लैरी स्मिथमेयर


2

लिनक्स कर्नेल 2.4 आंतरिक एक और ऑनलाइन संसाधन है जिसे देखने के लिए। यह बूटिंग के साथ शुरू करते हुए एक सुंदर 'ग्राउंड अप' दृष्टिकोण लेता है। यहाँ TOC:

  1. बूटिंग
    • 1.1 लिनक्स कर्नेल छवि का निर्माण
    • 1.2 बूटिंग: अवलोकन
    • 1.3 बूटिंग: BIOS POST
    • 1.4 बूटिंग: बूटसेंटर और सेटअप
    • 1.5 एक बूटलोडर के रूप में LILO का उपयोग करना
    • 1.6 उच्च स्तरीय आरंभीकरण
    • 1.7 SMP बूटअप x86 पर
    • 1.8 फ्रीजिंग इनिशियल डेटा और कोड
    • 1.9 प्रसंस्करण कर्नेल कमांड लाइन
  2. प्रक्रिया और व्यवधान प्रबंधन
    • 2.1 कार्य संरचना और प्रक्रिया तालिका
    • 2.2 कार्यों और कर्नेल थ्रेड्स का निर्माण और समाप्ति
    • २.३ लिनक्स शेड्यूलर
    • 2.4 लिनक्स लिंक्ड सूची कार्यान्वयन
    • 2.5 प्रतीक्षा कतारों
    • 2.6 कर्नेल टाइमर
    • 2.7 नीचे के हिस्सों
    • 2.8 टास्क कतारें
    • 2.9 टास्कलेट्स
    • 2.10 सॉफ्टरिक्स
    • 2.11 i386 आर्किटेक्चर पर सिस्टम कॉल को कैसे लागू किया जाता है?
    • 2.12 परमाणु संचालन
    • 2.13 स्पिनलॉक, रीड-राइट स्पिनलॉक और बिग-रीडर स्पिनलॉक
    • 2.14 सेमाफोर और सेमाफोर को पढ़ना / लिखना
    • 2.15 कर्नेल लोड हो रहा है मॉड्यूल के लिए समर्थन
  3. वर्चुअल फाइलसिस्टम (VFS)
    • 3.1 डीकोड के साथ इनकोड कैश और इंटरेक्शन
    • 3.2 फाइलसिस्टम पंजीकरण / गैर-पंजीकरण
    • ३.३ फ़ाइल विवरणक प्रबंधन
    • ३.४ फ़ाइल संरचना प्रबंधन
    • 3.5 सुपरब्लॉक और माउंटपॉइंट प्रबंधन
    • 3.6 उदाहरण वर्चुअल फाइलसिस्टम: पिपिफ्स
    • 3.7 उदाहरण डिस्क फाइल सिस्टम: बीएफएस
    • 3.8 निष्पादन डोमेन और द्विआधारी प्रारूप
  4. लिनक्स पेज कैश
  5. आईपीसी तंत्र
    • ५.१ सेमाफोर
    • 5.2 संदेश कतारों
    • 5.3 साझा मेमोरी
    • 5.4 लिनक्स आईपीसी आदिम

और, इसे और भी मीठा बनाने के लिए, रॉबर्ट लव आउट द्वारा एक नया लिनक्स कर्नेल डेवलपमेंट थर्ड एडिशन है और स्लैशडॉट की समीक्षा है।


1

क्लाउडिया साल्ज़बर्ग एट अल द्वारा लिनक्स कर्नेल प्राइमर के साथ शुरू करें। शुरुआती लोगों के लिए शुरू करने के लिए अच्छा है। रॉबर्ट लव की पुस्तक निश्चित रूप से वह पुस्तक नहीं है जिसे शुरुआती लोगों को शुरू करना चाहिए। लैटर बुक मध्यवर्ती स्तर से ऊपर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.