在ubuntu20.04 上配置 qemu/kvm linux kernel调试环境

一:安装qemu/kvm 和 virsh

      qemu/kvm 是虚拟机软件,virsh是管理虚拟机的命令行工具,可以使用virsh创建,编辑,启动,停止,删除虚拟机。

      (1):安装之前,先确认CPU是否支持虚拟化技术,使用 egrep '(svm|vmx)' /proc/cupinfo 查看,如果有vmx或svm的输出,则说明是支持的。

      (2):安装之前,检查BIOS中是否禁用了虚拟化支持,使用下面命令检查:

                   sudo apt install cpu-checker
                   kvm-ok   

                  如果输出 INFO: /dev/kvm exists     KVM acceleration can be used 则说明BIOS中已启用,否则需要进入BIOS中开启虚拟化支持,具体根据主板型号进入BIOS中设置。

      (3):安装

                 sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager 

二:创建虚拟机镜像,安装操作系统

         (1): 下载ubuntu-20.04.6-desktop-amd64.iso 镜像

         (2): qemu-img create -f qcow2 ubuntuvm.img 40G

         (3): qemu-system-x86_64 -enable-kvm -name ubuntuvm -m 4G -hda ubuntuvm.img -cdrom ubuntu-20.04.6-desktop-amd64.iso -boot d -vnc :18

         (4): 使用VNC客户端链接虚拟机,完成ubunut的安装,vnc监听端口为 5918

         (5): 当虚拟机上的ubuntu安装好之后,后续启动虚拟机用以下命令:

               qemu-system-x86_64 -name ubuntuvm -m 4G -hda ubuntuvm.img -boot d -enable-kvm -cpu host -virtfs local,path=/your/path/,mount_tag=host0,security_model=passthrough,id=host0 -gdb tcp::1234 -vnc :18 

               其中-virfs选项是配置与宿主机的共享文件目录,在进入虚拟机的ubuntu系统以后,执行挂载操作,就可以实现宿主机与虚拟机共享文件了,具体挂载命令如下

              sudo mount -t 9p -o trans=virtio,version=9p2000.L host0 /your/path

             其中-gdb选择是开启gdb监听端口,这个在后面调试内核会用到

   

三: 在虚拟机上编译linux内核

          (1):在虚拟机上下载Linux内核源码, 可以使用uname -srm 查看内核版本

                     sudo apt install linux-source-5.4.148  

          (2):源码下载下来,将其解压到/usr/src 目录下

                    sudo tar vjxkf linux-source-5.4.148.tar.bz2 

          (3):安装编译内核需要的依赖包

                    sudo apt install libncurses5-dev libssl-dev bison flex libelf-dev gcc make openssl libc6-dev 

                   sudo apt install dwarves zstd binutils 

            (4):  编译前,进入/usr/src/linux-source-5.4.148目录,执行下面命令,进行内核参数配置

                   sudo make menuonfig 

            (5): 开启下面内核参数配置,可以在.config 文件中编辑

                   CONFIG_DEBUG_INFO=y

                   CONFIG_FRAME_POINTER=y

                   CONFIG_GDB_SCRIPTS=y
                   CONFIG_DEBUG_INFO_REDUCED=n 

                   CONFIG_KGDB=y

                   CONFIG_RANDOMIZE_BASE=n

          (6):编译安装

                    sudo make -j8 
                    sudo make INSTALL_MOD_STRIP=1 modules_install
                    sudo make install 

               

四: 调试内核

            (1):  在宿主机上运行gdb需要内核二进制文件,我们可以将虚拟机的/usr/src/linux-source-5.4.148整个目录都拷贝到宿主机上,比如拷贝到/path/to/linux-build目录下。在/usr/src/linux-source-5.4.148下的vmlinux文件就是内核的二进制文件。

             (2): 在宿主机上配置gdb环境,为了能够让gdb在启动时能够加载 Linux helper 脚本,需要在~/.gdbinit 文件中添加如下内容:  /path/to/linux-build 就是上一步拷贝过来的linux源码目录

                   set auto-load safe-path /path/to/linux-build

          (3): 在宿主机上执行 gdb vmlinux,然后target remote :1234 就可以attach到虚拟机的内核,进行调试了

                  $ gdb vmlinux
                      ...
                    Reading symbols from vmlinux...
                    (gdb) target remote :1234
                    Remote debugging using :1234

                            

                   

                   

 

           

         

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478026.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity学习(14)——组装服务器环境

工具-获取工具和功能 vs2022中已经自带了 下载网址 NuGet Gallery | Microsoft.NETFramework.ReferenceAssemblies 1.0.3 后来发现微软已经不再支持4.0版本,还是自己从头组装服务器吧。 先给vs2022新增这个模块,4.38G大小还是可以接受的。 安装完之后就…

部分回溯法题解

部分回溯法题解 一、22. 括号生成二、39. 组合总和 一、22. 括号生成 中 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n 3 输出:[“((()))”,“(()())…

13180自考《操作系统》考点总结

第一章 操作系统概论 考点1 操作系统的定义、特征、功能 定义:操作系统是计算机系统中的一个系统软件,它是这样一些程序模块的集合:它们能有效地组织和管理计算机系统中的硬件及软件资源,合理地组织计算机工作流程,控…

四分位距IQR_ interquartile range

四分位距IQR_ interquartile range 1 IQR(Interquartile Range)四分位距的含义2 如何计算IQR参考: 1 IQR(Interquartile Range)四分位距的含义 官方定义: 四分位距(interquartile range, IQR&a…

详解4大C语言内存函数【超详细建议点赞收藏】

目录 1. memcpy----内存拷贝1.1 函数介绍1.2 函数使用1.3 模拟实现 2. memmove----重叠内存的数据拷贝2.1 函数介绍2.2 函数使用2.3 模拟实现 3. memcmp----内存比较3.1 函数介绍3.2 函数使用 4.memset----内存设置4.1 函数介绍4.2 函数使用 注意:以下4个内存函数在…

什么是 Sepolia 测试网以及如何从 Faucet 获取 Sepolia ETH

如何通过水龙头领取 Sepolia 测试网 ETH 代币 Sepolia 测试网需要 Sepolia ETH 代币来测试即将推出的 dApp,然后再在以太坊主网上线。您可以从 Alchemy、QuickNode 和 Infura 水龙头领取 Sepolia 测试网 ETH。 要点 您可以从官方水龙头和其他一些独立水龙头获取 S…

面试题:链表相交

链表相交 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 思路 这个题目有2个思路,我先说容易想到的思路 对齐链表…

有人总结了浅色系可视化大屏优点,我要是小白,我就信了。

浅色系适合在电脑上展示,不适合在大屏展示,有人总结了浅色系大屏优点,我捡要点说下。 浅色系可视化大屏幕在数据可视化中具有多个优点: 首先,浅色系色彩明亮清新,能够提升人们的视觉感受和心情&#xff0c…

[Flink04] Flink部署实践

Flink部署支持三种模式:本地部署、Standalone部署、Flink on Yarn部署。 独立(Standalone)模式由Flink自身提供资源,无需其他框架,这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但Flink 是大…

遇到问题(二) 中文乱码

例如这样: 原本是这样: 解决方法:点击扳手工具设置——Editor——Encoding——选chinese GB2312(有的是UTF-8)

同学在外包干了两年的点点点,24岁人就快废了

前言 简单的说下,我大学的一个同学,毕业后我自己去了自研的公司,他去了外包,快两年了我薪资、技术各个方面都有了很大的提升,他在外包干的这两年人都要废了,技术没一点提升,学不到任何东西&…

在ubuntu中制作ubuntu的U盘启动盘

概要: 本篇演示在ubuntu22.04中制作ubuntu22.04的U盘启动盘 一、下载ubuntu22.04的iso文件 访问ubuntu官网https://ubuntu.com自行下载ubuntu官网 二、制作U盘启动盘 打开系统自带软件Startup Disk Creator 软件会自动检测iso文件和U盘 点击Make Startup Disk…