Linux Çekirdeği: Yeni başlayanlar için öğretici [kapalı]


52

Kendi kişisel eğlencem için çekirdeğin içindekileri değiştirmek, yamalar uygulamak, aygıt sürücülerini ve modülleri kullanmakla ilgileniyorum.

Deneyimli programcılara yönelik, çekirdek hackleme için kapsamlı bir kaynak var mı?


7
Tuhaf, bu kadar çok görüş ve oy içeren bir sorunun konu dışı olarak nasıl kapandığı.
YoMismo

1
Dura Lex, Sed Lex.
Adam Matan


Elbette. Sonuçta, quidquid Latine dictum altum videtur otur.
Adam Matan

XDDDD oldukça doğru
YoMismo

Yanıtlar:


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.

Başlatılmamış için Önerilen Kitaplarvoid *i

“Erkekler, belirli bir yaşama sahip olmadıkça veya hiçbir şekilde içeriğinin en azından bir kısmını görene ve yaşayana kadar hiçbir erkeğin derin bir kitabı anlayamadığı sürece kitapları anlamıyor”. –Ezra Lirası

Binlerce kilometre karelik bir yolculuk tek bir adımla başlamalıdır. Aşağıdaki kitaplardan hangisiyle başlayacağınız konusunda kafa karışıklığınız varsa, endişelenmeyin, dilediğiniz birini seçin. Başıboş dolanan herkes kaybolmuş değildir. Gibi bütün yollar nihayetinde karayolu bağlanmak , sayfaların herhangi çıkmaz toplantı olmadan ilerleme olarak çekirdek yolculukta yeni şeyler keşfetmek ve sonuçta bağlanacaktır code-set. Dikkatle okuyun ve unutmayın: Kod, Edebiyat değildir .

Geriye kalan şey bir şey veya bir duygu ya da görüntü ya da zihinsel bir resim ya da bir hatıra ya da bir fikir değildir. Bu bir fonksiyondur. Bir çeşit süreç. Hayatın "daha büyük" bir şeyin işlevi olarak tanımlanabilecek bir yönü. Ve bu nedenle, bunun başka bir şeyden gerçekten "ayrı" olmadığı görülüyor. Bir bıçağın işlevi gibi - bir şeyi kesmek - aslında bıçağın kendisinden ayrı değildir. İşlev şu anda kullanımda olabilir veya olmayabilir, ancak ASLA potansiyel olarak ayrı değildir.

Solovay Strassen Asallık Testi için Derandomize Algoritması :

Solovay Strassen Asallık Testi için Derandomize Algoritması

Çelişmemek ve kafa karıştırmamak için okuyun; ne inanmak, ne de kabullenmek; ne de konuşma ve söylem bulmak için; ama tartmak ve düşünmek. Bazı kitaplar tadılanacak, bazıları yutulacak ve bazıları da çiğnenecek ve sindirilecek: yani, bazı kitaplar yalnızca bölümler halinde okunacak, bazıları okunacak, meraklanmayacak ve bazıları da tamamen okunacak ve özenle ve dikkatle.

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();
        }
}

Çekirdek Linux (5 -> 1 -> 3 -> 2 -> 7 -> 4 -> 6)

“Doğanın çekirdeği ve kabuğu yoktur; o aynı anda her şeydir ”- Johann Wolfgang von Goethe

Okuyucu, işletim sistemi konseptleri konusunda iyi bilgilendirilmelidir ; uzun süren işlemlerin adil bir şekilde anlaşılması ve işlemlerin kısa süren patlamaları ile olan süreçleri; yumuşak ve zor gerçek zamanlı kısıtlamaları yerine getirirken hataya dayanıklılık. Okurken, n/ackçekirdek alt sistemlerdeki linux çekirdek kaynağı tarafından yapılan tasarım seçimlerini anlamak önemlidir .

Konular [ve] sinyalleri platforma, umutsuzluğa, dehşete ve çılgınlığa (~ Anthony Baxte) platforma bağımlı bir izdir. Bu, çekirdeğe dalmadan önce kendi kendini değerlendiren bir C uzmanı olmanız gerektiği söyleniyor. Ayrıca Bağlantılı Listeler, Yığınlar, Kuyruklar, Kırmızı Siyah Ağaçlar, Hash Fonksiyonları ve ark.

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;
}

Linux Çekirdeği kaynağının güzelliği ve sanatı, birlikte kullanılan kasıtlı kod gizliliğinde yatmaktadır. Bu genellikle iki veya daha fazla işlemi içeren hesaplama anlamını temiz ve zarif bir şekilde iletmek için zorunludur. Bu, özellikle çok çekirdekli mimari için kod yazarken geçerlidir.

Gerçek Zamanlı Sistemlerde Video Anlatım , Görev Planlaması , Hafıza Sıkıştırma , Hafıza Engelleri , SMP

#ifdef __compiler_offsetof
#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
  1. Linux Çekirdek Geliştirme - Robert Love
  2. Linux Çekirdeğini Anlamak - Daniel P. Bovet, Marco Cesati
  3. Linux KerneL Tasarım Sanatı - Yang Lixiang
  4. Profesyonel Linux Çekirdek Mimarisi - Wolfgang Mauerer
  5. UNIX İşletim Sisteminin Tasarımı - Maurice J. Bach
  6. Linux Sanal Bellek Yöneticisini Anlamak - Mel Gorman
  7. Linux Çekirdek Internals - Tigran Aivazian
  8. Gömülü Linux Astar - Christopher Hallinan

Linux Aygıt Sürücüleri (1 -> 2 -> 4 -> 3 -> 8 -> ...)

"Müzik sizi yanınızda taşımaz. Sadece küçük bir duygu ya da hikaye çekirdeğine odaklanma yeteneğinizle kesinlikle taşımanız gerekir." - Debbie Harry

Göreviniz temel olarak donanım aygıtı ile yazılım çekirdeği arasında yüksek hızlı bir iletişim arayüzü oluşturmaktır. Cihazın davranışını ve kontrol ve veri durumlarını ve fiziksel kanalları sağladığını anlamak için donanım referans veri sayfasını / el kitabını okumalısınız. Özel mimariniz için Montaj Bilgisi ve VLSI'nin adil bir bilgisi Donanım Tanımlama VHDL veya Verilog gibi diller uzun vadede size yardımcı olacaktır.

S : Peki neden donanım özelliklerini okumak zorundayım?

C : “Yazılımın köprüleyemediği bir karbon ve silikon uçağı var” - Rahul Sonnad

Bununla birlikte, yukarıdakiler Hesaplamalı Algoritmalar ( Sürücü kodu - alt yarı işleme ) için bir Universal Torna Tezgahında tamamen simüle edilebileceği için bir sorun yaratmaz . Hesaplanan sonuç matematiksel alanda doğruysa, fiziksel alanda da doğru olduğu kesindir .

Linux Aygıt Sürücüleri Üzerine Video Dersler (Bölüm 17 ve 18), Gömülü KMS Sürücüsünün Anatomisi , Pin Kontrolü ve GPIO Güncellemesi , Ortak Saat Çerçevesi , Gerçek Bir Linux Sürücüsü Yaz - Greg KH

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. Linux Aygıt Sürücüleri - Jonathan Corbet, Alessandro Rubini ve Greg Kroah-Hartman
  2. Temel Linux Aygıt Sürücüleri - Sreekrishnan Venkateswaran
  3. Linux Aygıt Sürücülerini Yazma - Jerry Cooperstein
  4. Linux Çekirdek Modülü Programlama Kılavuzu - Peter Jay Salzman, Michael Burian, Ori Pomerantz
  5. Linux PCMCIA Programcı Kılavuzu - David Hinds
  6. Linux SCSI Programlama Nasıl Yapılır - Heiko Eibfeldt
  7. POSIX İşletim Sistemleri İçin Seri Programlama Rehberi - Michael R. Sweet
  8. Linux Grafik Sürücüleri: Giriş - Stéphane Marchesin
  9. Linux USB Aygıt Sürücüleri için Programlama Kılavuzu - Detlef Fliegl
  10. Linux Çekirdek Aygıt Modeli - Patrick Mochel

Çekirdek Ağ İletişimi (1 -> 2 -> 3 -> ...)

“Bir klan çağır, bir ağ çağır, bir kabile çağır, bir aile de.

Çekirdekten bir paket geçişi anlamak, çekirdek ağını anlamada anahtardır. Netfilter veya IPSec internals ve daha fazlasını anlamak istiyorsak bunu anlamak şarttır. Linux çekirdeği ağ tabakasının en önemli iki yapılar şunlardır: struct sk_buffvestruct net_device

static inline int sk_hashed(const struct sock *sk)
{
        return !sk_unhashed(sk);
} 
  1. Linux Network Internals'ı anlamak - Christian Benvenuti
  2. Linux Çekirdeği Ağı: Uygulama ve Teori - Rami Rosen
  3. UNIX Ağ Programlama - W. Richard Stevens
  4. Linux Ağ Programcılığına Dair Kesin Rehber - Keir Davis, John W. Turner, Nathan Yocom
  5. Linux TCP / IP Yığını: Gömülü Sistemler İçin Ağ Oluşturma - Thomas F. Herbert
  6. Örnek olarak Linux Soket Programlama - Warren W. Gay
  7. Linux Gelişmiş Yönlendirme ve Trafik Kontrolü NASIL - Bert Hubert

Çekirdek Hata Ayıklama (1 -> 4 -> 9 -> ...)

Onunla iletişim kurarken, biri tam olarak ne anlama geldiğini söylemediği sürece, sorun ortaya çıkmaya zorlanır. ~ Alan Turing, bilgisayarlar hakkında

Brian W. Kernighan, Yeni Başlayanlar için Unix gazetesinde (1979), "En etkili hata ayıklama aracı hala dikkatli bir şekilde düşünülmüş, akıllıca yerleştirilmiş baskı ifadeleriyle birleşti" dedi. Neyin toplanacağını bilmek, hızlı bir teşhis için doğru verileri hızlıca almanıza yardımcı olacaktır. Büyük bilgisayar bilimcisi Edsger Dijkstra, bir keresinde, testin böceklerin varlığını gösterebildiğini ancak bulunmadıklarını gösterebileceğini söyledi. İyi soruşturma uygulamaları sorunları hızlı bir şekilde çözme ihtiyacını, becerilerinizi geliştirme ihtiyacını ve konu uzmanlarının etkin kullanımını dengelemelidir.

En dibe vurduğun zamanlar vardır, hiçbir şey işe yaramaz ve tüm seçeneklerinden biter. O zaman gerçek hata ayıklama başlar. Bir hata, etkisiz çözümdeki bir tespitten ayrılmanız gereken molayı sağlayabilir.

Video Dersler Çekirdek Debug ve Profil Oluşturma üzerinde , Çekirdek Analizi dökümü , GDB bulunan çok Debugging , denetleme Çok Çekirdekli yarışı Koşullar , hata ayıklama Elektronik

/* 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. Linux Hata Ayıklama ve Performans Ayarlama - Steve Best
  2. Linux Uygulamaları Hata Ayıklama Teknikleri - Aurelian Melinte
  3. GDB ile Hata Ayıklama: GNU Kaynak Seviyesi Hata Ayıklayıcı - Roland H. Pesch
  4. Hata ayıklama Gömülü Linux - Christopher Hallinan
  5. GDB, DDD ve Eclipse ile Hata Ayıklama Sanatı - Norman S. Matloff
  6. Neden Programlar Başarısız Olur: Sistematik Hata Ayıklama Rehberi - Andreas Zeller
  7. Yazılım Tazminatı: Eski Kod Hata Ayıklama ve Optimize Etme El Kitabı - Bill Blunden
  8. Hata Ayıklama: En Belirsiz Yazılım ve Donanım Sorunlarını Bulma - David J. Agans
  9. Düşünerek Hata Ayıklama: Çok Disiplinli Bir Yaklaşım - Robert Charles Metzger
  10. Hata Bulun: Yanlış Programların Bir Kitabı - Adam Barr

Dosya Sistemleri (1 -> 2 -> 6 -> ...)

"En azından dosya sistemlerinde olduğu gibi sanal belleğe sahip olmak istedim". - Ken Thompson

Bir UNIX sisteminde, her şey bir dosyadır; eğer bir şey bir dosya değilse, adlandırılmış boru ve soketler dışında bir işlemdir. Bir dosya sisteminde, bir dosya, dosyayı inodeoluşturan asıl verilerle ilgili bilgileri içeren bir tür seri numarası ile temsil edilir . Linux Sanal Dosya Sistemi VFS, her dosya sistemindeki bellekteki bilgileri bağlandığı ve kullanıldığı gibi önbelleğe alır. Dosya sistemini doğru bir şekilde güncellemek için çok özen gösterilmelidir; çünkü bu önbellekler içindeki veriler dosyalar ve dizinler oluşturulur, yazılır ve silinir. Bu önbelleklerin en önemlisi, bireysel dosya sistemlerinin temel blok depolama aygıtlarına erişme biçimine entegre edilmiş olan Tampon Önbelleğidir.

Depolama Sistemlerinde Video Dersleri , Flash Dostu Dosya Sistemi

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. Linux Dosya Sistemleri - Moshe Bar
  2. Linux Dosya Sistemleri - William Von Hagen
  3. UNIX Dosya Sistemleri: Evrim, Tasarım ve Uygulama - Steve D. Pate
  4. Pratik Dosya Sistemi Tasarımı - Dominic Giampaolo
  5. Dosya Sistemi Adli Analiz - Brian Carrier
  6. Linux Dosya Sistemi Hiyerarşisi - Binh Nguyen
  7. BTRFS: Linux B-ağacı Dosya Sistemi - Ohad Rodeh
  8. StegFS: Linux için Bir Steganografik Dosya Sistemi - Andrew D. McDonald, Markus G. Kuhn

Güvenlik (1 -> 2 -> 8 -> 4 -> 3 -> ...)

“UNIX, kullanıcılarının aptalca şeyler yapmalarını engellemek için tasarlanmadı; - Doug Gwyn

Kullanılmadığı takdirde hiçbir teknik çalışmaz. Etik teknolojiyle değişiyor.

" F × S = k " özgürlük ve güvenlik ürünü sabittir. - Niven Yasası

Şifreleme çevrimiçi güven temeli oluşturur. Hacking, güvenlik kontrollerini teknik, fiziksel veya insani temelli bir elementte kullanmaktır. Çekirdeği diğer çalışan programlardan korumak, güvenli ve kararlı bir sisteme atılan ilk adımdır, ancak bu açıkça yeterli değildir: farklı kullanıcı-arazi uygulamaları arasında da bir derece koruma mevcut olmalıdır. İstismarlar yerel veya uzaktaki hizmetleri hedefleyebilir.

“Kaderini, kaba kuvvetini kıramazsın ... bir arka kapıya, Yaşam için bir yan kanala ihtiyacın var.” - Clyde Dsouza

Bilgisayarlar sorunları çözmezler, çözümler yürütürler. Deterministik olmayan her algoritmik kodun arkasında kararlı bir zihin vardır. - / var / log / dmesg

Video Dersler Kriptografi ve Ağ Güvenliği , Güvenlik Ad alanları , Uzaktan Saldırıları Karşı Koruma , Güvenli Gömülü Linux

env x='() { :;}; echo vulnerable' bash -c "echo this is a test for Shellsock"
  1. Hacking: Sömürme Sanatı - Jon Erickson
  2. Rootkit Arsenal: Sistemin Karanlık Köşelerinde Kaçış ve Kaçınma - Bill Blunden
  3. Hacking Açığa Çıktı: Ağ Güvenliği Sırları - Stuart McClure, Joel Scambray, George Kurtz
  4. Çekirdek Sömürüsüne Bir Kılavuz: Çekirdeğe Saldırı - Enrico Perla, Massimiliano Oldani
  5. Bellek Adli Tıp Sanatı - Michael Hale Ligh, Andrew Davası, Jamie Levy, AAron Walters
  6. Pratik Tersine Mühendislik - Bruce Dang, Alexandre Gazet, Elias Bachaalany
  7. Pratik Kötü Amaçlı Yazılım Analizi - Michael Sikorski, Andrew Honig
  8. Maksimum Linux Güvenliği: Linux Sunucunuzu Koruma için Bir Hacker Kılavuzu - Anonim
  9. Linux Güvenliği - Craig Hunt
  10. Gerçek Dünya Linux Güvenliği - Bob Toxen

Çekirdek Kaynağı (0.11 -> 2.4 -> 2.6 -> 3.18)

"Şarap gibi, çekirdek programlama ustalığı zamanla olgunlaşır. Ancak, şaraptan farklı olarak süreçte daha da güzelleşir". --Lawrence Mucheka

Programcıların sanatçı olduğunu düşünmeyebilirsiniz, ancak programlama son derece yaratıcı bir meslektir. Mantık temelli yaratıcılık. Bilgisayar bilimi eğitimi kimseyi uzman programcı yapamaz, fırçaları incelemek ve pigment birini uzman ressam yapamaz. Zaten bildiğiniz gibi, yolu bilmek ve yolu yürümek arasında bir fark vardır; kolları çekip almak ve çekirdek kaynak koduyla ellerinizi kirletmek çok önemlidir. Sonunda, böylece kazandığınız çekirdek bilginizle nereye giderseniz gidin parlayacaksınız .

Olgunlaşmamış kodlayıcılar taklit eder; olgun kodlayıcılar çalmak; kötü kodlayıcılar aldıklarını engeller ve iyi kodlayıcılar daha iyi veya en azından farklı bir şey haline getirir. İyi kodlayıcı, hırsızlığını, benzersiz, tamamen yırtılmış olandan tamamen farklı bir duyguya dönüştürür.

Çekirdek Tarifler Üzerine Video Dersler

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. Başlangıç ​​seviyesi Linux 0.11 kaynağı ile başlar (20.000 satırdan fazla kaynak kodu satırı). 20 yıllık geliştirmeden sonra, Linux 0.11 ile karşılaştırıldığında, Linux çok büyük, karmaşık ve öğrenmesi zor hale geldi. Ancak tasarım konsepti ve ana yapının hiçbir temel değişikliği yoktur. Linux 0.11 öğrenmek hala önemli bir pratik öneme sahip.
  2. Çekirdek Korsanları İçin Zorunlu Okuma => Linux_source_dir/Documentation/*
  3. En az bir çekirdek posta listesinde abone olmalısınız ve aktif olmalısınız. Çekirdek yenileriyle başlayın .
  4. Kaynak kodun tamamını okumanıza gerek yoktur. Çekirdek API'lerini ve kullanımlarını öğrendikten sonra, doğrudan ilgilendiğiniz alt sistemin kaynak koduyla doğrudan başlayın. Çekirdeği denemek için kendi tak-çalıştır modülleri yazarak da başlayabilirsiniz.
  5. Aygıt Sürücüsü yazarları, kendilerine özel donanıma sahip olarak fayda sağlarlar. Raspberry Pi ile başlayın .

2
Teşekkürler! bu oldukça kapsamlı bir cevap. Bir göz atacağım
Adam Matan

1
Bu cevap şaşırtıcı
pkqxdd 9:18

Şaşırtıcı cevap! Ayrıca ilgimi çekebilecek bir öğretici de oluşturdum: github.com/cirosantilli/linux-kernel-module-cheat Sizin için Linux çekirdeği, QEMU ve kök dosya sistemi oluşturan oldukça otomatik bir kurulum içeriyor. GDB Linux çekirdeği adım hata ayıklama kurulumu dahil.
Ciro Santilli,


5

Greg Kroah-Hartman ve " Linux Çekirdeğini Anlama " yazısını Robert Love'dan " Kısaca Linux Çekirdeğini " okumanızı öneririm . Okumalısınız :)


2
kroah.com/lkn - Ücretsiz Online
Joshua Enfield

@Josh Bu kitaplar 5-6 yıl önce yazıldı, hala günceller mi?
Alex Bolotov

Buna makul bir güvenilirlikle cevap veremem :( Diğer sorumluluklar zamanımı harcadı ve okumaya başaramadım. Umarım bu yorumları görür ve yorum yapabilir
Joshua Enfield

1
Evet, kitaplar hala ilgili. Pek çok, pek çok ayrıntı tanınmayacak kadar değişti. Yukarıda belirtilen çekirdek yeniler sayfasına bakın (veya derinlemesine tartışma ve son dakika haberi için lwn.net'in çekirdek sayfasına bakın).
vonbrand

4

Linux Aygıt Sürücüleri başka iyi bir kaynaktır. İçsel çalışmalara girmeniz için başka bir yol sağlar. Önsözden:

Bu, yüzeyde, Linux sistemi için aygıt sürücüleri yazma hakkında bir kitap. Tabii ki bu değerli bir amaçtır; Yeni donanım ürünlerinin akışının yakında herhangi bir zamanda yavaşlaması beklenmiyor ve birileri bu yeni cihazların Linux ile çalışmasını sağlamak zorunda kalacak. Fakat bu kitap aynı zamanda Linux çekirdeğinin nasıl çalıştığı ve çalışmalarını ihtiyaçlarınıza veya ilgi alanlarınıza göre nasıl uyarlayabileceğinizle de ilgili. Linux açık bir sistemdir; Bu kitapla daha büyük bir geliştirici topluluğunun daha açık ve erişilebilir olmasını umuyoruz.


Her zaman hedef odaklı öğrenmeyi benim için soyut öğrenmeden daha verimli buluyorum. LDD kitabı, ilerleme kaydedecek kadar küçük bir parçayı ısırma şansını verdi.
Larry Smithmier


2

Linux Çekirdeği 2.4 Internals , bakmak için başka bir çevrimiçi kaynaktır. Önyükleme ile başlayan, oldukça 'temel' bir yaklaşım izliyor gibi görünüyor. İşte TOK:

  1. Booting
    • 1.1 Linux Çekirdek İmajını Oluşturma
    • 1.2 Önyükleme: Genel Bakış
    • 1.3 Önyükleme: BIOS POST
    • 1.4 Önyükleme: bot ve kurulum
    • 1.5 LILO'yu önyükleyici olarak kullanma
    • 1.6 Yüksek seviye başlatma
    • X86'da 1.7 SMP Başlatma
    • 1.8 Başlatma verilerinin ve kodun serbest bırakılması
    • 1.9 İşlem çekirdeği komut satırı
  2. Süreç ve Kesinti Yönetimi
    • 2.1 Görev Yapısı ve Süreç Tablosu
    • 2.2 Görevlerin ve çekirdek konularının yaratılması ve sona ermesi
    • 2.3 Linux Zamanlayıcısı
    • 2.4 Linux bağlantılı liste uygulaması
    • 2.5 Bekleme Kuyrukları
    • 2.6 Çekirdek Zamanlayıcıları
    • 2.7 Alt Yarımlar
    • 2.8 Görev Kuyrukları
    • 2.9 Görevler
    • 2.10 Softirq'ler
    • 2.11 i386 Mimarisine Sistem Çağrıları Nasıl Uygulanır?
    • 2.12 Atom İşlemleri
    • 2.13 Spinlock'lar, Okuma Yazma Spinlock'lar ve Büyük Okuyucu Spinlock'lar
    • 2.14 Semaforlar ve Semaforlar okuma / yazma
    • 2.15 Yükleme Modülleri için Çekirdek Desteği
  3. Sanal Dosya Sistemi (VFS)
    • 3.1 Inode Caches ve Dcache ile Etkileşim
    • 3.2 Dosya Sistemi Kaydı / Kaydı
    • 3.3 Dosya Tanımlayıcı Yönetimi
    • 3.4 Dosya Yapısı Yönetimi
    • 3.5 Superblock ve Mountpoint Yönetimi
    • 3.6 Örnek Sanal Dosya Sistemi: pipefs
    • 3.7 Örnek Disk Dosya Sistemi: BFS
    • 3.8 Uygulama Alanları ve İkili Formatlar
  4. Linux Sayfa Önbelleği
  5. IPC mekanizmaları
    • 5.1 Semaforlar
    • 5.2 Mesaj sıraları
    • 5.3 Paylaşılan Bellek
    • 5.4 Linux IPC İlkelleri

Ve daha da tatlı hale getirmek için, Robert Love out tarafından yeni bir Linux Çekirdek Geliştirme Üçüncü Sürümü var ve Slashdot'un bir incelemesi var.


1

Claudia Salzberg et al. Tarafından Linux Kernel Primer ile başlayın. Yeni başlayanlar için başlamak iyi. Robert Love'ın kitabı kesinlikle yeni başlayanların başlaması gereken bir kitap değil. İkinci kitap orta seviyenin üstünde.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.