ubuntu環境下搭建kgdb除錯環境

2021-06-20 21:18:05 字數 3156 閱讀 3888

概要:使用kgdb除錯核心需要兩台機器,為方便敘述,我們稱乙個為target,乙個為develop。kgdb的除錯過程是在target端使用魔法鍵讓本機處於假死狀態,然後develop端通過串列埠連到target端,進行除錯。我們可以編譯好develop,然後使用vmware的clone功能clone乙個虛擬機器作為target。

(一)使用環境

虛擬機器 workstation 10.0

(二)編譯核心

3、配置核心。linux-3.13.6的預設配置包含了除錯核心的大多數選項,僅需要去掉乙個選項(writeprotect kernel read-only data structures),該選項設定了某些記憶體區域為唯讀,需要去掉,否則可能無法設定斷點。

配置核心命令:make menuconfig 。這裡可能會遇到乙個錯誤,說某個庫,然後建議你install乙個庫,然後try again。我想在ubuntu下編過核心的朋友都遇到過這個問題。此時就公升級該庫。

公升級庫的命令:sudo apt-get insatll ncurses-dev

需要去掉一項:writeprotect kernel read-only data structures(選住該項,然後敲n)

4、儲存退出編譯核心

按住tab鍵,選中exit,儲存退出

5、製作核心映象

這裡可以選擇的方法不止一種,我所使用的方法可能是比較笨的。順序如下

make //編譯核心原始碼,這個過程會很長

make_modules //編譯核心模組

make_moduesl install //安裝模組

make install //安裝核心

6、修改核心的啟動引數。

在修改grub.cfg的修改曾閱讀過很多資料,但在grub.cfg這一步都做得稍顯羅嗦,筆者暫未領會其意圖。

編輯 /boot/grup/grub.cfg

注意游標所在那一行。在後面新增一句 kgdboc=1,9600。改完的結果圖所示。

kgdboc=1,9600的意思是 kgdb over console。console使用ttys1,波特率為9600。如果次是你要除錯開機過程的話,可以加上kgdbwait選項。

至此我們編譯核心部分的工作就完成了。接下來要做的就是clone乙個虛擬機器,然後將它們之間用vmware提供的虛擬串列埠連線起來。這裡我想如果是實機的話,可能就需要用串列埠線將兩台機器連線起來。

(三)clone虛擬機器

(1)、關閉虛擬機器,並製作乙個clone。

關閉虛擬機器後,選擇虛擬機器-->管理-->clone-->下一步-->虛擬機器的當前狀態-->建立完整的clone

(2)、設定develop和target的串列埠

待clone完成以後,分別設定兩台虛擬機器的串列埠

target端:編輯此虛擬機器設定-->硬體-->新增-->串列埠-->下一步-->輸出到命令管道-->該端是客戶端(在下拉框中心選擇)-->完成

(3)、啟動虛擬機器檢查串列埠是否設定成功。

這裡要非常注意的一點是,在ubuntu下ttys0被占用了,我們要使用ttys1。這一點和suse並不相同。筆者曾在suse下成功搭建kgdb環境,後來在ubuntu下搭建卡殼卡了很久,就在於此。另外還有一點需要注意的是,在suse下使用的串列埠通訊的波特率是115200,但在ubuntu下使用的串列埠的波特率是9600。

在devlop端執行 cat  /dev/ttys1 

在target 端執行 echo aa > /dev/ttys1

如果在develop端看到aa,說明串列埠通了。當然為確保萬無一失,在target端執行cat命令,在develop端執行echo 命令再次是一次。在兩端都執行成功才能使kgdb。

ok!如果串列埠已經除錯成功,那麼我們就可以進行除錯了

(四)測試gdb除錯環境是否搭建成功

1、在target端執行echo g > /proc/sysrq

然後target進入假死狀態,就是敲任何鍵都無反應。如果target沒有進入假死狀態,則需要檢查核心啟動引數是否設定正確。

2、在develop端執行gdb vmlinux (vmlinux,是我們剛剛編譯核心生成的,位於/usr/src/linux-kgdb/linux-3.13.6目錄下)

3、gdb啟動後,執行下列命令

set remotebaud 9600

target remote /dev/ttys1

如果次是你看到下面的列印結果的話,說明gdb環境已經搭建成功,那就給自己倒一杯咖啡慶祝下吧!

(五)後記

1、本文中所有命令均使用root許可權執行

2、搭建kgdb最初的需求是為了看核心**,而非除錯使用。筆者經常使用gdb來除錯使用者態程式,閱讀**等。因此想閱讀核心**的時候,自然想到了搭建kgdb除錯環境。

3、曾在csdn上兩篇文章使用kgdb + qemu來除錯。筆者按照其方法來實驗,但未成功,以內cpu不支援虛擬化。但筆者的cpu實際是支援虛擬化的。後來某高人告知,因為我使用的虛擬機器,虛擬機器已經使用了cpu的虛擬化功能,而其寫文章的作者可能使用的實際的機器,所以還可以使用其cpu的虛擬化功能

4、在網上看到一些資料說搭建kgdb環境要修改makefile,將**優化級別調低,否則可能無法設定斷點。筆者暫未遇到此問題,但希望大家注意。如果筆者在使用過程中遇到此問題,第一時間上來更新。如有朋友遇到過這個問題也請告知我。

5、筆者在搭建kgdb環境過程中網上找到了很多資料,在此真誠感謝每一位作者。

ubuntu下搭建wordpress環境

ubuntu確實很好玩。有喜歡的命令列,簡潔的介面,不同於window要的感覺。偶爾換換環境工作,學習linux的思維方式,是一種不錯的做法。之前也折騰過ubuntu,不過,因為網路的問題,一直沒有深度去用。這次,網路方便了,並且,想在linux下學習某些開發 主要還是和 打交道 ubuntu當然是...

ubuntu 下搭建 LAMP環境

sudo apt get install apache2 sudo apt get install php5 sudo apt get install libapache2 mod php5 sudo etc init.d apache2 restart sudo apt get install m...

ubuntu下搭建NDK環境

2.配置ndk的環境變數 執行 gedit bashrc 在開啟的檔案末尾新增如下內容 ndk home zhangz develop android ndk r8b export ndk 3.在當前 bash 環境下讀取並執行 bashrc 中的命令 source bashrc 或 source命...