2009-09-30 16 views
6

Zajmuję się rozwojem jądra Linuksa i próbuję korzystać z Netbeans. Pomimo deklarowanej obsługi projektów opartych na Make-C, nie mogę stworzyć w pełni funkcjonalnego projektu Netbeans. Dzieje się tak pomimo kompilacji, w której Netbeans analizuje plik binarny jądra skompilowany z pełnymi informacjami debugowania. Problemy obejmują:Konfigurowanie Netbeans/Eclipse dla Linux Kernel Development

  • pliki są błędnie wykluczony: Niektóre pliki są nieprawidłowo wyszarzone w projekcie, co oznacza, Netbeans nie wierzy, powinny one zostać uwzględnione w projekcie, podczas gdy w rzeczywistości są one zestawiane w jądro. Głównym problemem jest to, że Netbeans ominie wszelkie definicje istniejące w tych plikach, takie jak struktury danych i funkcje, ale także pominie definicje makr.
  • nie można znaleźć definicji: Dość samo-wyjaśniające - często razy Netbeans nie może znaleźć definicji czegoś. Jest to częściowo wynikiem powyższego problemu.
  • nie może znaleźć plików nagłówkowych: oczywista

Zastanawiam się, czy ktoś miał sukces konfigurowania Netbeans dla rozwoju jądra Linux, a jeśli tak, to jakie ustawienia są stosowane. Ostatecznie szukam Netbeans, aby móc albo parsować Makefile (preferowany), albo wyodrębnić informacje debugowania z pliku binarnego (mniej pożądane, ponieważ może to znacząco spowolnić kompilację) i automatycznie określić, które pliki są faktycznie skompilowane i które makra są faktycznie zdefiniowane. Następnie, w oparciu o to, chciałbym móc znaleźć definicje dowolnej struktury danych, zmiennych, funkcji itp. I mieć pełne automatyczne uzupełnianie.

Pozwól mi przedmowa to pytanie w niektórych punktach:

  • Nie jestem zainteresowany rozwiązań obejmujących vim/Emacs. Wiem, że niektórzy ludzie je lubią, ale ja nie jestem jednym z nich.
  • Jak sam tytuł sugeruje, byłbym również zadowolony wiedzieć, jak set-up Eclipse robić to, co muszę
  • Chociaż wolałbym doskonały zasięg, coś, tylko strzela jedna na milion definicji jest oczywiście w porządku

Przydatna funkcja "Podobne pytania" poinformowała mnie, że następujące pytanie jest powiązane: https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development. Po przeczytaniu tego pytania, jest to raczej porównanie między IDE, podczas gdy ja szukam sposobu ustawienia konkretnego IDE. Mimo to użytkownik Wade Mealing zdaje się mieć doświadczenie w pracy z Eclipse przy tego rodzaju rozwoju, więc z pewnością doceniam jego (i oczywiście wszystkie twoje) odpowiedzi.

Pozdrowienia

Odpowiedz

0

Zajmuję się rozwojem wbudowanych Linuksa. W tym rozwój modułu jądra i zaimportowano cały kod źródłowy jądra Linux do Eclipse, jako osobny projekt. Budowałem jądro poza Eclipse (do tej pory), ale nie ma powodu, dla którego nie byłbym w stanie skonfigurować środowiska kompilacji wewnątrz Eclipse, aby zbudować jądro. Jeśli chodzi o moje projekty, o ile ustawię właściwości PATH tak, aby wskazywały na odpowiednie źródło linuksa, to są katalogi, wydaje się, że jest całkiem niezły w wypełnianiu nazw pól strukturalnych itp.

Nie mogę naprawdę komentować, jeśli chodzi o poprawne zdefiniowanie i nie wyszarzanie sekcji odpowiadających, ponieważ tak naprawdę nie zwracałem uwagi na pliki wewnątrz samego jądra.(do tej pory)

Zastanawiam się również nad używaniem Netbeans jako IDE "linku C", ponieważ wolę programowanie GUI w Netbean dla Java.

0

myślę, że to będzie działać (zrobione każdy krok dla różnych projektów):

[1] Modyfikuj jądro ipts, aby opuścić pliki .d. Domyślnie są one usuwane. [2] Zapisz proces kompilacji do pliku. [3] Napisz skrypt, aby przeanalizować dziennik kompilacji. [3.1] Z dziennika kompilacji znasz wszystkie pliki .c. [3.2] Z pliku .c wiesz, który jest odpowiedni plik .d. [3.3] Zajrzyj do plików .d, aby znaleźć wszystkie dołączone pliki .h. [3.4] Utwórz pełną listę plików .c i .h. [4] Teraz utwórz nowy katalog i użyj "ln -s" lub "ln", aby wybrać interesujące Cię pliki.

Teraz utwórz projekt Netbeans dla istniejącego kodu źródłowego w [4]. Skonfiguruj obsługę kodu, aby użyć pliku make-log. Powinieneś zobaczyć dokładnie taki efektywny kod źródłowy jak podczas budowania go w [2].

Niektóre wyjaśnienia do powyższych etapów:

W [2], zrób prawdziwego kompilacji więc plik dziennika zawiera dokładny plików i flagi zainteresowania. Później netbeans będzie mógł użyć dokładnych flag do analizy.

W [4] wybierz tylko te pliki, które chcesz wyświetlić. Włączenie całego drzewa jądra do netbeans będzie niepraktyczne.

Istnieje pewna sztuczka do parsowania plików .d: Wiele z zależnych elementów nie jest prawdziwymi ścieżkami do pliku .h, są one zmodyfikowanym wpisem dla części sekcji konfiguracji Linuxa w pliku automatycznej konfiguracji. Może zajść potrzeba cofnięcia modyfikacji, aby dowiedzieć się, który jest prawdziwym plikiem nagłówkowym.

Właściwie istnieje temat na stronie Netbeans. To jest adres dyskusji: http://forums.netbeans.org/ntopic3075.html. I jest strona wiki połączona z dyskusją: wiki.netbeans.org/CNDLinuxKernel. Zasadniczo prosi o przedrostek make z CFLAGS = "- g3 -gdwarf-2".

+0

Dziękuję za poradę. Próbowałem czegoś podobnego z plikami do tworzenia logów, ale w końcu wciąż wykazywał te same problemy. Używanie tych CFLAGS, które określiłeś byłoby PITA, ponieważ znacznie zwiększa czas kompilacji. –

+0

Powinien działać w oparciu o wcześniejsze doświadczenia. Spróbuję. Chociaż niektóre symbole czasami są pomijane i pojawiają się ponownie, co jest czysto wewnętrznym problemem Netbeans. – Minghua

+0

[tutaj] (https://github.com/minghuascode/Nbk/blob/master/note-nbkparse) Stworzyłem skrypt do generowania pliku make-log odpowiedniego dla NetBeans do odczytu i interpretacji z wyjścia make i dep akta. Tak, musisz zmodyfikować plik makefile, aby pozostawić pliki dep. Działa to bardzo dobrze (prawie brak brakujących symboli). Kroki są trochę dłuższe, ale gdy już raz to zrobisz, wszystko będzie proste. Życzę tej pomocy. – minghua

2

ja wcześniej pisał się odpowiedź. Teraz przedstawiam wszystkie szczegóły rozwiązania i chciałbym je udostępnić. Niestety stackoverflow nie pozwala mi edytować poprzedniej odpowiedzi. Więc piszę to w tej nowej odpowiedzi.

Dotyczy to kilku kroków.


[1] Pierwszy etap polega na modyfikacji skryptów Linux, aby pozostawić pliki w Dep. Domyślnie po zastosowaniu ich w produkcji, dep te pliki są usuwane. Te pliki dep zawierają dokładne informacje o zależnościach, od których innych plików zależy plik C. Potrzebujemy ich do stworzenia listy wszystkich plików zaangażowanych w kompilację. Tak więc, modyfikowanie plików pod Linux-x.y.z/skrypty, aby ich nie usunąć pliki DEP tak:

linux-3.1.2/scripts 

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

Pozostałe kroki są szczegółowo opisane w moim kod github pliku projektu https://github.com/minghuascode/Nbk/blob/master/note-nbkparse. Z grubsza:

[2] Skonfiguruj za pomocą swojej metody konfiguracji, ale upewnij się, że użyjesz opcji "O =" do zbudowania plików obj w oddzielnym katalogu.

[3] Następnie użyj tej samej opcji "O =" i opcji "V = 1", aby zbudować linux i zapisz wynik w pliku.

[4] Uruchom mój skrypt nbkparse z powyższego projektu github. To robi: [4.1] Przeczytaj w pliku dziennika make i plikach dep. Wygeneruj polecenie dublowania. [4.2] Uruchom polecenie tworzenia kopii lustrzanej, łącząc w odpowiedni sposób odpowiednie pliki źródłowe w osobne drzewo i wygeneruj plik dziennika tworzenia, który będzie używany przez NetBeans.


Teraz utwórz projekt NetBeans C, korzystając z drzewa źródła lustrzanego i wygenerowanego pliku dziennika. NetBeans powinien być w stanie rozwiązać wszystkie symbole jądra. I zobaczysz tylko pliki zaangażowane w kompilację.

Powiązane problemy