Ambiente di hacking del kernel


22

Ho lavorato in sistemi operativi embedded come uCOS, ThreadX. Mentre ho applicazioni codificate in Linux, ora sto programmando di iniziare ad imparare il kernel Linux. Ho alcune domande sull'ambiente.

  1. Qual è la migliore distribuzione, che ha strumenti facili da usare per lo sviluppo del kernel? (finora avevo usato RHEL e Fedora. Mentre mi sento a mio agio con questi, sembra anche che Ubuntu abbia degli script integrati per una facile compilazione del kernel come make_kpkg, ecc.)

  2. Puoi descrivere la migliore configurazione per il debug del kernel? Durante il debug di altri sistemi operativi embedded, ho usato la porta seriale per scaricare i progressi, JTAG, ecc. Che tipo di installazione usa gli sviluppatori del kernel Linux? (Il mio PC testbed con porta seriale è sufficiente per le mie esigenze? Se sì, come configurare il kernel per il dump alla porta seriale?) Sto programmando di reindirizzare i messaggi del kernel sulla console seriale che verranno letti sul mio laptop.

  3. Qual è lo strumento migliore per il debug e la traccia del codice del kernel? Come accennato in precedenza, la console seriale è l'unico modo? O esiste qualche tipo di interfaccia IDE / JTAG per PC?


3
Per # 1, Linus stesso usa Fedora, quindi forse dice qualcosa. Non so abbastanza su questo argomento per dare davvero una risposta, ma sarei interessato a quello che dicono gli altri.
jonescb,

1
make_kpkg viene da Debian, su cui si basa Ubuntu e la mia distribuzione preferita;)
Account cancellato

Risposte:


14

Il mio gusto personale per lo sviluppo del kernel Linux è Debian. Ora per i tuoi punti:

  1. Come avrete probabilmente intuito Ubuntu non porta nulla di nuovo nel kernel per facilitare lo sviluppo, a parte ciò che è già disponibile in Debian. Ad esempio make_kpkg è una funzione Debian e non Ubuntu. Ecco alcuni link per iniziare sulle comuni attività di sviluppo del kernel Linux in Debian:

  2. Il modo più semplice per eseguire il debug del kernel è usare QEMU e GDB. Alcuni link per iniziare:

    Tuttavia, dovresti essere consapevole che questo metodo non è praticabile per alcuni scenari come il debug di specifici problemi hardware e simili, per i quali sarebbe meglio usare il debug seriale fisico e l'hardware reale. Per questo puoi usare KGDB (funziona anche con Ethernet). Anche KDB è una buona scelta. Oh, e comunque, sia KGDB che KDB sono stati uniti nel kernel di Linux. Altro su quei due qui . Un altro metodo interessante, che funziona meravigliosamente per problemi non legati all'hardware, sta usando il kernel Linux in modalità utente . L'esecuzione del kernel in modalità utente come qualsiasi altro processo consente di eseguire il debug proprio come qualsiasi altro programma ( esempi ). Altro su Linux in modalità utenteQUI . UML fa parte del kernel Linux dalla 2.6.0, quindi è possibile compilare qualsiasi versione ufficiale del kernel sopra quella in modalità UML seguendo questi passaggi .

  3. Vedi il punto 2. Sfortunatamente non esiste un metodo migliore per eccellenza, poiché ogni strumento / metodo ha i suoi pro e contro.


Grazie! per la risposta dettagliata. A proposito, sono interessato ai sottosistemi fs e bio nel kernel. quale tipo di installazione sarebbe la migliore per me?
rajaganesh87,

UML e QEMU sono probabilmente la strada da percorrere, dato che puoi giocare facilmente con i filesystem a costo zero.
Shinnok,

Collegamenti molto buoni, solo una cosa. Anche il mio preferito è debian, ma lo sviluppo del kernel può essere realizzato con qualsiasi distribuzione. Forse il gioco è il modo migliore se sei purista poiché usa un kernel vanilla, ma le configurazioni non sono cose cattive, troverai il meglio.
D4RIO,


6

Se stai sviluppando una piattaforma integrata non basata sull'hardware i386, dovrai eseguire la compilazione incrociata. Il progetto Emdebian fornisce toolchain da sviluppare per molte architetture (ARM, m68k, MIPS e altro) su PC (i386 o amd64). Ciò significa che sotto Debian, puoi semplicemente aggiungere i repository e apt-get install la toolchain per i target di tua scelta.


3

Esistono sonde JTAG, ma sono piuttosto costose (e le aziende che le costruiscono hanno contratti esclusivi). Il modo migliore per eseguire il debug del codice del kernel è avviarlo in kvm o qemu con gdbserver all'interno dell'emulazione.


Ancora meglio, usa la modalità utente Linux. Linux come un normale processo utente.
vonbrand,

0

In sostanza qualsiasi distribuzione mainline dovrebbe funzionare bene per questo (usano la propria distribuzione per hackerarla). Usa tutto ciò che ti sembra più comodo.

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.