Domanda

Sono sempre stato attratto dal mondo dell'hacking del kernel e dei sistemi embedded.
Qualcuno ha dei buoni tutorial (+ hardware facilmente disponibile) su come iniziare a scherzare con queste cose?
Qualcosa come kit per scrivere driver, ecc., che vengono forniti con una buona documentazione e sono convenienti?

Grazie!

È stato utile?

Soluzione

Se sei completamente nuovo allo sviluppo del kernel, suggerirei di non iniziare con lo sviluppo dell'hardware e di passare ad alcuni moduli del kernel "solo software" come proc file / sysfs o per esempi più complessi filesystem / network development, sviluppando su un uml/vmware/ scatola virtuale/...macchina, quindi mandare in crash la tua macchina non farà molto male :) Per lo sviluppo integrato potresti optare per un piccolo kit di sviluppo ARM o una piccola macchina Via C3/C4, o qualsiasi vecchio PC che puoi masterizzare con il tuo USB / PCI homebrew / qualunque cosa dispositivo.

Un buon punto di partenza è probabilmente Kernelnewbies.org - che contiene molti collegamenti e informazioni utili per gli sviluppatori del kernel e presenta anche un elenco di attività facili da implementare per i principianti.

Alcuni libri da leggere:

Comprendere il kernel Linux - un ottimo riferimento che descrive in dettaglio la progettazione dei sottosistemi del kernel

Driver di dispositivo Linux - è scritto più come un tutorial con molto codice di esempio, incentrato su come iniziare e spiegare gli aspetti chiave del kernel Linux.Introduce il processo di compilazione e le basi dei moduli del kernel.

Guida alla programmazione del modulo kernel Linux - Altro materiale introduttivo

Come suggerito in precedenza, guardare il codice Linux è sempre una buona idea, soprattutto perché le API del kernel Linux tendono a cambiare abbastanza spesso...LXR aiuta molto con un'interfaccia di navigazione molto bella - lxr.linux.no

Per comprendere il processo di creazione del kernel, questo collegamento potrebbe essere utile:

Makefile del kernel Linux (kbuild)

Ultimo ma non meno importante, esplora la directory Documentation della distribuzione Kernel Source!

Ecco alcuni esercizi interessanti rubati insolentemente da una classe di sviluppo del kernel:

  • Scrivere un modulo del kernel che crei il file /proc/jiffies riportando l'ora corrente in jiffies ad ogni accesso in lettura.
  • Scrivere un modulo del kernel fornendo il file proc /proc/sleep.Quando un'applicazione scrive un numero di secondi come testo ASCII in questo file ("echo 3 > /proc/sleep"), dovrebbe bloccarsi per il numero di secondi specificato.Gli accessi in scrittura non dovrebbero avere effetti collaterali sul contenuto del file, cioè negli accessi in lettura il file dovrebbe apparire vuoto (vedi LDD3, cap.6/7)
  • Scrivi un file proc in cui puoi memorizzare temporaneamente del testo (usando echo "blah" > /proc/pipe) ed estrailo di nuovo (cat /proc/pipe), cancellando il file.Attenzione ai problemi di sincronizzazione.
  • Modifica il modulo di esempio della pipe per registrarlo come dispositivo a caratteri /dev/pipe, aggiungi l'allocazione dinamica della memoria per le richieste di scrittura.
  • Scrivi un file system davvero semplice.

Altri suggerimenti

Un assoluto dovere È Questo libro di Rubini.(disponibile sia come copia cartacea che come copia digitale gratuita)

Fornisce implementazioni di diversi driver fittizi che non richiedono la presenza di hardware diverso dal PC.Quindi per iniziare lo sviluppo del kernel è il modo più semplice di procedere.

Per quanto riguarda il lavoro integrato, consiglierei di acquistare uno dei numerosi SBC (computer a scheda singola) disponibili.Ce ne sono alcuni basati su processori x86, solitamente con interfacce PC/104 (elettricamente PC/104 è identico allo standard del bus ISA, ma basato su connettori impilabili anziché su connettori edge - molto facile da interfacciare con hardware personalizzato)

Di solito hanno connettori VGA che semplificano il debug.

Per l'hacking Linux integrato, il semplice router Linksys WRT54G che puoi acquistare ovunque è una piattaforma di sviluppo a sé stante http://en.wikipedia.org/wiki/Linksys_WRT54G_series:

Il WRT54G è noto per essere il primo dispositivo di rete di livello consumer a cui è stato rilasciato il codice sorgente del firmware per soddisfare gli obblighi della GNU GPL.Ciò consente ai programmatori di modificare il firmware per cambiare o aggiungere funzionalità al dispositivo.Diversi progetti firmware di terze parti forniscono al pubblico firmware avanzato per il WRT54G.

Ho provato a installare OpenWrt E DD-WRT firmware su di esso.Puoi verificarli come punto di partenza per l'hacking su una piattaforma a basso costo.

Per cominciare, il modo migliore è leggere molto codice.Poiché Linux è Open Source, troverai dozzine di driver.Trovane uno che funzioni in qualche modo come quello che vuoi scrivere.Troverai del codice decente e relativamente facile da capire (il dispositivo di loopback, ROM fs, ecc.)

Puoi anche usare il lxr.linux.no, che è il codice Linux con riferimenti incrociati.Se devi scoprire come funziona qualcosa e hai bisogno di esaminare il codice, questo è un modo semplice e valido.

C'è anche un libro O'Reilly (Understanding the Linux Kernel, la 3a edizione riguarda i kernel 2.6) o se vuoi qualcosa di gratuito, puoi usare il libro Advanced Linux Programming (http://www.advancedlinuxprogramming.com/).C'è anche molta documentazione specifica su file system, reti, ecc.

Alcune cose per cui essere preparati:

  • eseguirai la compilazione incrociata.Il dispositivo incorporato utilizzerà una CPU MIPS, PowerPC o ARM ma non avrà potenza della CPU, memoria o spazio di archiviazione sufficienti per compilare il proprio kernel in un periodo di tempo ragionevole.
  • Un sistema embedded utilizza spesso una porta seriale come console e, per ridurre i costi, di solito non è presente alcun connettore saldato sulle schede di produzione.Il debug del panico del kernel è molto difficile a meno che tu non possa saldare un connettore della porta seriale, non avrai molte informazioni su cosa è andato storto.

IL LinksysNSLU2 è un modo economico per ottenere un vero sistema embedded con cui lavorare e dispone di una porta USB per aggiungere periferiche.È inoltre possibile utilizzare uno qualsiasi dei numerosi punti di accesso wireless, vedere la Pagina di compatibilità OpenWrt. Tieni presente che gli attuali modelli del Linksys WRT54G che troverai nei negozi non possono più essere utilizzati con Linux:hanno meno RAM e Flash per ridurre i costi.Cisco/Linksys ora utilizza vxWorks sul WRT54G, con un ingombro di memoria inferiore.

Se vuoi davvero entrarci, i kit di valutazione per CPU embedded partono da un paio di centinaia di dollari USA.Consiglierei di non spendere soldi per questi a meno che tu non ne abbia bisogno professionalmente per un lavoro o un contratto di consulenza.

Sono completamente principiante nell'hacking del kernel :) Ho deciso di acquistare due libri "Linux Program Development:una guida con esercizi" e "Scrivere driver di dispositivi Linux:una guida con esercizi" Sono scritti in modo molto chiaro e forniscono una buona base per l'ulteriore apprendimento.

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