基于VSCode的Linux内核调试环境搭建

2023-05-16

1、安装开发工具

sudo apt install build-essential

sudo apt install qemu

sudo apt install libncurses5-dev bison flex libssl-dev libelf-dev

2、下载内核源代码

sudo apt install axel

axel -n 20 https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.34.tar.xz

xz -d linux-5.4.34.tar.xz
tar -xvf linux-5.4.34.tar
cd linux-5.4.34

3、配置内核选项

make defconfig
make menuconfig
# 进行以下设置

Kernel hacking —>

• Compile-time checks and compiler options —>

• [*] Compile the kernel with debug info

• [*] Provide GDB scripts for kernel debugging

• [*] Kernel debugging

•# 关闭KASLR,否则会导致打断点失败

•Processor type and features ---->

• [] Randomize the address of the kernel image (KASLR)

在这里插入图片描述
在这里插入图片描述

4、编译和运行内核

make -j$(nproc)
# 测试一下内核能不能正常加载运行,因为没有文件系统最终会kernel panic
qemu-system-x86_64 -kernel arch/x86/boot/bzImage -nographic -append "console=ttyS0"

在这里插入图片描述

5、制作内存根文件系统的过程

首先从https://www.busybox.net下载 busybox源代码解压,解压完成后,跟内核一样先配置编译,并安装。

axel -n 20 https://busybox.net/downloads/busybox-1.31.1.tar.bz2
tar -jxvf busybox-1.31.1.tar.bz2
cd busybox-1.31.1

make menuconfig
# 记得要编译成静态链接,不用动态链接库

Settings —>

• [*] Build static binary (no shared libs)

然后编译安装,默认会安装到源码目录下的 _install 目录中。

make -j$(nproc) && make install

然后制作内存根文件系统镜像,大致过程如下:

mkdir rootfs
cd rootfs
cp ../busybox-1.31.1/_install/* ./ -rf
mkdir dev proc sys home
sudo cp -a /dev/{null,console,tty,tty1,tty2,tty3,tty4} dev/

准备init脚本文件放在根文件系统根目录下(rootfs/init),添加如下内容到init文件。

touch init
vim init
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo "Welcome wyxOS!"
echo "--------------------"
cd home
/bin/sh

然后给init脚本添加可执行权限:

chmod +x init

打包成内存根文件系统镜像:

find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../rootfs.cpio.gz

测试挂载根文件系统,看内核启动完成后是否执行init脚本:

qemu-system-x86_64 -kernel linux-5.4.34/arch/x86/boot/bzImage -initrd rootfs.cpio.gz -nographic -append "console=ttyS0"

在这里插入图片描述

6、安装vscode

我使用的是购买的云服务器,首先在控制台中打开5901端口,然后安装桌面环境:

# 切换至root用户
sudo -i
# 更新和获取最新的软件及版本信息
apt-get update
# 安装桌面环境所需软件包
apt install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal ubuntu-desktop
# 安装VNC,如果是Ubuntu 18.04版本
apt-get install vnc4server
# 启动 VNC 服务
vncserver

设置密码后,修改VNC配置文件:

vi ~/.vnc/xstartup

把文件里的内容替换为:

#!/bin/sh 
export XKL_XMODMAP_DISABLE=1 
export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME" 
export XDG_MENU_PREFIX="gnome-flashback-" 
gnome-session --session=gnome-flashback-metacity --disable-acceleration-check & 

:wq保存退出,最后执行两条命令:

# 杀掉原桌面进程
vncserver -kill :1
# 生成新的会话
vncserver -geometry 1920x1080 :1

接下来在电脑上下载VNC Viewer软件远程连接,在地址栏输入服务器的公网地址:1 即可。

然后在应用商店里下载安装VSCode,在命令行中输入 code 打开。

7、配置vscode

首先安装GNU Global:

sudo apt install global

然后在vs code中安装插件C/C++ Intellisense、C/C++ Themes和GDB Debug。

cd到 linux-5.4.34 文件夹下执行命令生成 compile_commands.json 文件帮助Intellisense正常提示:

python3 ./scripts/gen_compile_commands.py

接下来在linux-5.4.34文件夹下新建一个 .vscode 文件夹,把配置文件 里的文件全部放进 .vscode文件夹中。

在这里插入图片描述

接下来就可以在vs code中打开linux-5.4.34文件夹。

8、调试

在start_kernal处打断点:点击左边的运行和调试图标,在断点里添加函数 start_kernal,然后点击菜单栏里的 run - start debugging,从 start_kernal 开始跟踪分析:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于VSCode的Linux内核调试环境搭建 的相关文章

  • 51单片机实现普通时钟

    一 实验内容 xff1a 1 打开单片机 xff0c 数码管显示当前时间0 0 0 xff0c 时 分 秒 xff08 时间为24小时制 xff09 2 按键1 xff1a 按下一次进入秒的修改 xff0c 按下两次修改分钟 xff0c 按
  • No suitable kits found.——QT创建项目错误

    才开始学QT就遇到一个问题 xff0c 无法创建项目 xff0c 在 Kits 这一步提示 No suitable kits found 我的错误原因 xff1a 因为以前装过MinGw环境 xff0c 而且环境里还包含着中文 xff0c
  • Keil5高亮显示相同变量加上护眼配色方案

    先上效果图 xff1a 我们知道 xff0c 之前版本的Keil是不会对相同代码进行高亮显示的 xff0c 不过现在最新版的Keil已经支持对其高亮显示了 xff0c 只不过其配色还是和原来一样有些差强人意 初始效果如下 xff1a 实现上
  • 螺旋队列公式解释

    以1为坐标零点 xff0c 向右为X正 xff0c 向下为Y正 xff0c 任意输入一坐标 xff08 x y xff0c r 61 max x y 为当前所在层数 xff0c 得到下面公式 上边 xff1a top 61 max r 43
  • Bilibili缓存视频在电脑端直接打开方式

    哔哩哔哩移动端缓存的视频和音频分开了 xff0c 使用PotPlayer播放器可以在播放视频的时候加载音频 xff0c 从而不用合并两个文件 具体操作 xff1a 使用PotPlayer播放器打开video m4s文件 打开后点鼠标右键 x
  • C语言数组、结构体、结构体数组作为函数参数

    数组作为函数参数 如果想把一个数组名参数传递给函数 xff0c 正确的函数形参应该是怎样的 xff1f 它是应该声明为一个指针还是一个数组 xff1f 调用函数时实际传递的是一个指针 xff0c 所以函数的形参实际上是一个指针 xff0c
  • 有道词典离线数据包位置

    软件版本 xff1a 9 1 0 位置 xff1a C Users 用户名 AppData Local Yodao DeskDict nmt model 将离线包放入nmt model文件夹后重新启动有道词典即可断网使用长句翻译 汉英互译离
  • 改变Keil5所有窗口的背景颜色

    在网上找了很多都没有找到如何更改Keil5左侧和下侧的背景颜色 xff0c 后来根据一些提示找到了改背景的方法 xff0c 在此分享给有需要的人 首先 xff0c 更换中间那块的背景颜色相信大家都会 xff0c 不过我还是写一下 xff0c
  • ros入门(题尾一键安装)

    运行ros 96 提示 xff1a 因为手头有英伟达树莓派跟激光雷达 xff0c 也有ros小车 直接上现成的 xff0c 但是会卡 而且不好用 xff0c 所以建议自己安装一个 链接 xff1a https pan baidu com s
  • git 基础

    git可以实现分布式的版本管理 xff0c 合作开发工具 github和gitee是代码托管平台 查看配置信息 xff1a git config list 1 我们可以通过下面两条命令配置名字和邮箱 xff0c 使代码提交有迹可循 配置名字
  • idf.py基本使用

    1 idf py set target lt target gt 设置构建项目的目标 xff08 芯片 xff09 2 idf py menuconfig 运行menuconfig工具配置项目 3 idf py build 构建在当前目录下
  • rviz更改机器人位置,不考虑gazebo环境。

    文章目录 问题描述解决方案 问题描述 在RVIZ中想要去更改机器人模型位置 xff0c 但不想考虑gazebo的各种因素 xff0c 只想通过别人给的数据流去实时更改机器人在rviz中的位置 解决方案 首先 xff0c 先将原理弄清楚 在R
  • STM32+RTC实现时钟无法设置时间以及掉电时间清零的问题

    最近在实现一个万年历的功能 xff0c 其中遇到了无法设置时间以及掉电时间清零的问题 h文件代码如下 xff1a span class token macro property span class token directive keyw
  • contains an incorrect path解决方法

    在移植UCOS 时出现如下报警 在确认头文件路径添加无误的情况下 xff0c 发现是因为文件名的UCOS 这个3不应用罗马数字 xff0c 用字母I代替 xff0c 改为UCOSIII并重新添加文件后错误消失
  • 理论 - 半波偶极子天线原理与计算

    概述 半波偶极子天线是一种结构简单的基本线天线 xff0c 也是一种经典的 迄今为止使用最广泛的天线之一 半波偶极子天线由两根直径和长度都相等的直导线组成 xff0c 每根导线的长度为1 4个工作波长 导线的直径远小于工作波长 xff0c
  • HFSS - 半波偶极子天线的设计与仿真

    一 理论计算 原理及理论计算部分可以看我上一篇文章理论 半波偶极子天线原理与计算 二 模型创建 1 模型概图如下 2 变量参数 变量意义变量名变量值 单位 mm 工作波长wavelength100天线总长度length0 48 x wave
  • STM32关于驱动段码屏显示

    本篇文章主要记录一下我在工作中用STM32单片机驱动段码屏显示内容 xff0c 不讲解具体的驱动原理 xff0c 只是单纯记录如何编写驱动屏幕图标显示的代码 xff0c 以便我日后查看 单片机 xff1a STM32L152RCT6A ID
  • HFSS - 同轴馈电矩形微带天线设计与仿真

    一 设计指标 中心频率 xff1a 2 45GHz介质板相对介电常数 xff1a 4 4介质板厚度 xff1a 1 6mm馈电方式 xff1a 50 Omega 同轴线馈电 二 同轴馈电微带天线设计 同轴线馈电的矩形微带天线结构如下图所示
  • HFSS - 圆极化矩形微带天线设计与仿真

    xff08 这个仿真了好久啊啊啊啊啊 xff0c 搞得这么晚 xff0c 哭辽 xff09 一 设计指标 设计一个右旋圆极化GPS天线 中心频率 xff1a 1 575GHz轴比 xff1a 中心频率处圆极化波小于2dB馈电方式 xff1a
  • HFSS - 倒F天线的设计与仿真

    一 倒F天线概述 倒F天线是单极子天线的一种变形结构 xff0c 其衍变发展的过程可以看成是从1 4波长单极子天线到倒L天线再到倒F天线的过程 xff0c 如下图所示 首先 xff0c 将单极子天线进行90 弯曲 xff0c 就能得到倒L天

随机推荐

  • 理论 - 平面倒F天线(PIFA)

    一 概述 PIFA Planar Inverted F shaped Antenna 天线即平面倒F形天线 xff0c 因为整个天线的形状像个倒写的英文字母F而得名 多年来 xff0c 多数手机天线都一直沿用这种传统的PIFA天线设计方案
  • HFSS - GSM 900 单频PIFA天线的设计与仿真

    一 设计指标 中心频率 xff1a 920MHz回波损耗带宽 xff1a 大于80MHz 各个参数变量如下表 变量意义变量名变量初始值 xff08 单位 xff1a mm xff09 天线高度H10辐射金属片长度L155辐射金属片宽度W13
  • HFSS - GSM 900 和 DCS 1800 双频PIFA天线的设计与仿真

    一 概述 PIFA天线可以采用在辐射金属片上开槽的技术来实现双频和多频段工作 采用如下图所示的U形开槽方案来实现PIFA天线在GSM 900和DCS 1800 两个频段上的工作 其中 xff0c 在GSM 900频段 xff0c 信号上行频
  • HFSS - 矩形口径喇叭天线的设计与仿真

    一 理论 喇叭天线是一种应用广 泛的微波天线 xff0c 其优点是结构简单 xff0c 频带宽 xff0c 功率容量大 xff0c 调整与使用方便 合理地选择喇叭尺寸 xff0c 可以获得良好的辐射特性 相当尖锐的主瓣 较小副瓣和较高的增益
  • 【record】1、FS-I6设置与对码

    官方说明文档 先贴一张官方的说明文档 xff1b 注意的点 xff1a 遥控器设置中 xff0c 按住CANCEL保存 xff1b 遥控器设置 xff08 1 xff09 恢复出厂设置 这里我对FS i6直接恢复出厂设置 xff0c 当然可
  • keil无法观察局部变量

    keil观察局部变量的时候 xff0c 发现总是显示not in scope xff0c 是优化级别过高 xff0c 降低优化级别即可
  • rplidar连接计算机显示process has died.....解决方法

    检测是否打开roscore可能是串口未赋予权限 xff0c 解决方法 xff1a sudo chmod 777 dev ttyUSB0
  • ST-LINK/V2:cannot reset target shutting down debug session

    使用 ST LINK V2 为 STM32 下载程序时 xff0c 总是不成功 xff0c 并弹出如下对话框 xff1a 解决方法 xff1a 打开 MDK 的安装目录下的 STLink xff0c 如下是我的路径 xff1a D mdk5
  • C++声明与定义以及初始化,头文件的书写规范

    初始化 初始化 xff1a 当一个对象被创建的同时获得了特定的值 1 初始化不是赋值 xff0c 初始化的含义是创建变量时赋予其一个初始值 xff0c 而赋值的含义是把对象的当前值擦除 xff0c 而以一个新值代替 xff1b 2 默认初始
  • 【C++】Cmake使用教程(看这一篇就够了)

    文章目录 引言一 环境搭建二 简单入门2 1 项目结构2 2 示例源码2 3 运行查看 三 编译多个源文件3 1 在同一个目录下有多个源文件3 1 1 简单版本3 1 1 1 项目结构3 1 1 2 示例代码3 1 1 3 运行查看 3 1
  • 编码

    UTF 8 UTF 8以字节为单位对Unicode进行编码 从Unicode到UTF 8的编码方式如下 xff1a Unicode编码 十六进制 UTF 8 字节流 二进制 000000 00007F0xxxxxxx000080 0007F
  • tensorflow-gpu1.14 + Win10 + CUDA10.0 + CUDNN7.5.0 + Python3.6 + VS2015安装

    最近学习深度学习 xff0c 在配置环境中的过程中遇到很多问题 xff0c 在这进行总结 xff0c 希望对大家有帮助 一 整个软件安装配置过程 xff0c 很多博客写的很详细 xff0c 附上链接 xff1b https blog csd
  • VS2015下配置海康威视SDK

    1网络摄像头可以在官网下载到SDK开发包 xff0c 进入海康威视官网 xff0c 选择何时的版本 xff0c 点击下载 https www hikvision com cn download 61 html 下载完成进行解压 解压完成 x
  • 如何提升串口响应速度

    最近负责编写公司的工厂模式指令集 xff0c 碰到了一些代码之外的问题 xff0c 困扰了我很久 因为综测那边对串口响应速度的要求很高 xff0c 要求从上位机下发指令开始到上位机接收到完整回复 xff0c 整个过程的响应速度要达到几十个m
  • rv1126 SDK简单编译

    rv1126 SDK简单编译 在工程的根目录下执行命令 source envsetup sh 会出现很多选项 xff0c 选择 rockchip rv1126 rv1109 spi nand 这个选项 xff0c 输入93 我的FLASH是
  • socket套接字编程之UDP协议封装

    1 UDP 协议特点 xff1a 传输层协议 无连接 不可靠传输 面向数据报 2 封装之前先将清楚几个要点 xff1a 2 1网络字节序 xff1a 注意设备的大小端 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出 接收主机把
  • C语言 使用调用函数的方法,将两个字符串连接起来

    因本人才疏学浅 xff0c 见识浅薄 xff0c 有不当之处望指正 xff0c 谢谢 xff01 这次用调用函数的方法 xff0c 连接两个字符串 在被调函数中可以说明形参数组的大小 xff0c 也可以不说明形参数组的大小 例如cat st
  • STL容器特点对比

    1 分类 序列式容器 xff08 sequential container xff09 vector list array deque forward list关联式容器 xff08 associative container xff09
  • 【RT-Thread】PIN 设备源码分析

    目录 1 获取引脚编号2 设置引脚模式3 设置引脚电平4 绑定 PIN 中断回调函数5 使能引脚中断6 总结7 PIN 设备使用示例 关于 RT Thread 的 PIN 设备驱动应用层面的介绍可以直接参考 RT Thread 的官网 xf
  • 基于VSCode的Linux内核调试环境搭建

    1 安装开发工具 span class token function sudo span span class token function apt span span class token function install span b