2009-09-30 78 views
6

我正在做一些Linux內核開發,我試圖使用Netbeans。儘管宣佈支持Make-based C項目,但我無法創建功能完備的Netbeans項目。儘管編譯時有Netbeans分析了一個內核二進制文件,該二進制文件是用完整的調試信息編譯的。問題包括:設置Netbeans/Eclipse的Linux內核開發

  • 文件被錯誤地排除:有些文件在項目,這意味着Netbeans的不相信他們應該被包含在項目中不正確灰色的,而事實上,它們被編譯進內核。主要的問題是Netbeans會錯過這些文件中存在的任何定義,例如數據結構和函數,但也會錯過宏定義。
  • 找不到定義:不言而喻 - 通常情況下,Netbeans無法找到某個東西的定義。這部分是上述問題的結果。
  • 找不到頭文件:不言自明

如果任何人有過與Linux內核開發設置Netbeans的成功,我想知道,如果是的話,他們使用什麼設置。最終,我在尋找Netbeans來解析Makefile(首選)或從二進制文件中提取調試信息(不太理想,因爲這會顯着減慢編譯速度),並自動確定哪些文件實際編譯以及哪些宏實際上是定義的。然後,基於此,我希望能夠找到任何數據結構,變量,函數等的定義,並具有完整的自動完成功能。

讓我前言這個問題的一些要點:

  • 我不感興趣,在涉及VIM/Emacs的解決方案。我知道有些人喜歡他們,但我不是其中之一。
  • 正如標題所暗示的,我會還高興地知道如何建立Eclipse中做什麼,我需要
  • 雖然我寧願完美的覆蓋面,這東西只差萬分之一的定義顯然是細

SO的有用「相關問題」功能告訴我,以下問題是相關的:https://stackoverflow.com/questions/149321/what-ide-would-be-good-for-linux-kernel-driver-development。在閱讀之後,問題更多的是IDE之間的比較,而我正在尋找如何設置特定的IDE。即使如此,用戶Wade Mealing似乎在使用Eclipse進行這種開發方面有一些專業知識,所以我當然會很欣賞他的(當然也包括所有的)答案。

乾杯

回答

0

我一直在做一些嵌入式linux開發。包括內核模塊開發,並將整個Linux內核源代碼導入到Eclipse中,作爲一個單獨的項目。我一直在Eclipse之外構建內核(到目前爲止),但我沒有任何理由不能在Eclipse中設置構建環境來構建內核。對於我的項目,只要我將PATH屬性設置爲指向相應的linux源包含目錄,它似乎是相當不錯的結構字段的名稱完成等。

我真的不能評論,關於if它正在挑選正確的定義並且不會使相應的部分灰白,因爲我沒有真正關注內核本身的文件。(到目前爲止)

我也想知道如何使用Netbeans作爲Linux'C'IDE,因爲我更喜歡Netbean的Java GUI開發。

0

,我認爲這會工作(做每一個步驟爲各種項目):

[1]修改內核構建scr ipts離開.d文件。默認情況下,它們被刪除。 [2]將構建過程記錄到文件中。 [3]編寫腳本來解析構建日誌。 [3.1]從構建日誌中,你知道每個.c文件。 [3.2]從.c文件中,您知道哪個是相應的.d文件。 [3.3]查看.d文件以找出所有包含的.h文件。 [3.4]形成完整的.c和.h文件列表。 [4]現在創建一個新的目錄,並使用「ln -s」或「ln」來選擇感興趣的文件。

現在,在[4]中爲現有源代碼創建一個Netbeans項目。 配置代碼幫助以使用make-log文件。你應該看到 正如你在[2]中構建它的有效源代碼。

幾點說明上述步驟:

在[2],做一個真正的構建,因此日誌文件包含的具體文件和感興趣的標誌。 後來的netbeans將能夠使用確切的標誌來解析。

在[4],只選擇你想看的文件。將整個內核樹整合到netbeans中將是不切實際的。

解析.d文件有一個技巧:許多依賴的項目不是真正的.h文件路徑,它們是自動配置文件中部分linux配置部分的修改條目。您可能需要反轉修改以找出哪個是真正的頭文件。

其實在netbeans站點上有一個話題。這是討論網址:http://forums.netbeans.org/ntopic3075.html。還有一個wiki頁面與討論鏈接:wiki.netbeans.org/CNDLinuxKernel。基本上它會要求你用CFLAGS =「 - g3 -gdwarf-2」作爲前綴。

+0

感謝您的建議。我嘗試了一些類似於make-log文件的方法,但最終仍然出現了相同的問題。使用你指定的CFLAGS將是一個PITA,因爲它會大大增加編譯時間。 – 2010-06-09 16:22:11

+0

它應該基於過去的經驗。會試試看。雖然有些符號有時會丟失並再次出現,這純粹是Netbeans的內部問題。 – Minghua 2010-06-09 17:50:59

+0

[Here](https://github.com/minghuascode/Nbk/blob/master/note-nbkparse)我創建了一個腳本來生成適合NetBeans的make-log文件,以便從make輸出和dep文件。是的,你需要修改linux makefiles來保留dep文件。它對我來說非常好(幾乎沒有丟失的符號)。這些步驟有點冗長,但一旦完成,一切都將變得簡單。希望這個幫助。 – minghua 2012-02-07 05:19:37

2

我以前寫了一個答案。現在我想出解決方案的所有細節,並希望分享它。不幸的是,stackoverflow不允許我編輯以前的答案。所以我把它寫在這個新的答案中。

它涉及幾個步驟。


[1]的第一個步驟是修改Linux腳本離開在DEP文件。在默認情況下在構建使用後,這些DEP文件都被刪除。這些dep文件包含有關C文件依賴哪些其他文件的確切依賴關係信息。我們需要他們創建構建中涉及的所有文件的列表。因此,修改linux下X.Y.Z文件/腳本,使他們不刪除這樣的DEP文件:

linux-3.1.2/scripts 

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

其他步驟都在我的GitHub代碼的項目文件https://github.com/minghuascode/Nbk/blob/master/note-nbkparse詳細。大致你這樣做:

[2]配置您的配置方法,但一定要使用「O =」選項將obj文件構建到單獨的目錄中。

[3]然後使用相同的「O =」選項和「V = 1」選項來構建linux,並將make輸出保存到一個文件中。

[4]從上面的github項目運行我的nbkparse腳本。它的確如下: [4.1]讀取make日誌文件和dep文件。生成鏡像命令。 [4.2]運行鏡像命令將相關源文件硬鏈接到單獨的樹中,併爲NetBeans生成一個生成日誌文件以供使用。


現在使用鏡像源樹和生成的日誌文件創建一個NetBeans C項目。 NetBeans應該能夠解析所有內核符號。你只會看到構建中涉及的文件。