1. 程式人生 > >Linux核心除錯環境搭建(基於ubuntu12.04)

Linux核心除錯環境搭建(基於ubuntu12.04)

by Netfairy - 2016-05-29

一、測試環境

物理機:ubuntu16.04 LTS

target(被除錯機)環境:VirtualBox 5.0.20+ubuntu 12.04 LTS + linux kernel 3.0.4

host(除錯機)環境: VirtualBox 5.0.20+ubuntu 12.04 LTS + gdb 

二、搭建虛擬機器環境

安裝VirtualBox 然後

新建一個標準的虛擬機器映象就OK!然後載入ISO一步一步安裝就行!(磁碟大小最好稍微大點,大約40G已經相當夠用了) 我安裝的是ubuntu 12.04 上述已經說明環境!下同

安裝完畢後點擊設定 如圖進行串列埠設定

1.png

說明:這裡的com1 即是 系統裡面的/dev/ttyS0,然後啟動系統。

三、編譯以及安裝核心

到核心官網下載你自己需要除錯的核心版本!(https://www.kernel.org/pub/linux/kernel/)

這裡我下的是3.0.4,解壓到/opt目錄下,然後轉到linux-3.0.4目錄,複製現有核心的config 到 當前目錄為 .config

[email protected]:/opt/linux-3.0.4# cp /boot/config-3.2.0-29-generic-pae  .config

執行

make menuconfig

注意這裡可能會出現 

*** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[1]: *** [scripts/kconfig/dochecklxdialog] 錯誤 1
make: *** [menuconfig] 錯誤 2

那麼就需要執行下面一條命令

sudo apt-get install libncurses5-dev 

然後開始配置核心

[email protected]:/opt/linux-3.0.4# make menuconfig

(下面配置為必須進行的)

位置:    

General setup--->
           -> Prompt for development and/or incomplete code/drivers     
Kernel hacking--->  
           -*- Magic SysRq key   //預設選上了
           [*] Kernel debugging  //預設選上了
           [*] Compile the kernel with debug info     //預設選上了
           [*] KGDB: kernel debugging with remote gdb --->     //預設選上了
                  <*> KGDB: use kgdb over the serial console     //預設選上了
                  [*]KGDB:allow debugging with traps in notifiers    //預設選上了,別選別的
            [] Write protect kernel read-only data struct ures

四、 編譯核心

執行 

make -j4 

執行 

make modules_install

執行 

make install 

編譯安裝已經完畢 

五、 修改grub

 將下面內容修改,下面兩個圖盜別人的 番外_使用KGDB除錯核心 (_除錯真的很重要) - KeVen.w - Study Hard And Make

修改後為

番外_使用KGDB除錯核心 (_除錯真的很重要) - KeVen.w - Study Hard And Make 其實就是刪除第131 行 和 155 行

然後在

 linux /boot/vmlinuz-2.6.32.61 root=UUID=f8c18f80-7723-470b-98a852566006 ro

後面 和 

quiet

前面加以下內容

kgdb=ttyS0,115200 kgdboc=ttyS0,115200  kgdbwait

然後儲存退出即可!重啟電腦,克隆一臺一模一樣的虛擬機器作為host機,修改串列埠如下

然後啟動target機器,如圖,選擇

3.png

選擇要除錯的核心,出現下面這樣子表明成功(如果不出現的話重啟試試)

4.png

然後啟動host機器,選擇原來的核心,正常登入系統

5.png

切換到要除錯的核心目錄

[email protected]:/home/netfairy# cd /opt/linux-3.0.4/

然後

[email protected]:/opt/linux-3.0.4# gdb vmlinux
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2) 7.4-2012.04
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
For bug reporting instructions, please see:
<http://bugs.launchpad.net/gdb-linaro/>...
Reading symbols from /opt/linux-3.0.4/vmlinux...done.

接著

set remotebaud 115200

最後

(gdb) target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
kgdb_breakpoint () at kernel/debug/debug_core.c:960
960	wmb(); /* Sync point after breakpoint */

然後continue就可以讓target跑起來了

如果需要斷下來,在被除錯機的終端執行

echo g > /proc/sysrq-trigger

7.png


六、下面是我遇到的一些問題和解決辦法:

問題一:

gcc: error: elf_i386: No such file or directory
OBJCOPY arch/x86/vdso/vdso32-int80.so
objcopy: 'arch/x86/vdso/vdso32-int80.so.dbg': No such file
make[2]: *** [arch/x86/vdso/vdso32-int80.so] Error 1
make[1]: *** [arch/x86/vdso] Error 2
make: *** [arch/x86] Error 2
解決:

In arch/x86/vdso/Makefile :
replace "-m elf_x86_64" by "-m64" on the line starting with VDSO_LDFLAGS_vdso.lds
replace "-m elf_i386" by "-m32" on the line starting with VDSO_LDFLAGS_vdso32.lds

問題二:

In file included from drivers/net/igbvf/ethtool.c:36:0:
drivers/net/igbvf/igbvf.h: 在檔案作用域:
drivers/net/igbvf/igbvf.h:128:15: 錯誤: 重複的成員‘page’
make[4]: *** [drivers/net/igbvf/ethtool.o] 錯誤 1
make[3]: *** [drivers/net/igbvf] 錯誤 2
make[2]: *** [drivers/net] 錯誤 2
make[1]: *** [drivers] 錯誤 2
make[1]:正在離開目錄 `/usr/src/linux-2.6.32.2'
make: *** [debian/stamp/build/kernel] 錯誤 2
解決:

開啟igbvf.h:,看128行,程式碼為:struct page *page;再往上看,第123行,也有struct page *page這行程式碼,這個結構定義在內部的一個結構體中。就是他的名字與128行的重複了,而4.6.3的編譯器對不支援這種方式的定義,我們修改128行的程式碼為struct page *pagep;儲存退出;

問題三:VirtualBox裡Ubuntu的共享資料夾無法訪問 之問題:You do not have the permissions necessary to view the contents of ‘shared_folder’

解決:sudo usermod -a -G vboxsf netfairy

問題四:

安裝好新核心,但是開機直接進入系統,無核心選擇選單

解決:

編輯 /boot/grub/grub.cfg
找到 timeout 【注:第二個地方的那幾個timeout】數字改為10,儲存。


相關推薦

Linux核心除錯環境搭建(基於ubuntu12.04)

by Netfairy - 2016-05-29 一、測試環境 物理機:ubuntu16.04 LTS target(被除錯機)環境:VirtualBox 5.0.20+ubuntu 12.04 LTS + linux kernel 3.0.4 host

linux核心除錯環境搭建

版本linux4.17 ubuntu18.04先給系統至少80G記憶體1。編譯核心先配置檔案make mrpropermake menuconfig我這裡需要的依賴有 sudo apt install make cmake gcc g++ clang sudo apt-get install libnc

linux核心除錯環境搭建-2 用busybox搭建

下載linux核心: $cd ~/work/ $wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.9.tar.bz2 解壓 $tar -jxvf linux-2.6.35.9.tar.bz2

linux ffmpeg開發環境搭建(基於ubuntu14.04和ffmpeg3.2)

本文將介紹ffmpeg開發環境的安裝測試和更新的步驟(基於ubuntu14.04和ffmpeg3.2) 1.安裝x264 1)libx264需要yasm,所以先安裝yasm sudo apt-get install yasm 2)安裝libx264-d

linux核心除錯環境搭建-3 除錯核心模組

在虛擬機器中 建立兩個指令碼get.sh: tftp 192.168.100.1 -g -r $1 put.sh: tftp 192.168.100.1 -p -l $1 在linux裝置驅動開發詳解中原始碼: /*=========================

linux核心除錯環境搭建-

kvm系統的前端是qemu-kvm,工作在使用者空間,給使用者提供一套方便的kvm虛擬化工具集合。下面來介紹一下qemu-kvm-0.11.0的編譯過程。 1、下載 wget http://sourceforge.net/projects/kvm/files/qemu-kvm/0.11.0/qem

linux-2-6-11核心除錯環境搭建

linux核心除錯環境分為兩部分 1)用bochs除錯彙編 2)用qemu除錯從start_kernel開始的部分 環境說明: 核心版本: 2.6.11 ubuntu: 6.10 qemu: qemu-stable-0.13 busybox: 1.10.4 安裝ubuntu

linux核心除錯環境構想

雖然現在64位作業系統越來越流行,但是為了研究方便,我們還是選取32位核心研究。 而linux作業系統就多種,比較流行的有centos ubuntu等,這裡選用centos6.5-i386系統。 安裝系統時配置為軟體開發站,方便核心編譯。檔案系統部分可以不使用LVM。 而

linux核心完全解讀(基於0.11核心)》--環境搭建

最近開始閱讀《linux核心完全解讀(基於0.11核心)》,首先是要搭建linux 0.11核心的編譯除錯環境,可以參考下面的文章: http://www.tinylab.org/take-5-minutes-to-build-linux-0-11-experiment-e

ubuntu18.04搭建qemu核心除錯環境(待續)

目錄: 獲取環境 Ubuntu中安裝相關環境: apt-get install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential 獲取kernel原始碼和busybox

讀書筆記《Linux核心完全剖析:基於0.12核心》——第三章 核心程式語言和環境

3.1 as86彙編器 linux 0.1x系統中使用了兩種彙編器(Assembler)。一種是能產生16位程式碼的as86彙編器,配套ld86連結器;另一種是GNU的彙編器gas(as),使用GNU ld連結器。 編譯器和連結器的原始碼可以從FTP伺服器ftp

Linux下的 ARM裸機除錯環境搭建(GDB + JLink)

說明:我也是除錯u-boot,在win下OK了,基於這裡,然後為了完全在linux下便有了下邊轉載的內容。下文會對照我自己的操作進行結果補充!感覺補充的多於轉載的就改為原創了,讓更多人看到!     一直想擺脫windows環境,在純linux下進行arm裸機開發,

(轉載)純Linux下的 ARM裸機除錯環境搭建(GDB + JLink)

一直想擺脫windows環境,在純linux下進行arm裸機開發,但是由於一直不知道JLink如何在linux下執行和配置,一直無法進行下去。以前都是windows+AXD除錯。包括本人用的FL2440開發板和JLink偵錯程式也沒有提供在linux除錯的文件。前些天由於想

[NUST-Wangpeis]基於i.MX287學習Linux[1]---基本環境搭建及裝置資訊

如有錯誤,歡迎批評指正!!! 一、本教程基於周立功EasyARM-i.MX287開發套件 詳詢周立功網站,www.zlgmcu.com 二、系統恢復及相關設定 根據周立功產品使用說明恢復系統,設定系統IP地址為192.168.0.160,掛載到192.168.0.190

基於0.12核心實驗環境搭建方法

1.前提條件:下載Bochs,我的版本為2.3.7在 http://pan.baidu.com/s/1jGqXm0A 下載linux-0.12-080324.zip在 http://pan.baidu.com/s/1o6DPHaU 下載linux-0.00-050613【B

基於Linux安裝Apache環境搭建過程及報錯解決方案

⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄決定寫一篇完整的了!! 一、需要準備的安裝包: 二、上傳到Linux系統裡,tar -zxvf 解壓,再分別進入三個資料夾編譯 首先把三個壓縮包都傳入/usr/lo

windows下的基於Eclipse的STM32開發除錯環境搭建

這段時間在玩STM32,但官方庫的程式碼也確實是有點多,記憶力有點不太好了。突然就想起了以前用Eclipse的那個程式碼提示功能,谷歌了一段時間, (一)安裝編譯環境 1.下載和安裝JAVA虛擬機器 因為Eclipse是基於Java的,所以Linux下也可

Linux】LAMP環境搭建(簡易版)

freetype 軟件 系統 解壓縮 net done .gz 輔助 one 一. 輔助軟件包安裝 準備工作:1.Linux系統準備 恢復快照(初始化安裝) 設置IP 關閉SELINUX 配置yum源 2.yum -y install gcc

Kotlin Linux下的環境搭建

解壓 跟著 裏的 下載 lin have export path 書寫 Kotlin是JVM世界裏的未來主宰,不管你信不信,我反正相信了! 好吧,如果你不糊塗,就跟著我一起學學吧,哈哈 一下載https://github.com/JetBrains/kotlin/relea

vexpress ca9 linux kernel qemu環境搭建記錄

you 編譯器 tty .com .net embed dts ima v2p kernel 下載kernel ,解壓縮後編譯 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- O=../tl distcleanmake ve