ubuntu18.04下linux4.17内核调试环境搭建
版本linux4.17ubuntu18.04先给系统至少80G内存
1。编译内核
先配置文件
make mrproper
make menuconfig
我这里需要的依赖有
sudo apt install make cmake gcc g++ clang
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt install ncurses-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install linux-libc-dev:amd64
sudo apt-get install libssl-dev
然后窗口调大点
http://i2.运维网.com/images/blog/201812/30/7e9ed6663b05cd82a6d8f856e5f90387.png
打开相关选项:(我看了下好像全默认开启)
https://blog.csdn.net/ztguang/article/details/52410562
http://i2.运维网.com/images/blog/201812/30/5cf452b48eecce42c0f94dc51e264cac.png
http://i2.运维网.com/images/blog/201812/30/186297184634b76388b04ba173711ba1.png
Kernel: arch/x86/boot/bzImage is ready(#1)
FATAL: drivers/scsi/am53c974.o has no symtab?
scripts/Makefile.modpost:92: recipe for target '__modpost' failed
Makefile:972: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev
sudo apt install libelf-dev
换内核就先修改:
sudo gedit /etc/default/grub
注释第二行:
http://i2.运维网.com/images/blog/201812/31/d8cd6bce2a4614ae7428316dcc4024df.png
更新
sudo update-grub2
http://i2.运维网.com/images/blog/201812/31/5371d8bd3b48e745c55e3325d28120e8.png
///////////////////////
拷贝被调试机上编译出来的vmlinux到调试机上,与内核源码(是自己下载的内核源码这里是4.17)同级目录(内存足够多把编译生成的中间文件也可以一起拷贝)
然后
第一步建立串口通信
http://i2.运维网.com/images/blog/201812/31/a67f0db8aec6a0efd5166bc61193394d.png
测试
http://i2.运维网.com/images/blog/201812/31/1e32bd4334fe184d34dc59bca5c5e170.png
开启调试环境
打开 /boot/grub/grub.cfg 文件,选择需要启动的内核版本,在尾部添kgdbwait kgdboc=ttyS0,115200
第一个菜单
http://i2.运维网.com/images/blog/201812/31/3e203e142b25a4fb03ca11e01a36791d.png
对应
http://i2.运维网.com/images/blog/201812/31/405bc4247396bb353dba7773200c48cf.png
第二个菜单
http://i2.运维网.com/images/blog/201812/31/2ec99e09c76ee7988dce2ded8326d2b4.png
对应
http://i2.运维网.com/images/blog/201812/31/e96b076b1ebf88e707955764989e0102.png
根据需要内核版本自定义设置
这里默认第一个菜单对一项
重启系统会断下
http://i2.运维网.com/images/blog/201812/31/e9d133d2226bb2bce584a45e3c4b4ad9.png
调试机
进入系统源码目录
gdb vmlinux
http://i2.运维网.com/images/blog/201812/31/78dafec31c69ba0c24855c96b7b2a24f.png
set remotebaud 115200 目前其实没有用
target remote /dev/ttyS0
还是有点问题 可能是符号也要拷贝吧
http://i2.运维网.com/images/blog/201812/31/a1e62621ddfcef1a4740917a510ca891.png
这里可能会有新内核启动不了的情况报cpu没有工作
http://i2.运维网.com/images/blog/201812/31/4f4c9a6f122aa1ccdd59af1c962baefe.png
我的做法是干掉原理的旧内核只要新内核,同时内核研究时一定要记得很定会有各种错。
个人觉得至少会有三个镜像。
第一个镜像是linux安装成功的镜像。防止编译,安装内核的各种错误。
第二个镜像。编译成功,或者直接是内核已经安装成功。
第三个镜像搭建环境的镜像。
http://i2.运维网.com/images/blog/201812/31/c581f6c6a3c58434ceea8add434beaa3.png
//////////////////////////////////////////////////////////
如果是不想开机就断下的话只要加上 kgdboc=ttyS0,115200
http://i2.运维网.com/images/blog/201812/31/184dfc8291c6998284ae1ccde6ff8aac.png
重启 root运行 echo g > /proc/sysrq-trigger
但是可能会报错误 说权限错误 重新设置下root密码就可以了 可以和原来密码一样
haidragon@ubuntu:~$ echo g > /proc/sys
sys/ sysrq-triggersysvipc/
haidragon@ubuntu:~$ echo g > /proc/sys
sys/ sysrq-triggersysvipc/
haidragon@ubuntu:~$ echo g > /proc/sys
sys/ sysrq-triggersysvipc/
haidragon@ubuntu:~$ echo g > /proc/sysrq-trigger
bash: /proc/sysrq-trigger: Permission denied
haidragon@ubuntu:~$ sudo echo g > /proc/sysrq-trigger
bash: /proc/sysrq-trigger: Permission denied
haidragon@ubuntu:~$ su
Password:
su: Authentication failure
haidragon@ubuntu:~$ sudo passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
haidragon@ubuntu:~$ su
Password:
root@ubuntu:/home/haidragon# echo g>/proc/sys
sys/ sysrq-triggersysvipc/
root@ubuntu:/home/haidragon# echo g>/proc/sysrq-trigger
root@ubuntu:/home/haidragon#
root@ubuntu:/home/haidragon#
运行后系统就会卡住
http://i2.运维网.com/images/blog/201812/31/62e329b80d536f0b9346ee8f2924a79e.png
调试机运行gdb vmlinux
然后
set remotebaud 115200
target remote /dev/ttyS0
http://i2.运维网.com/images/blog/201812/31/648186b60edfbc2c95f69347197c4640.png
输入c运行
http://i2.运维网.com/images/blog/201812/31/c43e43afa268ba83b4f8b536036fe8fd.png
https://blog.csdn.net/ztguang/article/details/52410562
https://blog.csdn.net/u013470224/article/details/51314231
https://blog.csdn.net/swingwang/article/details/72331196
页:
[1]