2012-01-06 42 views
4

我正在使用at91sam9260進行我的開發。有一個Linux內核運行在它上面,我開始自己的軟件。我可以使用JTAG在嵌入式Linux上調試我的程序嗎?

我想知道如果我可以使用JTAG調試器來調試我正在使用的軟件,而沒有看到Linux內核上發生了什麼?

我在問,因爲我認爲在查看完整的Linux執行過程中調試我的軟件可能會變得非常複雜。

換句話說,我想知道在使用JTAG探頭進行調試時是否可能存在一些抽象層?

回答

2

一般來說,您可以將jtag作爲調試器,與您在該處理器上運行的軟件完全無關。例如,如果您停止處理器想要更改RAM中的某些指令並重新啓動,則ram中的指令更改是數據訪問,它不會通過指令高速緩存,而是通過數據訪問緩存,如果你有一個單獨的指令和數據緩存,它們被啓用,並且你修改的一些指令位於指令緩存中的地址,你可以很快地將新的和陳舊的指令送到處理器。 Linux喜歡在那裏使用緩存。

其次是mmu,處理器/ jtag很可能在mmu的處理器端而不是物理地址上運行,所以根據硬件的工作方式,例如,如果您通過地址設置斷點處理器中的調試單元和操作系統任務在相同的地址空間切換到另一個程序/線程時,您將在錯誤的程序的正確地址斷點。如果調試器/處理器通過修改ram中的指令來設置斷點,那麼您會遇到上面的緩存問題,如果沒有緩存,那麼您將在正確的線程中斷開正確的指令,但是那樣會導致緩存問題。

如果處理器支持基於jtag的調試,但不會根據您選擇在該處理器上運行的任何軟件進行更改,那麼絕對是底線。

+0

感謝大家的回答。你可能是對的,告訴我使用另一個更合適的調試器在Linux內核之上運行。實際上,我目前也正在嘗試通過uart使用gdb來調試我的程序。這比我想象的要複雜一點。無論如何,再次感謝。 – nomoney29 2012-01-09 08:03:20

+0

不同意:即使除了虛擬內存,調試在多任務內核下運行的應用程序代碼如果驅動調試器的軟件沒有意識到(或者最好是合作)內核,它可能會非常難看。通常,這些程序使用內核中的調試功能(例如ptrace)和目標上運行的調試存根進行調試,並通過數據接口進行通信。硬件調試器對於調試內核本身更爲有用,尤其是它的初始啓動。 – 2014-03-12 21:29:07

2

這取決於JTAG設備,它是驅動程序。就我個人而言,我只知道一個能夠做到這一點的設備:XDS560 + Code Composer Studio(CCS)。但是,也可以有其他的。

我建議諮詢您設備的製造商。

3

可能不是 - 據我所知,大多數JTAG調試器都假定能夠在處理器中設置斷點。在多任務操作系統下,也會停止操作系統內核。

像QNX這樣的嵌入式操作系統的調試器在OS內核之上運行,並且通過以太網進行通信。

0

對於ARM,Asset Arium系列爲claimed以能夠調試應用程序代碼。雖然我沒有嘗試過。

相關問題