Quali sono alcuni interessanti piccoli progetti del kernel Linux per aiutare a imparare l'origine?

StackOverflow https://stackoverflow.com/questions/135637

Domanda

Quali piccoli progetti suggeriresti a un principiante con il kernel, ma qualcuno che ha molti sistemi ed esperienza in C? Lo scopo è sviluppare una familiarità con il codice sorgente del kernel e una struttura per la sperimentazione di idee folli.

Sto cercando di pensare ad alcune piccole attività gestibili (ad esempio, aggiungere una syscall), ma cosa suggeriresti? Per un pubblico target, pensa a qualcuno che abbia almeno un corso di sistema operativo universitario al suo attivo.

È stato utile?

Soluzione

Quando ho seguito il suddetto corso di laurea per SO, uno dei nostri compiti era quello di aggiungere alcune syscalls. Erano estremamente semplici, nient'altro che leggere e azzerare i contatori che contavano il numero di volte in cui venivano invocate altre syscall. Tuttavia, aggiungere una syscall richiede di guardare e modificare un bel po 'di file .. molti di loro sono nella stessa sottostruttura relativamente piccola del sorgente del kernel, ma è abbastanza per familiarizzare con le convenzioni di codifica, almeno.

Potresti anche considerare:

  • Aggiungendo un'altra modalità (molto semplice) allo scheduler per implementare una politica che trovi interessante. L'implementazione " una per dominarli tutti " è piuttosto difficile (e ancora più difficile concordare), ma fare un semplice programmatore O (N), anche uno scheduler O (1) rudimentale, può essere fatto in modo relativamente semplice, algoritmicamente parlando. Anche così, richiede di sfogliare molto codice.

  • Scrivere un driver di periferica per un hardware esterno molto semplice, come un microcontrollore a 8 bit che comunica via seriale o anche qualcosa che costruisci tu stesso. Se hai esperienza hardware, forse prova a scrivere un driver di dispositivo in grado di emulare un controller NES (bit-bang alcuni fili utilizzando la porta seriale e forse un registro a scorrimento da seriale a parallelo). Potresti anche fare qualcosa come guidare un display a LED a 7 segmenti davvero semplice (come hai in una sveglia) o una piccola collezione di essi.

Altri suggerimenti

Il progetto Kernel Janitors ne ha alcuni fantastici.

A rischio di scatenare una guerra di fiamma: ti consiglierei di stare lontano dal codice del kernel Linux. Se vuoi sporcarti le mani con la programmazione del kernel, vai con FreeBSD, NetBSD o OpenSolaris, per esempio. Il codice è molto più pulito e meglio strutturato (questo è ovviamente un parere soggettivo), effettivamente progettato e persino documentato. Inoltre hanno un debugger del kernel (nota che Linus è contrario sia ai debugger del kernel sia all'API stabile del kernel, il che rende qualsiasi kernel una destinazione mobile per il tuo lavoro). Questi sistemi operativi hanno persino un elenco di progetti sui rispettivi siti Web e personalmente ho un'ottima esperienza con le persone nei forum OpenSolaris e nelle mailing list di NetBSD.

Dici di avere esperienza con C: guarda i repository di codice sorgente web di Linux e OpenSolaris o alcuni BSD, confronta il codice e fai la tua opinione. Quello che sto dicendo è, suppongo, che ci sia qualcosa di più in UNIX open source rispetto a Linux, e che dovresti almeno guardarli prima di andare su Linux.

Un buon punto di partenza è un progetto basato su Unix v6 . " Xv6, un semplice sistema operativo di insegnamento simile a Unix "

Esiste anche cynix , un semplice kernel monolitico IA-32 unix-like (Unmaintained)

Un ottimo tutorial è " Avvia il tuo sistema operativo con clone UNIX ".

Prova a scaricare il codice sorgente MINIX  e giocaci, prova a capire la logica e ci vorrà del tempo senza dubbio, ma se ti attieni puoi essere un esperto in un po 'di tempo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top