<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 利用JTAG OCD加速Linux設備開發(fā)

          利用JTAG OCD加速Linux設備開發(fā)

          作者:風河系統(tǒng)公司 韓青 時間:2008-05-06 來源:《電子設計應用》 收藏

            引言

          本文引用地址:http://www.ex-cimer.com/article/82189.htm

            傳統(tǒng)上,調試嵌入式產品需要將硬件和軟件工具結合起來,如用JTAG工具進行硬件bring-up,用基于代理(agent-based)的解決方案進行軟件開發(fā)。這些JTAG和基于代理的工具相結合的方法通??梢越鉀Q單點問題,但它們最初并不是專門針對集成化的開發(fā)而設計的。因而,在當今集成化的產品開發(fā)中,這些傳統(tǒng)方法常常是不可行的。

            但是,我們可以在內核的配置、補丁管理以及在基于Eclipse的IDE環(huán)境中的用戶空間應用開發(fā)、調試和分析之中,將傳統(tǒng)JTAG硬件調試融入其中得到一種全新的方法,從而完全改變開發(fā)人員使用JTAG連接進行Linux設備軟件調試的方法,這就是Wind RiverWorkbench。

            Linux設備調試的復雜性

            在嵌入式設備領域,Linux的應用正在迅速增加。根據(jù)技術市場研究機構VDC的報告,在新的設備研發(fā)項目中,有23%會采用Linux。由于開發(fā)工作跨越、Linux內核、內核模塊和應用,調試工作很可能極為復雜。Linux開發(fā)人員必須面對的問題包括為建立目標配置文件,在用戶模式和內核模式之間雙向對硬Linux虛擬地址、映射內核符號信息以及排除遍布于用戶和內核空間之中的差錯。包括內核GNU調試器和GNU調試器在內,在基于代理的調試方案中,要想解決上述任何問題都會遇到極大困難。

            調試

            如果浪費太多的時間在BootLoader的開發(fā)與調試上,將會嚴重影響開發(fā)人員對于系統(tǒng)穩(wěn)定性、設備軟件與應用開發(fā)的精力投入。因此,開發(fā)人員應當借助于先進的工具,盡快逾越這個階段。

            Linux需要依靠BootLoader來啟動操作系統(tǒng)。這段代碼存放在Flash或者其他非易失性存儲器之中,在系統(tǒng)開機或者復位之后立即運行。Boot Loader的調試可能會非常復雜。這段代碼與硬件密切相關,在系統(tǒng)啟動之后開發(fā)人員必須把它從Flash存儲重新定位到RAM之中。在今天的SoC處理器中可能包括了數(shù)百個配置寄存器,都需要在此時進行初始化,這項工作需要熟悉數(shù)千頁的特殊設定文檔。如果設定寄存器錯誤,可能導致隨后Linux內核或者應用調試的異常。并且手工編輯寄存器設定是一項極為繁瑣易錯的工作。

            Boot Loader開發(fā)的另一項常見挑戰(zhàn)出現(xiàn)在Boot Loader把Linux裝入RAM并啟動操作系統(tǒng)的時候?;诖淼恼{試解決方案不支持BootLoader調試,因為在此過程中還沒有開始發(fā)揮作用。因此,開發(fā)人員只能寄希望于JTAG工具。

            JTAG調試解決方案提供了很強的能力來幫助開發(fā)人員快速有效地完成Boot Loader的測試與故障排除工作。它使寄存器設置工作大大簡化,通過設置硬件斷點以及單步執(zhí)行Flash中的代碼,可以快速發(fā)現(xiàn)原代碼中的錯誤。IDE可以支持反匯編,還可以讓你混合查閱源代碼和匯編代碼,符號管理功能比較便于代碼從Flash向RAM的重新定位,使整個調試工作得到很大幫助。

            JTAG調試解決方案不需要通過Boot Loader即可裝載Linux內核。對于那些在Boot Loader尚未完成之前就希望開始系統(tǒng)開發(fā)的項目管理人員來說,這項功能具有特殊的重要意義。提供了引導行能力的JTAG調試解決方案可以支持Boot Loader和操作系統(tǒng)穩(wěn)定化的并行開發(fā),從而加速軟件開發(fā)項目的整體進程。

            Linux內核及內核模塊調試

            Linux內核及內核模塊是Linux操作系統(tǒng)的核心構建。在系統(tǒng)被Boot Loader初始化之后,首先裝載的就是Linux內核。Linux模塊則根據(jù)需要進行裝載。在進行操作系統(tǒng)bring-up時,開發(fā)人員必須專注于Linux操作系統(tǒng)的優(yōu)化或剪裁以及內核模塊的開發(fā),需要必須密切監(jiān)控硬件與軟件之間的互動。Linux內核調試要求具備觀察寄存器、數(shù)據(jù)緩存器及其它底層數(shù)據(jù)。LinuxKGDB要求具備穩(wěn)定的Linux內核,并且確保諸如設備驅動之類的客戶硬件接口處于就緒狀態(tài),其中的代理才能工作?;诖淼恼{試不具備底層硬件的可視化能力,也不能提供完全的診斷功能,因而無法讓開發(fā)者了解硬件與Linux內核之間的互動。

            如果采用代理來調試Linux內核和內核模塊,在進入調試斷點時可能會涉及系統(tǒng)暫?;蛘邇鼋Y方面的問題。例如,KGDB無法暫停CPU(特別是在多核或者多處理器環(huán)境中)來讓開發(fā)人員檢查CPU的現(xiàn)行狀態(tài),它也不能幫助開發(fā)人員對崩潰的系統(tǒng)進行調試,因為崩潰的操作系統(tǒng)顯然已經(jīng)不能再運行代理。而且,KGDB還需要以太網(wǎng)等通信接口實現(xiàn)主機系統(tǒng)與目標之間的溝通。總之,采用代理來實現(xiàn)Linux內核模式調試,需要具備由IP棧、穩(wěn)定的Linux內核和處于運行狀態(tài)的設備驅動。在上述條件尚未具備,或者上述軟件本身還需要調試的時候,基于代理的調試顯然就無能為力。

            為了實現(xiàn)并驗證一個目標系統(tǒng)中的Linux內核,必須擁有可以監(jiān)控和管理Linux內核和內核模塊的全面調試解決方案?;贘TAG的調試解決方案功能特性包括查看局部/全局符號和寄存器以及指令和數(shù)據(jù)緩存器。已經(jīng)有商業(yè)化的JTAG調試解決方案可以把物理內存和虛擬內存順暢地映射過來,從而幫助開發(fā)人員正確地觀察內存地址和內容,也具有對Linux內核模塊進行調試的能力,以及在不必反復連接和切斷目標系統(tǒng)的前提下多次裝載和卸載。

            JTAG調試解決方案的另一個重要能力是把系統(tǒng)完全置于暫停狀態(tài)并且全面觀察操作系統(tǒng)和應用的狀態(tài)。這種能力又被稱為“系統(tǒng)模式調試(system mode debug)”,對于Linux內核和Linux內核模塊的調試是極為有用的。有了系統(tǒng)模式調試能力,開發(fā)人員就可以把整個系統(tǒng)完全暫停下來,包括處理器、操作系統(tǒng)和所有的線程以及中斷處理程序。以這種方式暫停系統(tǒng),就有可能獲得系統(tǒng)硬件和軟件的完整細節(jié)視圖,當然也可以讓系統(tǒng)繼續(xù)執(zhí)行或者分步驟執(zhí)行某些代碼。

            因此,在一些KGDB無法使用的情況下,JTAG解決方案就可大派用場,特別是在Linux內核出錯或者目標崩潰的情況下更是如此。因此JTAG解決方案在提升操作系統(tǒng)和設備驅動穩(wěn)定性方面特別有用。

                 

            Linux應用調試

            Linux應用是在Linux內核控制之下運行的用戶程序,它通過系統(tǒng)調用來訪問系統(tǒng)資源。Linux內核負責處理系統(tǒng)調用并且決定如何來提供硬件和內存訪問。

            對于用戶模式下的應用調試,開發(fā)人員需要通過啟動和停止線程、查看變量和堆棧來直接訪問應用線程。由于一個應用可能由多個進程或者線程組成,所以有可能需要停止與正在調試的應用線程相關的所有線程。開發(fā)人員也常常需要跨越不同的進程和CPU來查看外設寄存器。然而,GDB只能在線程的級別上操作,而且只能啟動和停止單個線程,根本不具備啟動和停止整個系統(tǒng)或者同時啟動/停止多個線程的能力。

            另外,在用戶模式下進行調試的時候,可能會因為單步運行系統(tǒng)調用而從用戶模式進入Linux內核模式,然后又單步執(zhí)行回到用戶模式。在Linux的虛擬內存結構下,在兩種模式之間來回轉換的同時還要保持內存地址跟蹤,僅僅依賴于物理地址將會效果有限。于是,基于代理的解決方案需要同時采用GDB和KGDB來跟蹤系統(tǒng)調用進入Linux內核和內核模塊。同時,這個過程將會非常復雜。

            Linux應用開發(fā)人員也常常遇到?jīng)]有配備以太網(wǎng)或者串行通信接口的設備開發(fā)項目。即便是配有這些通信接口,相應的軟件也不一定能很快就開發(fā)完成。而基于代理的調試方法必須依賴這些通信接口才能工作。如果目標設備沒有通信接口,或者這些通信接口本身還需要開發(fā)與調試,或者內存對于IP?;虼碥浖豢捎?,在這些情況下,基于代理的方法也不能使用。

            基于JTAG的調試方法對于運行在Linux用戶模式下的應用則具有深度可視化能力。對于提出系統(tǒng)調用的應用,雙模式的JTAG調試解決方案還將可視化的深度延伸到Linux內核,所有的應用線程、運行環(huán)境以及在線程變量中用到的參數(shù)都一覽無遺,而且這些功能的實現(xiàn)不會對Linux內核本身造成任何影響。對于沒有通信接口的目標設備,例如移動電話、醫(yī)療設備、車載設備等,基于JTAG的調試解決方案都顯示出遠高于基于代理調試的優(yōu)越性。一個Linux的軟件與硬件連接如圖1所示。

            采用系統(tǒng)模式調試可以讓多線程應用調試大大簡化,這是因為開發(fā)人員獲得了暫停處理器并觀察操作系統(tǒng)和全部線程運行狀態(tài)的能力。如前所述,許多問題的發(fā)生是因為多個線程之間的交互。而基于代理的調試根本不具備停止全部線程的能力,自然也就難以發(fā)現(xiàn)問題所在,這就意味著工程進度將會因為調試工作的低效率而被大大延遲。

            基于JTAG的調試解決方案與目標硬件的連接是非干擾性的,可以連接到一個已經(jīng)運行并且發(fā)生錯誤的目標系統(tǒng)之中,也可以不改變處理器寄存器的狀態(tài),即可觀察到Linux內核和應用的運行狀況并進行調試。例如,如果一個Linux的目標設備進入死鎖狀態(tài),利用JTAG調試工具,開發(fā)人員就可以在不會破壞現(xiàn)場狀態(tài)的前提下與目標系統(tǒng)連接,進而觀察其中的Linux內核對象、應用運行情況,找到引發(fā)錯誤的線程、系統(tǒng)調用以及調用參數(shù)。在有些情況下,基于代理的調試工具根本無法使用,而基于JTAG的調試工具卻可以簡化調試工作,加快調試進度。

            Wind River基于JTAG的Linux調試工具

            Wind Rivet推出的基于JTAG的OCD((On-Chip Debugging,片上調試)解決方案運行在符合工業(yè)標準的Eclipse平臺上,為嵌入式Linux設備提供了先進的基于JTAG的調試功能特性。

            Workbench OCD主要支持Wind River Linux。不過,對于開發(fā)者自行獲得的Linux或者半導體廠商提供的Linux版本,Wind River也可提供片上調試功能,也為kernel.org Linux提供基于JTAG的內核及用戶模式調試。Wind River調試解決方案還支持廣泛的目標硬件,包括先進的多核處理器。它還支持移動終端設備市場上所有最新的主流處理器,實現(xiàn)各種量身定制的增強功能特性,使設備軟件和硬件的開發(fā)調試變得更加簡單、更加直觀。

            Workbench實現(xiàn)了與Eclipse全整合,并且通過在Workbench基于Eclipse的環(huán)境中加入新的視圖和功能模塊,進一步加強了IDE的支持。

            目前,大多數(shù)移動終端設備都采用了多處理內核,對很多片上調試解決方案都造成很大的挑戰(zhàn)。JTAG Server和JTAG Accelerator技術提供了面向多內核處理器的高速JTAG調試能力。JTAG Accelerator技術支持當前最復雜的32位和64位處理器,實現(xiàn)了JTAG帶寬利用率的最大化。JTAG Servet技術則使開發(fā)人員能夠同時連接多達128個處理器,并且在單個IDE實例中動態(tài)地調試多個處理器。

            這樣,Linux開發(fā)人員可以靈活地采用JTAG連接來進行硬件bring-up、Linux內核、中間件和用戶模式應用的調試,并且在適當?shù)臅r候轉移到基于代理的調試方式之下,而且不論是JTAG或是代理模式都在同一個IDE架構之中,這種功能可以顯著改善多個開發(fā)團隊之間的協(xié)同效率,節(jié)省排除差錯的時間。

            結語

            由于嵌入式系統(tǒng)已經(jīng)變得越來越復雜,軟件開發(fā)人員在調試工作上所面臨的挑戰(zhàn)也越來越多。傳統(tǒng)基于代理的Linux調試解決方案在用戶模式和內核模式的調試上的有效性都面臨尷尬?;贘TAG的調試可以在Linux開發(fā)中扮演極有價值的角色,當它與Eclipse之類的標準化開發(fā)環(huán)境相結合,就可以顯著改善編輯-編譯-調試過程。在產品上市速度已經(jīng)成為關鍵因素的今天,擁有高效率的Wind RiverWorkbench調試工具無疑是明智的選擇。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          關鍵詞: JTAG OCD Linux Boot Loader

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();