2009-09-30 21 views
6

Sto facendo lo sviluppo del kernel Linux e sto cercando di utilizzare Netbeans. Nonostante il supporto dichiarato per i progetti C basati su Make, non riesco a creare un progetto Netbeans pienamente funzionante. Questo nonostante la compilazione avendo Netbeans analizzare un binario del kernel che è stato compilato con informazioni complete di debug. I problemi includono:Configurazione di Netbeans/Eclipse per lo sviluppo del kernel Linux

  • file vengono erroneamente esclusi: Alcuni file sono in modo non corretto in grigio nel progetto, il che significa che Netbeans non crede che dovrebbero essere inclusi nel progetto, quando in realtà sono compilati nel kernel. Il problema principale è che Netbeans mancherà di tutte le definizioni esistenti in questi file, come le strutture e le funzioni dei dati, ma mancheranno anche le definizioni delle macro.
  • Impossibile trovare definizioni: abbastanza auto-esplicativo: spesso, Netbeans non riesce a trovare la definizione di qualcosa. Questo è in parte il risultato del problema precedente.
  • non riesce a trovare i file di intestazione: auto-esplicativo

Mi chiedo se qualcuno ha avuto successo con la creazione di Netbeans per lo sviluppo del kernel di Linux, e in caso affermativo, quali impostazioni hanno usato. In definitiva, sto cercando Netbeans per poter analizzare il Makefile (preferito) o estrarre le informazioni di debug dal binario (meno desiderabile, dato che questo può rallentare notevolmente la compilazione), e determinare automaticamente quali file sono effettivamente compilati e quali i macro sono effettivamente definiti. Quindi, in base a ciò, mi piacerebbe essere in grado di trovare le definizioni di qualsiasi struttura dati, variabile, funzione, ecc. E avere completamento automatico completo.

Lasciatemi prefazione a questa domanda con alcuni punti:

  • io non sono interessato a soluzioni che coinvolgono Vim/Emacs. So che alcune persone come loro, ma io non sono uno di loro.
  • Come il titolo suggerisce, sarei anche felice di sapere come set-up Eclipse a fare quello che devo
  • Mentre io preferirei una copertura perfetta, qualcosa che manca solo uno su un milione definizioni è ovviamente bene

L'utile funzione "Domande correlate" di SO mi ha informato che la seguente domanda è correlata: https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development. Leggendolo, la domanda è più di un confronto tra IDE, mentre sto cercando come impostare un IDE particolare. Anche così, l'utente Wade Mealing sembra avere una certa esperienza nel lavorare con Eclipse su questo tipo di sviluppo, quindi apprezzerei sicuramente le sue (e ovviamente tutte le vostre) risposte.

Cheers

risposta

0

Ho fatto qualche sviluppo di Linux incorporato. Compreso lo sviluppo del modulo del kernel e ho importato l'intero codice sorgente del kernel Linux in Eclipse, come progetto separato. Ho costruito il kernel stesso al di fuori di Eclipse (finora), ma non ho alcuna ragione per cui non dovrei essere in grado di configurare l'ambiente di compilazione all'interno di Eclipse per costruire il kernel. Per i miei progetti, purché imposti le proprietà PATH per puntare alle directory di origine linux appropriate, sembra essere abbastanza buono per il completamento dei nomi per i campi struct, ecc.

Non posso davvero commentare, se sta raccogliendo le definizioni corrette e non ingrigendo le sezioni corrispondenti, in quanto non ho prestato molta attenzione ai file all'interno del kernel stesso.(finora)

Mi chiedevo anche di usare Netbeans come un IDE 'C' linux, come preferisco lo sviluppo di GUI di Netbean per Java.

0

penso che questo dovrebbe funzionare (fatto ogni passo per vari progetti):

[1] Modifica kernel build scr ipts per lasciare file .d. Di default vengono rimossi. [2] Registra il processo di compilazione in un file. [3] Scrivi uno script per analizzare il log di costruzione. [3.1] Dal log di compilazione, si conoscono tutti i file .c. [3.2] Dal file .c, si sa quale è il file .d corrispondente. [3.3] Cerca nei file .d per scoprire tutti i file .h inclusi. [3.4] Formare un elenco completo di file .c e .h. [4] Ora crea una nuova cartella e usa "ln -s" o "ln" per selezionare i file di interesse.

Ora, creare un progetto Netbeans per il codice sorgente esistente in [4]. Configurare l'assistenza del codice per utilizzare il file make-log. Dovresti vedere esattamente il codice sorgente efficace come quando lo costruisci su [2].

Alcune spiegazioni per i passaggi precedenti:

A [2], fare una vera e propria compilazione in modo che il file di registro contiene i file esatto e le bandiere di interesse. I netbeans successivi saranno in grado di utilizzare i flag esatti da analizzare.

In [4], selezionare solo i file che si desidera vedere. Incorporare l'intero albero del kernel in netbeans non sarà pratico.

C'è un trucco per analizzare i file .d: molti degli elementi depenuti non sono veri percorsi di un file .h, sono una voce modificata per parte delle sezioni di configurazione di linux nel file di configurazione automatica. Potrebbe essere necessario invertire la modifica per capire quale sia il vero file di intestazione.

In realtà c'è un argomento sul sito netbeans. Questo è l'URL di discussione: http://forums.netbeans.org/ntopic3075.html. E c'è una pagina wiki collegata dalla discussione: wiki.netbeans.org/CNDLinuxKernel. Fondamentalmente ti chiede di creare un prefisso con CFLAGS = "- g3 -gdwarf-2".

+0

Grazie per il vostro consiglio. Ho provato qualcosa di simile con i file make-log, ma alla fine mostrava sempre gli stessi problemi. E usare quei CFLAG che hai specificato sarebbe un PITA perché aumenta di molto il tempo di compilazione. –

+0

Dovrebbe funzionare in base all'esperienza passata. Ci proveremo. Anche se alcuni simboli a volte mancano e appaiono di nuovo che è puramente un problema interno di Netbeans. – Minghua

+0

[Qui] (https://github.com/minghuascode/Nbk/blob/master/note-nbkparse) Ho creato uno script per generare il file make-log adatto per NetBeans per leggere e interpretare dall'output e dal dep File. Sì, è necessario modificare i makefile di Linux per lasciare i file dep. Funziona molto bene per me (quasi senza simboli mancanti). I passaggi sono un po 'lunghi, ma una volta che lo hai fatto una volta tutto sarà semplice. Auguro questo aiuto – minghua

0

Ho trovato questo collegamento molto utile nell'impostazione dell'indicizzazione corretta in Eclipse. Richiede l'esecuzione di uno script per modificare l'ambiente Eclipse in modo che corrisponda alle opzioni del kernel, nel mio caso

$ autoconf-to-eclipse.py ./include/generated/autoconf.h.

An illustrated guide to indexing the linux kernel in eclipse

2

ho già scritto in una risposta. Ora vengo fuori con tutti i dettagli della soluzione e vorrei condividerla. Purtroppo StackOverflow non mi consente di modificare la risposta precedente. Quindi lo scrivo in questa nuova risposta.

Richiede alcuni passaggi.


[1] Il primo passo è quello di modificare gli script Linux per lasciare i file dep. Per impostazione predefinita, dopo il loro utilizzo nella build, tali file DEP vengono rimossi. Questi file dep contengono informazioni di dipendenza esatte su quali altri file un file C dipende. Abbiamo bisogno di loro per creare un elenco di tutti i file coinvolti in una build. Così, modificare i file sotto linux-x.y.z/script per rendere loro di non rimuovere i file dep in questo modo:

linux-3.1.2/scripts 

Kbuild.include: echo do_not_rm1 rm -f $(depfile); 
Makefile.build: echo do_not_rm2 rm -f $(depfile); 

Gli altri passi sono dettagliate nel mio codice github file di progetto https://github.com/minghuascode/Nbk/blob/master/note-nbkparse. Approssimativamente:

[2] Configura con il tuo metodo di configurazione, ma assicurati di utilizzare l'opzione "O =" per creare i file obj in una directory separata.

[3] Quindi utilizzare la stessa opzione "O =" e l'opzione "V = 1" per creare linux e salvare l'output in un file.

[4] Eseguire il mio script nbkparse dal progetto github precedente. Funziona: [4.1] Legge nel file di registro make e nei file dep. Genera un comando di mirroring. [4.2] Eseguire il comando mirroring per collegare in modo permanente i file di origine rilevanti in un albero separato e generare un file di log di make da utilizzare per NetBeans.


Ora creare un progetto NetBeans C utilizzando l'albero dei sorgenti con mirroring e il file di registro generato. NetBeans dovrebbe essere in grado di risolvere tutti i simboli del kernel. E vedrai solo i file coinvolti nella build.

Problemi correlati