簡體   English   中英

為Linux內核開發設置Netbeans / Eclipse

[英]Setting up Netbeans/Eclipse for Linux Kernel Development

我正在做一些Linux內核開發,我正在嘗試使用Netbeans。 盡管宣布支持基於Make的C項目,但我無法創建功能齊全的Netbeans項目。 這是盡管編譯Netbeans分析使用完整調試信息編譯的內核二進制文件。 問題包括:

  • 錯誤地排除了文件:某些文件在項目中顯示為灰色,這意味着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進行此類開發方面具有一些專業知識,所以我當然會感謝他(當然還有你所有的)答案。

干杯

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

它涉及幾個步驟。


[1]第一步是修改linux腳本以保留dep文件。默認情況下,在構建中使用它們后,將刪除這些dep文件。 這些dep文件包含有關C文件所依賴的其他文件的確切依賴關系信息。 我們需要它們來創建構建中涉及的所有文件的列表。 因此,修改linux-xyz / scripts下的文件,使它們不要刪除這樣的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]運行mirroring命令將相關源文件硬鏈接到單獨的樹中,並生成供NetBeans使用的make-log文件。


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

Eclipse wiki有一個關於此的頁面:如何使用CDT來導航Linux內核源代碼

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

我無法評論,如果它正在拾取正確的定義而不是灰化對應的部分,因為我還沒有真正關注內核本身的文件。(到目前為止)

我也想知道將Netbeans用作linux'C'IDE,因為我更喜歡Netbean用於Java GUI開發。

我認為這會奏效(為各種項目完成每一步):

[1]修改內核構建腳本以保留.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”作為前綴。

我發現這個鏈接非常有助於在Eclipse中設置正確的索引。 在我的例子中,它需要運行一個腳本來改變Eclipse環境以匹配你的內核選項

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

在eclipse中索引linux內核的插圖指南

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM