Linux Kernel: tutorial per principianti [chiuso]


52

Sono interessato a modificare gli interni del kernel, applicare patch, gestire driver e moduli del dispositivo, per il mio divertimento personale.

Esiste una risorsa completa per l'hacking del kernel, destinata a programmatori esperti?


7
Divertente come una domanda con una tale quantità di opinioni e voti sia chiusa come fuori tema.
YoMismo,

1
Dura lex, sed lex.
Adam Matan,

1
Rectificare sapientis est
YoMismo,

Sicuro. Dopo tutto, quidquid Latine dictum sit altum videtur.
Adam Matan,

XDDDD abbastanza vero
YoMismo,

Risposte:


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.

Libri consigliati per i non inizializzativoid *i

"Gli uomini non capiscono i libri fino a quando non hanno una certa quantità di vita, o comunque nessuno capisce un libro profondo, fino a quando non ha visto e vissuto almeno parte del suo contenuto". –Ezra Pound

Un viaggio di mille miglia-codice deve iniziare con un solo passo. Se sei confuso su quale dei seguenti libri per cominciare, non preoccuparti, scegli uno di quelli a tua scelta. Non tutti quelli che vagano sono persi. Poiché tutte le strade alla fine si collegano all'autostrada , esplorerai nuove cose nel tuo viaggio nel kernel man mano che le pagine procedono senza incontrare alcun vicolo cieco e alla fine ti collegherai a code-set. Leggi con attenzione e ricorda: il codice non è letteratura .

Ciò che rimane non è una cosa o un'emozione o un'immagine o un'immagine mentale o un ricordo o persino un'idea. È una funzione. Un processo di qualche tipo. Un aspetto della vita che potrebbe essere descritto come una funzione di qualcosa di "più grande". E quindi, sembra che non sia realmente "separato" da quel qualcos'altro. Come la funzione di un coltello - tagliare qualcosa - in realtà non è separata dal coltello stesso. La funzione potrebbe essere o non essere in uso al momento, ma è potenzialmente MAI separata.

Algoritmo di Solovay Strassen derivato per test di primalità :

Solovay Strassen Algoritmo randomizzato per test di primalità

Leggi per non contraddire e confutare; né credere e dare per scontato; né per trovare discorsi e discorsi; ma pesare e considerare. Alcuni libri devono essere assaggiati, altri da inghiottire e alcuni da masticare e digerire: cioè alcuni libri devono essere letti solo in alcune parti, altri da leggere, ma non curiosamente, e alcuni pochi da leggere interamente e con diligenza e attenzione.

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

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

“La natura non ha né kernel né shell; lei è tutto in una volta ”- Johann Wolfgang von Goethe

Reader dovrebbe essere ben versato con i concetti del sistema operativo ; una buona comprensione dei processi di lunga durata e delle sue differenze con i processi con brevi raffiche di esecuzione; tolleranza agli errori nel rispetto dei vincoli in tempo reale soft e hard. Durante la lettura, è importante capire e n/ackle scelte di progettazione fatte dal sorgente del kernel Linux nei sottosistemi core.

I thread [e] i segnali [sono] una scia dipendente dalla piattaforma di miseria, disperazione, orrore e follia (~ Anthony Baxte). Detto questo, dovresti essere un esperto di autovalutazione C, prima di immergerti nel kernel. Dovresti anche avere una buona esperienza con liste collegate, pile, code, alberi neri rossi, funzioni hash e così via.

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

La bellezza e l'arte della fonte del kernel Linux risiede nell'offuscamento deliberato del codice usato insieme. Ciò è spesso necessario per trasmettere il significato computazionale che coinvolge due o più operazioni in modo pulito ed elegante. Ciò è particolarmente vero quando si scrive codice per l'architettura multi-core.

Video lezioni su Real-Time Systems , Pianificazione attività , memoria di compressione , barriere di memoria , SMP

#ifdef __compiler_offsetof
#define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
#else
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#endif
  1. Sviluppo del kernel Linux - Robert Love
  2. Comprensione del kernel Linux - Daniel P. Bovet, Marco Cesati
  3. The Art of Linux KerneL Design - Yang Lixiang
  4. Architettura del kernel Linux professionale - Wolfgang Mauerer
  5. Progettazione del sistema operativo UNIX - Maurice J. Bach
  6. Comprensione di Linux Virtual Memory Manager - Mel Gorman
  7. Internals del kernel Linux - Tigran Aivazian
  8. Embedded Linux Primer - Christopher Hallinan

Driver di dispositivo Linux (1 -> 2 -> 4 -> 3 -> 8 -> ...)

"La musica non ti porta avanti. Devi portarla avanti rigorosamente con la tua capacità di concentrarti su quel piccolo nucleo di emozioni o storie". - Debbie Harry

Il tuo compito è sostanzialmente quello di stabilire un'interfaccia di comunicazione ad alta velocità tra il dispositivo hardware e il kernel del software. È necessario leggere il foglio dati / manuale di riferimento hardware per comprendere il comportamento del dispositivo, i suoi stati di controllo e dati e i canali fisici forniti. Conoscenza dell'assemblaggio per la tua particolare architettura e buona conoscenza dell'hardware VLSI Descrizione I linguaggi come VHDL o Verilog ti aiuteranno a lungo termine.

D : Ma perché devo leggere le specifiche hardware?

A : Perché "C'è un abisso di carbonio e silicio che il software non può colmare" - Rahul Sonnad

Tuttavia, quanto sopra non rappresenta un problema per gli algoritmi computazionali ( codice del driver - elaborazione della metà inferiore ), poiché può essere completamente simulato su una macchina di Turing universale . Se il risultato calcolato è vero nel dominio matematico , è certo che sia vero anche nel dominio fisico .

Lezioni video su driver di dispositivo Linux (Lec. 17 e 18), Anatomia di un driver KMS incorporato , Pin Control e aggiornamento GPIO , Common Clock Framework , Scrivi un vero driver Linux - 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. Driver di dispositivo Linux : Jonathan Corbet, Alessandro Rubini e Greg Kroah-Hartman
  2. Driver essenziali per dispositivi Linux - Sreekrishnan Venkateswaran
  3. Scrittura di driver di dispositivo Linux - Jerry Cooperstein
  4. Guida alla programmazione del modulo kernel Linux - Peter Jay Salzman, Michael Burian, Ori Pomerantz
  5. Guida per programmatori PCMCIA Linux - David Hinds
  6. Programmazione SCSI Linux Howto - Heiko Eibfeldt
  7. Guida alla programmazione seriale per sistemi operativi POSIX - Michael R. Sweet
  8. Driver di grafica Linux: un'introduzione - Stéphane Marchesin
  9. Guida alla programmazione per driver di dispositivo USB Linux - Detlef Fliegl
  10. Il modello di dispositivo del kernel Linux - Patrick Mochel

Kernel Networking (1 -> 2 -> 3 -> ...)

"Chiamalo un clan, chiamalo una rete, chiamalo una tribù, chiamalo una famiglia: qualunque cosa tu lo chiami, chiunque tu sia, ne hai bisogno." - Jane Howard

Comprendere una procedura dettagliata del pacchetto nel kernel è una chiave per comprendere la rete del kernel. Capirlo è d'obbligo se vogliamo capire Netfilter o IPSec internals e altro. Le due strutture più importanti del livello di rete del kernel linux sono: struct sk_buffestruct net_device

static inline int sk_hashed(const struct sock *sk)
{
        return !sk_unhashed(sk);
} 
  1. Comprensione degli interni della rete Linux - Christian Benvenuti
  2. Networking del kernel Linux: implementazione e teoria - Rami Rosen
  3. Programmazione di rete UNIX - W. Richard Stevens
  4. La guida definitiva alla programmazione di reti Linux : Keir Davis, John W. Turner, Nathan Yocom
  5. Lo stack TCP / IP Linux: networking per sistemi integrati - Thomas F. Herbert
  6. Programmazione socket Linux con l'esempio - Warren W. Gay
  7. Linux Advanced Routing & Traffic Control HOWTO - Bert Hubert

Debug del kernel (1 -> 4 -> 9 -> ...)

A meno che nel comunicare con esso si dica esattamente ciò che si intende, i problemi sono destinati a risultare. ~ Alan Turing, sui computer

Brian W. Kernighan, nel documento Unix for Beginners (1979), ha dichiarato: "Lo strumento di debug più efficace è ancora un attento esame, unito a dichiarazioni di stampa posizionate con giudizio". Sapere cosa raccogliere ti aiuterà a ottenere rapidamente i dati giusti per una diagnosi rapida. Il grande scienziato informatico Edsger Dijkstra una volta disse che i test potevano dimostrare la presenza di bug ma non la loro assenza. Le buone pratiche investigative dovrebbero bilanciare la necessità di risolvere rapidamente i problemi, la necessità di sviluppare le tue capacità e l'uso efficace degli esperti in materia.

Ci sono momenti in cui colpisci il fondo, nulla sembra funzionare e finisci tutte le tue opzioni. È allora che inizia il vero debug. Un bug può fornire l'interruzione necessaria per staccare da una fissazione sulla soluzione inefficace.

Lezioni video su debug e profilazione del kernel , analisi core dump , debug multicore con GDB , controllo delle condizioni di gara multi-core , elettronica di debug

/* 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. Debug Linux e ottimizzazione delle prestazioni - Steve Best
  2. Tecniche di debug di applicazioni Linux - Aurelian Melinte
  3. Debug con GDB: il debugger a livello di sorgente GNU - Roland H. Pesch
  4. Debugging di Embedded Linux - Christopher Hallinan
  5. L'arte del debug con GDB, DDD ed Eclipse - Norman S. Matloff
  6. Perché i programmi falliscono: una guida al debug sistematico - Andreas Zeller
  7. Software Exorcism: un manuale per il debug e l'ottimizzazione del codice legacy - Bill Blunden
  8. Debug: ricerca della maggior parte dei problemi elusivi di software e hardware - David J. Agans
  9. Debug pensando: un approccio multidisciplinare - Robert Charles Metzger
  10. Trova il bug: un libro di programmi errati - Adam Barr

File system (1 -> 2 -> 6 -> ...)

"Volevo avere memoria virtuale, almeno perché accoppiata ai file system". - Ken Thompson

Su un sistema UNIX, tutto è un file; se qualcosa non è un file, è un processo, ad eccezione di pipe e socket denominati. In un file system, un file è rappresentato da un inodetipo di numero seriale contenente informazioni sui dati effettivi che compongono il file. Il file system virtuale Linux VFSmemorizza nella cache le informazioni nella memoria di ciascun file system man mano che viene montato e utilizzato. È necessario prestare molta attenzione per aggiornare correttamente il file system poiché i dati all'interno di queste cache vengono modificati man mano che i file e le directory vengono creati, scritti ed eliminati. La più importante di queste cache è la cache buffer, che è integrata nel modo in cui i singoli file system accedono ai loro dispositivi di archiviazione a blocchi sottostanti.

Lezioni video su sistemi di archiviazione , file system Flash Friendly

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. File system Linux - Moshe Bar
  2. Filesystem Linux - William Von Hagen
  3. Filesystem UNIX: evoluzione, progettazione e implementazione - Steve D. Pate
  4. Progettazione pratica del file system - Dominic Giampaolo
  5. Analisi forense del file system - Brian Carrier
  6. Gerarchia dei filesystem Linux - Binh Nguyen
  7. BTRFS: Il filesystem Linux B-tree - Ohad Rodeh
  8. StegFS: un file system steganografico per Linux - Andrew D. McDonald, Markus G. Kuhn

Sicurezza (1 -> 2 -> 8 -> 4 -> 3 -> ...)

"UNIX non è stato progettato per impedire ai suoi utenti di fare cose stupide, poiché ciò impedirebbe loro anche di fare cose intelligenti". - Doug Gwyn

Nessuna tecnica funziona se non viene utilizzata. L'etica cambia con la tecnologia.

" F × S = k " il prodotto di libertà e sicurezza è una costante. - Le leggi di Niven

La crittografia costituisce la base della fiducia online. L'hacking sta sfruttando i controlli di sicurezza in un elemento tecnico, fisico o umano. Proteggere il kernel da altri programmi in esecuzione è un primo passo verso un sistema sicuro e stabile, ma questo ovviamente non è abbastanza: un certo grado di protezione deve esistere anche tra diverse applicazioni utente-terra. Gli exploit possono essere indirizzati a servizi locali o remoti.

"Non puoi hackerare il tuo destino, la forza bruta ... hai bisogno di una porta sul retro, un canale laterale nella vita." - Clyde Dsouza

I computer non risolvono i problemi, eseguono soluzioni. Dietro ogni codice algoritmico non deterministico , c'è una mente determinata . - / var / log / dmesg

Lezioni video su crittografia e sicurezza della rete , spazi dei nomi per la sicurezza , protezione contro gli attacchi remoti , Linux embedded sicuro

env x='() { :;}; echo vulnerable' bash -c "echo this is a test for Shellsock"
  1. Hacking: The Art of Exploitation - Jon Erickson
  2. The Rootkit Arsenal: Escape and Evasion in the Dark Corners of the System - Bill Blunden
  3. Hacking Exposed: Segreti di sicurezza della rete - Stuart McClure, Joel Scambray, George Kurtz
  4. Una guida allo sfruttamento del kernel: attaccare il nucleo - Enrico Perla, Massimiliano Oldani
  5. The Art of Memory Forensics - Michael Hale Ligh, Andrew Case, Jamie Levy, AAron Walters
  6. Ingegneria inversa pratica - Bruce Dang, Alexandre Gazet, Elias Bachaalany
  7. Analisi pratiche del malware - Michael Sikorski, Andrew Honig
  8. Massima sicurezza Linux: una guida per hacker per proteggere il tuo server Linux - Anonimo
  9. Sicurezza Linux - Craig Hunt
  10. Real World Linux Security - Bob Toxen

Origine del kernel (0.11 -> 2.4 -> 2.6 -> 3.18)

"Come il vino, la padronanza della programmazione del kernel matura con il tempo. Ma, a differenza del vino, diventa più dolce nel processo". --Lawrence Mucheka

Potresti non pensare che i programmatori siano artisti, ma la programmazione è una professione estremamente creativa. È una creatività basata sulla logica. L'educazione informatica non può rendere nessuno programmatore esperto più che studiare pennelli e pigmenti può rendere qualcuno un pittore esperto. Come già sapete, c'è una differenza tra conoscere il sentiero e percorrerlo; è della massima importanza rimboccarsi le maniche e sporcarsi le mani con il codice sorgente del kernel. Infine, con la tua conoscenza del kernel così acquisita , ovunque tu vada, brillerai .

I programmatori immaturi imitano; i programmatori maturi rubano; i programmatori cattivi deturpano ciò che prendono e i programmatori buoni lo trasformano in qualcosa di meglio, o almeno in qualcosa di diverso. Il buon programmatore salda il suo furto in un sentimento unico, completamente diverso da quello da cui è stato strappato.

Lezioni video sulle ricette del kernel

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. Inizio del principiante con sorgente Linux 0.11 (meno di 20.000 righe di codice sorgente). Dopo 20 anni di sviluppo, rispetto a Linux 0.11, Linux è diventato enorme, complesso e difficile da imparare. Ma il concetto di design e la struttura principale non hanno cambiamenti fondamentali. Imparare Linux 0.11 ha ancora un importante significato pratico.
  2. Lettura obbligatoria per hacker del kernel => Linux_source_dir/Documentation/*
  3. Dovresti essere abbonato e attivo su almeno una mailing list del kernel. Inizia con i principianti del kernel .
  4. Non è necessario leggere il codice sorgente completo. Una volta che hai familiarità con le API del kernel e il suo utilizzo, inizia direttamente con il codice sorgente del sottosistema che ti interessa. Puoi anche iniziare a scrivere i tuoi moduli plug-n-play per sperimentare il kernel.
  5. Gli autori di Device Driver trarrebbero vantaggio dall'avere il proprio hardware dedicato. Inizia con Raspberry Pi .

2
Grazie! questa è una risposta piuttosto completa. Dai un'occhiata
Adam Matan,

1
Questa risposta è sorprendente
pkqxdd

Risposta incredibile! Ho anche creato un tutorial che potrebbe interessarmi: github.com/cirosantilli/linux-kernel-module-cheat Contiene un'installazione altamente automatizzata che crea kernel Linux, QEMU e filesystem di root per te. Impostazione di debug del passaggio del kernel GDB Linux inclusa.
Ciro Santilli 12 改造 中心 法轮功 六四 事件


5

Ti suggerisco di leggere " Linux Kernel in a Nutshell ", di Greg Kroah-Hartman e " Understanding the Linux Kernel ", di Robert Love. Deve leggere :)


2

@Josh Questi libri sono stati scritti 5-6 anni fa, sono ancora attuali?
Alex Bolotov,

Non posso rispondere con ragionevole credibilità :( Altre responsabilità hanno consumato il mio tempo e non sono mai riuscito a leggerlo. Spero che wzzrd veda questi commenti e possa commentare.
Joshua Enfield,

1
Sì, i libri sono ancora pertinenti. Molti, molti dettagli sono cambiati oltre il riconoscimento. Guarda la pagina dei neofiti del kernel sopra menzionata (o la pagina del kernel di lwn.net per discussioni approfondite e ultime notizie).
vonbrand,

4

Linux Device Driver è un'altra buona risorsa. Ti darebbe un altro modo per entrare nei meccanismi interni. Dalla prefazione:

Questo è, in superficie, un libro sulla scrittura di driver di dispositivo per il sistema Linux. Questo è un obiettivo degno, ovviamente; è probabile che il flusso di nuovi prodotti hardware non rallenti presto e qualcuno dovrà far funzionare tutti quei nuovi gadget con Linux. Ma questo libro parla anche di come funziona il kernel Linux e di come adattare il suo funzionamento ai tuoi bisogni o interessi. Linux è un sistema aperto; con questo libro, speriamo, sia più aperto e accessibile a una più ampia comunità di sviluppatori.


Trovo sempre l'apprendimento orientato agli obiettivi più produttivo dell'apprendimento astratto per me. Il libro LDD mi ha dato la possibilità di mordere un pezzo abbastanza piccolo per fare progressi.
Larry Smithmier,


2

Linux Kernel 2.4 Internals è un'altra risorsa online da guardare. Sembra adottare un approccio piuttosto "radicato", iniziando con l'avvio. Ecco il sommario:

  1. Avvio
    • 1.1 Creazione dell'immagine del kernel Linux
    • 1.2 Avvio: panoramica
    • 1.3 Avvio: BIOS POST
    • 1.4 Avvio: bootector e configurazione
    • 1.5 Uso di LILO come bootloader
    • 1.6 Inizializzazione di alto livello
    • 1.7 Avvio SMP su x86
    • 1.8 Liberazione di dati e codice di inizializzazione
    • 1.9 Elaborazione della riga di comando del kernel
  2. Gestione di processi e interruzioni
    • 2.1 Struttura delle attività e tabella dei processi
    • 2.2 Creazione e terminazione di attività e thread del kernel
    • 2.3 Scheduler Linux
    • 2.4 Implementazione dell'elenco collegato Linux
    • 2.5 Code di attesa
    • 2.6 Timer del kernel
    • 2.7 Metà inferiori
    • 2.8 Code attività
    • 2.9 Tasklet
    • 2.10 Softirqs
    • 2.11 Come vengono implementate le chiamate di sistema sull'architettura i386?
    • 2.12 Operazioni atomiche
    • 2.13 Spinlock, Spinlock di lettura e scrittura e Spinlock di grande lettore
    • 2.14 Semafori e lettura / scrittura di semafori
    • 2.15 Supporto del kernel per il caricamento dei moduli
  3. Virtual Filesystem (VFS)
    • 3.1 Cache di Inodi e interazione con Dcache
    • 3.2 Registrazione / annullamento della registrazione del filesystem
    • 3.3 Gestione dei descrittori di file
    • 3.4 Gestione della struttura dei file
    • 3.5 Gestione di Superblock e Mountpoint
    • 3.6 Esempio di filesystem virtuale: pipefs
    • 3.7 Esempio di filesystem su disco: BFS
    • 3.8 Domini di esecuzione e formati binari
  4. Cache della pagina Linux
  5. Meccanismi IPC
    • 5.1 Semafori
    • 5.2 Code di messaggi
    • 5.3 Memoria condivisa
    • 5.4 Primitivi IPC Linux

E, per renderlo ancora più dolce, c'è una nuova Linux Kernel Development Third Edition di Robert Love e Slashdot ha una recensione.


1

Inizia con Linux Kernel Primer di Claudia Salzberg et al. Buono per cominciare con i principianti. Il libro di Robert Love non è sicuramente il libro con cui i principianti dovrebbero iniziare. Il libro degli ultimi è al di sopra del livello intermedio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.