在VIM中實現對嵌入式軟體的調試

2021-01-10 電子產品世界

引 言
GNU免費提供了一整套工具鏈,為嵌入式Linux程序的開發和調試提供了完整的支持。其強大的gdb調試工具可以方便地對嵌入式平臺上的程序進行跟蹤調試;而Linux下強悍的VIM編輯器,不僅可以方便地調用make文件對代碼進行編譯,而且通過腳本的配置還可輕鬆地成為高效的代碼編輯環境。流傳著這樣一種說法,「世界上的程式設計師分三種,一種使用Emacs,一種使用VIM,剩餘的是其他。」不去辯論這句話的對與錯,單純從字面意義上來理解,也足見VIM的魅力了。因此,在VIM中實現對嵌入式軟體的調試,我們便得到了一個高效、穩定的嵌入式Linux的開發環境。

1 gdb對嵌入式軟體的調試模式
許多非Linux的嵌入式系統已經在使用gdb與gdbstub對目標板進行遠程「交叉調試」;然而,因為Linux內核實現了ptrace()系統調用,所以在對嵌入式應用程式進行調試的時候並不需要gdb stub,而採用gdb套件提供的gdb伺服器來對目標板上的嵌入式應用程式進行調試。
目標板上的gdb服務端gdbserver與主機上的gdb調試器的通信方式主要有兩種:使用串口通信的「交叉串行連接」和使用網口的「TCP/IP」聯機。鑑於PC端的方便性以及串口資源有限,尤其是現在的筆記本電腦甚至已經不存在串口,所以,大多採用TCP/IP方式,即PC主機與目標板通過網線直連或者PC機與目標板通過路由或者hub等組成區域網通信。這種調試模式如圖1所示。

本文引用地址:http://www.eepw.com.cn/article/152387.htm

2 在VIM中實現對嵌入式軟體的調試
我們知道,gdb的功能雖然強大,但由於其基於命令行的操作,所以調試過程不直觀,而且Windows下的調試環境集調試與代碼編輯為一體,當出現bug的時候,可以方便地對原始碼進行修改,相比而言,gdb在這方面又有失色。既然VIM和gdb的功能如此強大,又完全免費,而且完全適合嵌入式這種特殊的開發模式,那麼有沒有將二者強強聯合的方法呢?有,那就是vimgdb。
vimgdb是給VIM提供一個可選特性的補丁。它可以在VIM編輯器裡提供完整的gdb調試器支持,比如設置斷點、查看變量值、gdb命令補全等等,並且這些操作可以在VIM中直觀地顯示出來。下面闡述在VIM中實現時嵌入式軟體調試的具體過程。
2.1 系統環境及所用軟體包版本
PC作業系統:Ubuntu8.10。
PC編譯器:GNU gcc4.3.1。
PC調試器:GNU gdb6.8。
目標板Linux內核:2.6.13。
目標板CPU:S3C2440(ARM9架構)。
交叉編譯器:arm―linux―gcc3.4.1。
交叉調試器:自編譯GNU gdb6.8。
目標板gdb服務端:自編譯GNU gdbserver6.8。
跨平臺開發工具路徑:~/build-tools/arm―linux,且已經設置好系統路徑變量。
測試代碼及程序路徑:~/test,包含程序代碼test.c及Makefile。
所用軟體包存放路徑:~/down。
所用軟體包:VIM編輯器源碼vim一7.1.tar.bz2、vimgdb71-1.13.tar.gz、GNU gdb源碼gdb-6.8.tar.bz2。
2.2 對VIM源碼打vimgdb補丁並編譯安裝
①運行下面的命令,解壓VIM源碼及vimgdb補丁文件,並對VIM源碼打補丁:


執行完上述操作後,VIM將會被安裝在/usr/local路徑下。如果想修改安裝路徑,可在上述的編澤安裝前,打開~/down/vim71/src/Makefile文件的862行安裝路徑選項並修改。如將VIM安裝在/usr路徑下,則將862#prefix=$(HOME)修改為862 prefix=/usr。
③安裝vimgdb的runtime文件,運行下面的命令:
ca~/down/vimgdb
tar zxfv vimgdb_runtime.tgz―C/usr/share/vim/vimfiles
2.3 建立交叉調試嵌入式軟體的gdb組件
①編譯嵌入式gdh調試器服務端gdbserver,運行如下的命令:


將當前目錄下的gdbserver拷貝到目標板文件系統的/bin目錄下,以備交叉調試用。
②編譯安裝交叉調試器gdb,運行如下命令:


注意,這裡的prefix的值必須填寫絕對路徑,而不能用「~」來替代用戶路徑/home/popeye,否則會提示prefix路徑賦值錯誤。然後運行:
make
這個過程中,可能會出現圖2所示的錯誤。
出現這種情況的原因是,編譯規則中選擇了警告選項「-Werror」。它會將所有的警告轉變為錯誤,而且出現的有關「getwd」函數的提示信息表明,這裡編譯器檢測到的應該是一個「警告」,而不是真正的語法錯誤。所以,需改正編譯選項:
cd~/down/gdb一6.8/gdb
gedit Makefile
注意,此處的MaKefile是在執行完上述的make命令後才產生的,在最初的代碼包裡不含有這個文件。對文什的145行進行修改,去掉WERROR_CFLAGS的賦值,即


2.4 在VIM中實現對嵌入式軟體調試前的準備
在嵌入式軟體開發過程中的習慣做法是:首先,在PC機上編譯調試程序,如果在PC機上運行正常,再進行交叉編澤。然後,將軟體移植到目標板上,如果在目標板上出現bug,再用交叉調試器arm―linux―gdb進行調試。
簡而佔之,對嵌入式軟體的調試過程包含兩個部分:PC機上調試部分和嵌入式平臺上的凋試部分。在這個過程中,可能既用到PC機上的調試器gdb,又用到交叉調試器arm―linux―gdb,而對應的是同一個原始碼程序和運行在不同平臺上的兩個可執行程序。同時涉及兩個調試器轉換的問題,但vimgdb只能對寧符串為「gdb」的系統命令進行調用。下面,將這個比較困難的問題簡單化:
①編輯適用的Makefile,控制生成對應不同平臺的可執行程序:
cd~/test
其中,test.c為實驗代碼,Makefile為編譯規則,我們簡單編寫Makefile的內容為:


當執行「make test―pc」命令時,就會生成可運行在PC機上的可執行程序;執行「make test一em」則生成可運行在嵌入式目標板上的可執行程序。
②修改vimgdb的快捷鍵映射腳本,在VIM中實現PC調試器與交叉調試器的輕鬆切換。
首先,針對vimgdb只能對字符串為「gdb」的系統命令進行調用,做如下的工作:

其次,編輯文件/etc/vim/macros/gdb_mappings.vim。主要修改和添加的部分為:

linux作業系統文章專題:linux作業系統詳解(linux不再難懂)

相關焦點

  • VIM編輯器學習
    Vim是一個類似於Vi的文本編輯器,不過在Vi的基礎上增加了很多新的特性,Vim普遍被推崇為類Vi編輯器中最好的一個,事實上真正的勁敵來自Emacs的不同變體。 第一關是理解vim的設計思路,vim設計之初就是整個文本編輯都用鍵盤而非滑鼠來完成,鍵盤上幾乎每個鍵都有固定的用法,且vim的製作者希望用戶在普通模式(也就是命令模式,只可輸入命令)完成大部分的編輯工作,將此模式設計為默認模式,初學者打開vim,如果直接輸入單詞,結果就會滴滴亂響,這是因為vim把用戶輸入的單詞理解為命令了。
  • 嵌入式Linux的GDB調試環境建立
    嵌入式Linux的GDB調試環境由Host和Target兩部分組成,Host端使用arm-linux-gdb,Target Board端使用gdbserver。
  • 泰克新入門級示波器系列方便嵌入式系統調試
    打開APP 泰克新入門級示波器系列方便嵌入式系統調試 灰色天空 發表於 2012-10-17 16:15:48   中國 北京,2012年10月17日 –全球示波器市場的領導廠商---泰克公司日前宣布,推出價格具有吸引力的MSO/DPO2000B系列示波器,方便工程師和教育工作者使用先進的調試功能。
  • vim命令使用總結
    vim簡介vim 是linux系統自帶的文本編輯器。2.2.2 vim查找默認是大小寫敏感查找在查找模式中加入\c表示大小寫不敏感查找,\C表示大小寫敏感查找例如:/foo\c 會查找所有foo、FOO、fOOD等2.2.3 查找光標所在單詞在命令模式下按下:*:匹配當前光標所在的單詞(這裡的單詞是指前後為空白字符或者點號,例如當前為foo, 可以匹配foo bar中的
  • 嵌入式WEB伺服器中TCP/IP協議棧的設計與實現
    由於Web技術的開放性和獨立平臺特性,大大降低了軟體系統和通信系統的設計、維護工作量,節省了人員培訓費用,提高了現場測試和控制設備的管理水平。而嵌入式Web伺服器將Web伺服器引入到現場測試和控制設備中,在相應的硬體平臺和軟體系統的支持下,使傳統的測試和控制設備轉變為具備了以TCP/IP為底層通信協議,Web技術為核心的基於網際網路的網絡測試和控制設備,有著一般Web伺服器所不具有優勢。
  • 程式設計師及嵌入式的一些學習建議
    ---嵌入式時代已經來臨,你還在等什麼?---循序漸進學習嵌入式開發技術(南京凌嵌電子科技)最近經常有用人單位給我打來電話,問我這有沒有嵌入式Linux方面的開發人員,他們說他們單位急需要懂得在嵌入式linux環境下的軟體開發人員,我回答說,現在每年畢業的大學生那麼多,還招不到合適的軟體開發人員嗎?
  • 嵌入式整流模塊控制器設計
    關鍵詞:AVR單片機;μC/OS-II;嵌入式控制器引言  雖然目前通信電源產品中嵌入式控制系統的研發技術比較成熟,但是同一系列(如DUM系列)不同功率型號的產品具有不同的性能參數,以致控制系統採用不同的控制方法;同時,在以往的產品研發過程中,不同的嵌入式系統工程師具有不同的軟硬體設計思想,帶來了晶片應用、電路體系、軟體結構的差異
  • 談GJB5000A二級在中小型嵌入式軟體研發中的應用
    摘要:結合軟體項目在GJB5000A二級的實踐過程,針對過程中發現的問題和失誤,分析了中小型嵌入式軟體這次實踐有效地提高了軟體研製的工程化水平,但是同時也發現了許多問題和和失誤。通過管理人員和技術人員的分析和總結,得出結論:GJB5000A二級的應用需要關注的兩方面工作重點,一是建立適應於中小型嵌入式軟體的高效的項目管理體系,二是利用軟體測試技術提高軟體的可靠性,保證軟體的質量。
  • 向日葵實現H5微信控制電腦新技術 為嵌入式開發提供新道路
    了解更多:http://sunlogin.oray.com/有網友討論,這個功能的意義在於,嵌入式開發廠商可能只需簡單嵌入幾段代碼
  • 嵌入式系統USB接口的虛擬示波器設計
    2 嵌入式軟體設計 嵌入式軟體設計採用模塊化的程序設計思想,主要由4個部分組成,即A/D轉換子程序、數據採集及存儲子程序、USB通信子程序,以及D/A轉換子程序,並由嵌入式處理器進行統一調配。這裡主要介紹數據採集和USB通信子程序。 該虛擬示波器中使用了2種傳輸方式:控制傳輸和數據報告。
  • 嵌入式智能化傳感器的設計
    摘 要: 給出了智能化傳感器嵌入式控制器的開發環境、典型嵌入式微控制器硬體結構和軟體結構及設計方法,同時對智能化傳感器的信號處理方法作了簡單介紹,最後提供了一些目前廣泛應用的嵌入式微控制器晶片。
  • 一種嵌入式Web伺服器的設計方案
    本文主要介紹了嵌入式Web伺服器設計方案,以及實現和主要應用。1.引言嵌入式Web伺服器(Embedded Web Server,EWS)是指將Web伺服器嵌入到現場測試和控制設備中,在相應的硬體平臺和軟體系統的支持下,使傳統的測試和控制設備轉變為具備了以TCP/IP為底層通信協議,Web技術為核心的基於網際網路的網絡測試和控制設備。
  • 基於嵌入式Linux的語音識別系統硬軟體設計
    在嵌入式Linux作業系統下,運用多進程機制完成了對語音識別晶片、超聲波測距和雲臺的控制,並將語音識別技術應用於多角度超聲波測距系統中。通過測試,系統可以通過識別語音指令控制測量方向,無需手動幹預,最後將測量結果通過語音播放出來。
  • 嵌入式Win CE中CAN總線控制器的驅動設計與實現
    嵌入式Win CE中CAN總線控制器的驅動設計與實現 秩名 發表於 2012-05-17 10:18:10   0 引 言   近年來,由於消費電子、
  • 基於Yocto Project的嵌入式應用設計
    本設計主要基於Yocto Project在嵌入式設備上輕鬆定製嵌入式Linux應用,並實現Yocto Project的定製過程。Yocto Project的優點如下:具有高質量的構建系統,平等地支持所有主流的嵌入式架構(ARM、Power PC、MIPS、x86(32&64位)),緊密跟蹤許多上遊開源項目的最新發布版本,具有統一的Linux BSP格式和應用程式開發套件,還可輕鬆地實現從原型切換到商用嵌入式Linux產品。
  • C++在嵌入式應用中的安全問題
    嵌入式系統的軟體設計中,「彙編語言+C語言」早已成為理所當然的經典組合。的確,對於硬體配置來說,彙編語言清晰明了;對於上層設計來說,C語言緊湊高效。這樣的搭配能夠滿足大多數傳統嵌入式系統應用的需要。  統計數據表明,日常生活中一個美國人平均佔用8個微控制器,這些都離不開嵌入式系統的應用。然而嵌入式系統軟體技術似乎落後於當前的軟體發展形勢,近年來才逐漸由彙編語言過渡到面向過程的C語言。但對於面向對象語言的應用還很有限。
  • 嵌入式Web伺服器GoAhead在電力系統通信中應用
    簡單介紹GoAhead嵌入式Web伺服器的基本特點,接著講解了嵌入式Web配置管理功能在電力系統通信中應用的工作原理及設計方法。以工業乙太網交換機為實例,介紹了軟體系統功能,並詳細討論了軟體系統工作流程。
  • 盤點嵌入式開發工具,或許能用上!
    嵌入式開發就是指在嵌入式作業系統下進行開發,一般常用的系統有μcos,vxworks,linux,android等。當然,對於嵌入式或單片機工程師的利器就是C語言、C++或彙編語言。那麼有哪些好工具可以讓工作事半功倍呢?
  • ROS軟體平臺對服務機器人的運算與控制
    以後服務機器人的趨勢會是以上列舉的這些機器人的集大成者,即在軟體智能和機械運動上不斷發展。軟體智能方面通過高性能的嵌入式處理器實現視頻處理、網絡連接和語音識別等技術。機械運動方面先搭配單片機和步進電機通過輪子的滾動實現移動,通過機械零件的增加和算法的改進,逐漸實現動物甚至人體的肢體行走。
  • 開發者的實用 Vim 插件(一) - OSCHINA - 中文開源技術交流社區
    除了是一個多功能編輯器外,世界各地的軟體開發者將 Vim 當做 IDE(集成開發環境Integrated Development Environment)來使用。事實上,因為 Vim 可以通過插件來擴展其自身功能才使得它如此功能強大。不用說,肯定有那麼幾個 Vim 插件是旨在提高用戶的編程體驗的。