对于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内核相关推荐

  1. 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配 ...

  2. ARM64 Linux 内核页表的块映射

    作者 | 宋宝华  责编 | 张文 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 内核文档 Documentation/arm64/memory.rst 描述了 A ...

  3. JLinkGDBServer调试ARM linux内核

    1.修改Makefile编译优化级别 编译器优化后,很多调试信息看不到,不好调试,修改linux-4.5.3/Makefile的KBUILD_CFLAGS优化级别为"-O1".(& ...

  4. QEMU启动ARM64 Linux内核

    目录 前言 前置知识 virt开发板 ARM处理器家族简介 安装qemu-system-aarch64 安装交叉编译工具 交叉编译ARM64 Linux内核 交叉编译ARM64 Busybox 使用b ...

  5. 从 Java sleep 来看 arm64 Linux 内核都干了些什么?

    使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数,取决于系统计时器和调度器的精度和准确性.线程不会失去任何监视器的所有权. sleep(long millis) 仅仅调用 sleep 带两个参数版 ...

  6. 通过gdb调试分析Linux内核的启动过程

    作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验流程 1.打开环境 执 ...

  7. 嵌入式ARM64 Linux内核FIT uimage方式启动

    平台:orangepi4 rockchip rk3399 LPDDR4 4G eMMC 16G 系统:ubuntu 20.04 FIT简介 device tree在ARM架构中普及之后,u-boot也 ...

  8. 我偶尔会用到的调试方法 | Linux 内核

    文章转自我朋友的公众号,以下为内容正文 ==== 大家好,我是你们的工具人老吴. 今天,和大家分享一下几个 Linux 内核的调试小技巧. 当你遇到一个 bug,你调试了 1 年半载都解决不了,这其实 ...

  9. 说说几个我偶尔会用到的调试方法 | Linux 内核

    大家好,我是你们的工具人老吴. 今天,和大家分享一下几个 Linux 内核的调试小技巧. 当你遇到一个 bug,你调试了 1 年半载都解决不了,这其实一件好事. 因为它会时刻提醒你平时写代码时要谨慎. ...

最新文章

  1. 【随想】_无关技术_你是合格的项目经理人吗?
  2. Spring Boot----基础
  3. ASP.NET夜话笔记06
  4. Microsoft SQL Server 2005 安装程序错误解疑
  5. Qt Creator使用其他构建系统
  6. junit - no runnable methods
  7. 基于事件驱动架构构建微服务第19部分:使用 SignalR 和 Azure Active Directory 构建和保护实时通信...
  8. toad查看oracle的plsql包,Oracle logminer 分析redo log(TOAD与PLSQL)
  9. 667. Beautiful Arrangement II
  10. 微信小程序商城,微信小程序微店,长期维护版本
  11. 比较ole db/odbc/ado/ado.net/jdbc
  12. 用UNet做PASCAL VOC2012图像分割
  13. 曲线拟合最小二乘法优缺点_最小二乘法、回归分析法、灰色预测法、决策论、神经网络等5个算法的使用范围及优缺点是什么?...
  14. Java夜未眠(蔡学镛)
  15. CKFinder3.5.1整合springboot修复bug免费
  16. jenkins调用shell脚本实现自动上线完整项目---此项目中用到了git parameter、choise parameter参数化构建(五)
  17. 组态王 6.55 启停plc_成套设备PLC编程深圳PLC编程
  18. 我用python代码表白,泡到了大学小师妹
  19. java 健身会所_基于jsp的健身俱乐部会员-JavaEE实现健身俱乐部会员 - java项目源码...
  20. IEduChina2019国际学校展暨国际教育论坛温暖深圳

热门文章

  1. 有趣的HTML实例(十五) 注册登录界面(css+js)
  2. 开发工程项目的标后预算(或称 目标成本、项目预算)编制工具软件,建立施工企业定额库...
  3. OrderedDict()的用法
  4. update 增加datetime 时间
  5. 研究生期间如何赚外快
  6. Python123-练习题
  7. java循环引用 垃圾回收,深入解析Java垃圾回收机制
  8. [F2F] MyBatis相关面试题
  9. 小程序中打开pdf文件(wx.downloadFile+wx.openDocument)
  10. 1114:【白细胞计数】