建设国外网站,淘宝无货源一键铺货软件,2小时学会php网站建设,杭州哪家网站建设好1.准备两台CentOS系统的vmware虚拟机
其中一台作为调试机#xff0c;另一台则作为被调试机。如下图#xff0c;CentOS7.9x64为被调试机#xff0c;CentOS7.9x64-Debugger为调试机 2.配置串口设备
若虚拟机有串口设备#xff08;如打印机#xff09;#xff0c;需要先删…1.准备两台CentOS系统的vmware虚拟机
其中一台作为调试机另一台则作为被调试机。如下图CentOS7.9x64为被调试机CentOS7.9x64-Debugger为调试机 2.配置串口设备
若虚拟机有串口设备如打印机需要先删除串口设备然后新添加一个串口设备 配置CentOS7.9x64被调试机 配置CentOS7.9x64-Debugger调试机 配置完成后测试串口是否配置OK 在被调试机CentOS7.9x64中执行cat /dev/ttyS0在调试机CentOS7.9x64-Debugger中执行echo hello /dev/ttyS0若在CentOS7.9x64中看到如下图回应则配置成功 3.编译内核
安装依赖
yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel java-devel
yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
下载内核源码包 https://vault.centos.org/7.9.2009/os/Source/SPackages/kernel-3.10.0-1160.el7.src.rpm
安装内核源码包
yum install mock
useradd -s /sbin/nologin mockbuild
rpm -ivh kernel-3.10.0-1160.el7.src.rpm
解压源码包
cd /root/rpmbuild/SPECS
rpmbuild -bp --target$(uname -m) kernel.spec
配置编译选项
cd /root/rpmbuild/BUILD/kernel-3.10.0-1160.el7/linux-3.10.0-1160.el7.x86_64
cp /boot/config-3.10.0-1160.el7.x86_64 .config [可选]
make menuconfig
勾选Kernel hacking以下选项 -*- Magic SysRq key [*] Compile-time stack metadata validation [*] Compile the kernel with debug info [*] Compile the kernel with frame pointers [*] KGDB: kernel debugger --- * KGDB: use kgdb over the serial console
编译内核
make
make modules_install
make install
4.配置被调试机内核引导参数
编辑CentOS7.9x64的/boot/grub/grub.cfg或者/boot/grub2/grub.cfg在需要调试的内核引导项上添加串口调试参数kgdbocttyS0,115200 kgdbwait kgdbcon nokaslr2.6.16的参数为kgdb82501,115200 kgdbwait 其中nokaslr是关闭内核地址空间随机化功能Linux内核从2.6.25版本开始引入的功能。如果开启KASLR功能使用KGDB调试时无法直接使用函数名打断点。
5.引导调试内核
重启被调试机CentOS7.9x64选择需要调试的引导项然后引导过程会暂停在如下图等待远程调试 6.远程调试
将被调试机CentOS7.9x64编译出来的内核拷贝到调试机上。推荐做法是克隆被调试机作为调试机 在调试机CentOS7.9x64-Debugger上
gdb vmlinux
set remotebaud 115200 或者 set serial baud 115200
target remote /dev/ttyS0
成功附加远程主机后会显示如下图 附加成功后可执行c命令继续让目标机引导。 后续需要中断目标机时可以在目标机执行echo g /proc/sysrq-trigger控制权即可转移给gdb。
7.内核模块的调试
一般内核调试都会涉及调试自己开发的内核可加载模块要调试自己的内核模块需要先让目标机加载驱动然后再进行调试。 在被调试机CentOS7.9x64中
insmod lkm.ko
cat /sys/module/lkm/sections/.text /sys/module/lkm/sections/.data /sys/module/lkm/sections/.bss
在调试机CentOS7.9x64-Debugger上
add-symbol-file /root/lkm.ko 0xffffffffc0533000 -s .data 0xffffffffc0538000 -s .bss 0xffffffffc0538600
source path
break function