Il modo migliore per entrare nella programmazione del kernel?


8

Non tanto chiedendo quali libri (anche se si conoscono guide / tutorial che potrebbero essere utili) ma qual è il modo migliore per iniziare a fare la programmazione del kernel e c'è una distribuzione particolare su cui sarebbe meglio imparare?

Sono principalmente interessato alla parte Device Driver, ma voglio imparare anche come è impostato il Kernel (Moduli e simili) Ho circa 4-5 anni di esperienza con C / C ++ ma è principalmente conoscenza del College (quindi è non come esperienza lavorativa di 4-5 anni, se sai cosa intendo)


4
Per cominciare, è scritto il kernel con una e.
Caleb,

Ya ho notato che quando stavo mettendo i tag lol.

4
La prossima volta prenditi il ​​tempo per ripararlo. È un buon modo per rispettare la comunità qui che sta impiegando il tempo per aiutarti. Inoltre, se vuoi codificare il kernel, dovrai essere rigoroso riguardo a dettagli del genere!
Caleb,

@Caleb, lo farà!

Grazie per aver posto questa domanda, mi sono sempre chiesto
Mike Pennington

Risposte:


11

In primo luogo:

Per le fasi del bambino, la scrittura di varie varianti sui moduli "ciao mondo" e sui driver hardware virtuali è il modo migliore per iniziare (l'hardware reale introduce i problemi del mondo reale meglio affrontati quando si ha più idea di quello che si sta facendo).

"Linux Device Driver" è un libro eccellente e vale la pena iniziare con: http://lwn.net/Kernel/LDD3/

LDD (almeno una volta) ha esercitazioni in cui hai scritto driver virtuali, ad esempio dischi RAM e dispositivi di rete virtuale.

In secondo luogo:

iscriviti a https://lkml.org/ o alla mailing list di un sottosistema in cui effettuerai l'hacking. Stai in agguato, scansionando i thread, leggendo la revisione del codice (risposte alle patch) per vedere che tipo di cose le persone inciampare o riprendere.

Verifica se riesci a ottenere hardware (economico) per un dispositivo non ancora supportato o non ancora supportato. Buoni candidati sono schede di rete USB economiche o periferiche USB simili simili a basso costo. Qualcosa con un driver obsoleto o fuori albero, forse il fornitore scritto, forse per 2.4.x, è l'ideale, dal momento che puoi iniziare con qualcosa che funziona (una sorta di) e adattarlo gradualmente / riscrivere testando mentre vai. Il mio primo tentativo di guida è stato per una scheda di rete USB Davicom DM9601. C'era un driver del kernel scritto da un fornitore della serie 2.4 che ho lentamente adattato alla 2.6. (Nota: il driver in mainline non è il mio driver, alla fine qualcun altro ne ha scritto uno da zero).

Un altro buon modo è quello di guardare il sito Kernel Newbies, in particolare il todo "kernel janitors": http://kernelnewbies.org/KernelJanitors/Todo Questo è un elenco di attività che un principiante dovrebbe essere in grado di affrontare.


4
Buona risposta per Linux, manca solo una risorsa: LXR per sfogliare il sorgente del kernel.
Gilles 'SO- smetti di essere malvagio'

8

Esistono molti kernel.

Linuxnon è l'unico gioco là fuori, ma è il più utilizzato. Alcune persone raccomandano al minixkernel di comprendere i concetti del sistema operativo. Vorrei andare con Linux 2.6.x series in quanto è il più comune e non andrà sprecato in qualcosa (quasi) che nessuno usa. Notevoli Solaris, XNU (Mac), FreeBSD e Dragonfly. 1

Trova qualcosa di super semplice (porta seriale, usb, ecc.) E fallo fare qualcos'altro. Per una sfida in più, prova a scrivere un modulo del kernel per qualcosa che non ne ha ancora uno. (Assicurati di google il sospetto tramite pci sudo lspci -nne / o id usb sudo lsusbprima.)

Aggiornamento: non farlo direttamente sul tuo sistema principale, usa le macchine virtuali (VM) (computer in un computer) come menzionato. VirtualBox può fornire questo ed è gratuito. Inoltre, non voglio che sembri travolgente, ma prova gli snapshot della VM in modo da poter tornare indietro nel caso in cui qualcosa rompa la VM stessa.

Aggiornamento 2 : la nota su Git (DVCSes inc. Mercurial, fossil, bazaar, darcs) è una buona idea, principalmente per codice e file piccoli e importanti. Cerca di non usare Git per eseguire il backup di musica, video e simili a meno che tu non ne conosca le implicazioni. ;)


6

Trova un modulo o un driver che desideri modificare o inizia con un tipo di modulo null / hello world e costruisci da lì. In particolare, lavora con un modulo perché ti permetterà di caricare, scaricare, ricompilare e ricaricare il codice in un kernel in esecuzione. Successivamente puoi entrare nei bit principali, ma fondamentalmente i moduli hanno tutti i tipi di e puoi fare praticamente tutto ciò che ti piace.

In secondo luogo, utilizzare una macchina virtuale. Installa un computer guest su VirtualBox o alcuni su VM e fai il test del kernel lì dentro per un po '. In questo modo non ucciderai il tuo sistema principale quando rompi qualcosa e riavviare, tornare indietro a un'istantanea funzionante, ecc. È davvero facile.

Terzo, impara git.


1

Qualcuno menziona già il libro "Driver di dispositivo Linux": si tratta di una risorsa eccellente e lo consiglio vivamente.

Sebbene la domanda menzioni l'originatore non sta chiedendo specificamente libri, la più recente edizione del libro "Capire il kernel Linux" ( http://oreilly.com/catalog/9780596005658/ ) è preziosa nell'apprendimento del kernel Linux in generale e contiene anche una sezione sui driver di dispositivo Linux.

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.