Vscode 调试arm64 linux内核
对于linux内存系列的阅读和测试记录。
https://zhuanlan.zhihu.com/p/105069730
https://zhuanlan.zhihu.com/p/510289859
搭建arm64内核调试环境:
安装工具:
sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install libncurses5-dev build-essential git bison flex libssl-dev
还要安装支持aarch64的gdb:
sudo apt-get install gdb-muliarch
下载内核:
/media/wlz/beifen/neihe$ wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.0.tar.gz
/media/wlz/beifen/neihe$ tar -xvf linux-5.0.tar.gz
/media/wlz/beifen/neihe$ cd linux-5.0/
配置+编译:
/media/wlz/beifen/neihe/linux-5.0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
/media/wlz/beifen/neihe/linux-5.0$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j8
安装qemu-arm版:
sudo apt-get install qemu-system-arm
安装的为4.2.1。
制作根文件系统:
由于初期是调试启动代码为主,所以先制作一个简单的文件系统:
https://zhuanlan.zhihu.com/p/105069730
制作完成后运行qemu:
qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 4096M -kernel ./linux-5.0/arch/arm64/boot/Image -nographic -append “console=ttyAMA0 init=/linuxrc ignore_loglevel” -initrd ./rootfs -S -gdb tcp::1234
参考https://zhuanlan.zhihu.com/p/345232459
关于qemu-system-aarch64的几个参数解释如下:
-smp 核数目
-m 物理内存大小
-kernel 内核压缩镜像位置
-initrd rootfs位置
-nographic 不使用图形界面,不加可能会因为无法启动图形界面而失败
-append cmdline启动参数
-S 在入口处阻塞CPU
-gdb tcp::xxxx 指定通信通道为 本地tcp通道(因为是在同一个机器上),端口号为xxxx,如果不需要指定端口号可以用-s 代替
此时gdbserver已启动,需在另一个窗口启动gdb并连接:
gdb-multiarch ./linux5.0/vmlinux
(gdb)target remote :1234
(gdb)break start_kernel
(gdb)continue
(gdb)step
此时基本的流程结束。
vscode调试:
https://zhuanlan.zhihu.com/p/510289859
通过vscode进行gdb调试可以更直观。
先在vscode中下载gdb扩展:
然后打开linux源码目录并设为工作空间:
Debug - configure打开configure文件并编辑:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
“version”: “0.2.0”,
“configurations”: [
{
“name”: “kernel debug”,
“type”: “cppdbg”,
“request”: “launch”,
“program”: “workspaceFolder/vmlinux","cwd":"{workspaceFolder}/vmlinux", "cwd": "workspaceFolder/vmlinux","cwd":"{workspaceFolder}”,
“MIMode”: “gdb”,
“miDebuggerPath”:“/usr/bin/gdb-multiarch”,
“miDebuggerServerAddress”: “localhost:1234”
}
]
}
随后和前章节类似,先开启qemu并运行gdbserver:
qemu-system-aarch64 -M virt -cpu cortex-a53 -smp 2 -m 4096M -kernel ./linux-5.0/arch/arm64/boot/Image -nographic -append “console=ttyAMA0 init=/linuxrc ignore_loglevel” -initrd ./rootfs -S -gdb tcp::1234
然后在vscode中添加一个断点:
点击运行:
最终效果图:
Vscode 调试arm64 linux内核相关推荐
- ARM DS-5单步调试ARM64 linux 内核
目录 1 介绍 2 开发环境 3 准备工作 3.1 Ubuntu环境准备 3.2 源代码准备 3.3 DS-5准备 3.4 使用DS-5调试源码 3.4.1 建立源码工程 3.4.2 创建debug配 ...
- ARM64 Linux 内核页表的块映射
作者 | 宋宝华 责编 | 张文 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 内核文档 Documentation/arm64/memory.rst 描述了 A ...
- JLinkGDBServer调试ARM linux内核
1.修改Makefile编译优化级别 编译器优化后,很多调试信息看不到,不好调试,修改linux-4.5.3/Makefile的KBUILD_CFLAGS优化级别为"-O1".(& ...
- QEMU启动ARM64 Linux内核
目录 前言 前置知识 virt开发板 ARM处理器家族简介 安装qemu-system-aarch64 安装交叉编译工具 交叉编译ARM64 Linux内核 交叉编译ARM64 Busybox 使用b ...
- 从 Java sleep 来看 arm64 Linux 内核都干了些什么?
使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,取决于系统计时器和调度器的精度和准确性.线程不会失去任何监视器的所有权. sleep(long millis) 仅仅调用 sleep 带两个参数版 ...
- 通过gdb调试分析Linux内核的启动过程
作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验流程 1.打开环境 执 ...
- 嵌入式ARM64 Linux内核FIT uimage方式启动
平台:orangepi4 rockchip rk3399 LPDDR4 4G eMMC 16G 系统:ubuntu 20.04 FIT简介 device tree在ARM架构中普及之后,u-boot也 ...
- 我偶尔会用到的调试方法 | Linux 内核
文章转自我朋友的公众号,以下为内容正文 ==== 大家好,我是你们的工具人老吴. 今天,和大家分享一下几个 Linux 内核的调试小技巧. 当你遇到一个 bug,你调试了 1 年半载都解决不了,这其实 ...
- 说说几个我偶尔会用到的调试方法 | Linux 内核
大家好,我是你们的工具人老吴. 今天,和大家分享一下几个 Linux 内核的调试小技巧. 当你遇到一个 bug,你调试了 1 年半载都解决不了,这其实一件好事. 因为它会时刻提醒你平时写代码时要谨慎. ...
最新文章
- 【随想】_无关技术_你是合格的项目经理人吗?
- Spring Boot----基础
- ASP.NET夜话笔记06
- Microsoft SQL Server 2005 安装程序错误解疑
- Qt Creator使用其他构建系统
- junit - no runnable methods
- 基于事件驱动架构构建微服务第19部分:使用 SignalR 和 Azure Active Directory 构建和保护实时通信...
- toad查看oracle的plsql包,Oracle logminer 分析redo log(TOAD与PLSQL)
- 667. Beautiful Arrangement II
- 微信小程序商城,微信小程序微店,长期维护版本
- 比较ole db/odbc/ado/ado.net/jdbc
- 用UNet做PASCAL VOC2012图像分割
- 曲线拟合最小二乘法优缺点_最小二乘法、回归分析法、灰色预测法、决策论、神经网络等5个算法的使用范围及优缺点是什么?...
- Java夜未眠(蔡学镛)
- CKFinder3.5.1整合springboot修复bug免费
- jenkins调用shell脚本实现自动上线完整项目---此项目中用到了git parameter、choise parameter参数化构建(五)
- 组态王 6.55 启停plc_成套设备PLC编程深圳PLC编程
- 我用python代码表白,泡到了大学小师妹
- java 健身会所_基于jsp的健身俱乐部会员-JavaEE实现健身俱乐部会员 - java项目源码...
- IEduChina2019国际学校展暨国际教育论坛温暖深圳
热门文章
- 有趣的HTML实例(十五) 注册登录界面(css+js)
- 开发工程项目的标后预算(或称 目标成本、项目预算)编制工具软件,建立施工企业定额库...
- OrderedDict()的用法
- update 增加datetime 时间
- 研究生期间如何赚外快
- Python123-练习题
- java循环引用 垃圾回收,深入解析Java垃圾回收机制
- [F2F] MyBatis相关面试题
- 小程序中打开pdf文件(wx.downloadFile+wx.openDocument)
- 1114:【白细胞计数】