Kernel调试

Ubuntu下搭建Kernel调试环境

Posted by Jeff on December 27, 2020

Ubuntu下搭建Kernel调试环境

下载Kernel

https://www.kernel.org/

本人下载的是最新版本:5.10.3,编译的时候会报gcc版本过低,我是升级到gcc-9.2.0或者更高才解决的,升级方式:

下载gcc源码:

wget http://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz 
tar -vxf gcc-9.2.0.tar.gz

wget 下载慢的话,可以改为axel -n 线程数 http://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz

下载gcc编译依赖文件并安装:

./contrib/download_prerequisites

tar jxvf gmp-6.1.0.tar.bz2
cd gmp-6.1.0
./configure
make && sudo make install

tar zxvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure
make && sudo make install

tar jxvf mpfr-3.1.4.tar.bz2
cd mpfr-3.1.4
./configure
make && sudo make install

创建编译目录:

mkdir build && cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
`–enable-languages表示你要让你的gcc支持那些语言,–disable-multilib不生成编译为其他平台可执行代码的交叉编译器。
–disable-checking生成的编译器在编译过程中不做额外检查,也可以使用*–enable-checking=xxx*来增加一些检查`
make -jX    ##X代表线程数,根据自己CPU来配置
sudo make install

验证是否安装成功:

gcc -v  如果看到的还是之前的版本尝试下面方法
 
/usr/local/bin/gcc -v     查看是否是安装版本
 
最后添加环境变量(这是零时方法)
export PATH=/usr/local/bin:$PATH
 
然后再 gcc -v查看

Note:

如果用gdb配合qemu调试时出现:Remote ‘g’ packet reply is too long (expected 308 bytes, got 536 bytes):XXXX 一般64位CPU会遇到有两种方案

第一种方案:

gdb
(gdb) set architecture 
Requires an argument. Valid arguments are i386, i386:x86-64, i386:x64-32, i8086, i386:intel, i386:x86-64:intel, i386:x64-32:intel, i386:nacl, i386:x86-64:nacl, i386:x64-32:nacl, auto.
##根据自己CPU 在执行gdb 连接qemu时先执行:
set architecture i386:x86-64:intel
##再开始调试

第二种方案:

##这种方案需要下载gdb源码,修改源码gdb/remote.c:

remote.c

qemu命令:

##启动:
qemu-system-x86_64 -curses -smp 4 -m 1024M -kernel arch/x86/boot/bzImage -S -s
##退出:
killall qemu-system-x86_64

gdb命令:

gdb --tui vmlinux
(gdb) target remote localhost:1234
(gdb) b start_kernel
(gdb) c