Ubuntu 18.04使用Qemu和GDB搭建运行内核的环境
安装busybox
参考博客:
使用GDB+QEMU调试Linux内核环境搭建
一文教你如何使用GDB+Qemu调试Linux内核
ubuntu22.04搭建qemu环境测试内核
交叉编译busybox
编译busybox出现Library m is needed, can’t exclude it (yet)的解释
S3C2440 制作最新busybox文件系统
https://www.busybox.net/是官网。
sudo wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
下载源代码。
sudo tar jxvf busybox-1.36.1.tar.bz2
解压源文件。
cd busybox-1.36.1
进入源代码目录里边。
执行make menuconfig
发现报错:
Command 'make' not found, but can be installed with:sudo apt install make
sudo apt install make-guile
使用sudo apt install make
安装make,发现报错如下:
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
使用sudo rm -rf /var/lib/dpkg/lock-frontend
删除lock-frontend
,然后再使用sudo apt install make
安装make
,发现正常安装。
sudo apt install -y gcc g++ libncurses5-dev
安装依赖包。
安装完成如下图:
sudo make menuconfig
进行配置。
使用上下键可以选择,选择“Setting”之后,按回车键。
进入到下一个选择时,使用上下键找一下“Build static binary (no shared libs)
”。
然后按一下y就是选择上了。
按一下Esc键就可以退回到上一层。
按一下Esc键就可以退回到保存界面。
选择“yes”按一下Enter键,就退到原来的命令行下。
sudo make -j2
进行编译。
完成之后提示如下:
Static linking against glibc, can't use --gc-sections
Trying libraries: crypt m resolv rtLibrary crypt is not needed, excluding itLibrary m is needed, can't exclude it (yet)Library resolv is needed, can't exclude it (yet)Library rt is not needed, excluding itLibrary m is needed, can't exclude it (yet)Library resolv is needed, can't exclude it (yet)
Final link with: m resolv
sudo make install
进行安装。
完成之后,提示:
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
启动内存文件系统制作
cd _install
进入到特定目录里边。
sudo mkdir proc sys
新建两个目录proc
和sys
sudo vim init
把下边的内容写进去:
#!/bin/sh
echo "{==DBG==} INIT SCRIPT"
mkdir /tmp
mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug
mount -t tmpfs none /tmpmdev -s
echo -e "{==DBG==} Boot took $(cut -d' ' -f1 /proc/uptime) seconds"# normal user
setsid /bin/cttyhack setuidgid 1000 /bin/sh
sudo chmod +x init
为当前用户添加上可执行的权限。
sudo chmod -R 777 .
给当前目录中所有的文件配上读写执行的权限。
sudo find . | sudo cpio -o --format=newc > ./rootfs.img
生成rootfs.img
文件。
生成Linux内核
cd ~/
进入到home
目录里边。
sudo wget http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/v5.x/linux-5.19.tar.xz
下载源代码。
sudo tar xf linux-5.19.tar.xz
解压源代码,时间有点长,需要等待。
cd linux-5.19/
进入到源码里边。
sudo make menuconfig
,发现报错:
/bin/sh: 1: flex: not found
scripts/Makefile.host:9: recipe for target 'scripts/kconfig/lexer.lex.c' failed
make[1]: *** [scripts/kconfig/lexer.lex.c] Error 127
Makefile:629: recipe for target 'menuconfig' failed
make: *** [menuconfig] Error 2
sudo apt-get install -y flex bison
安装依赖包。
sudo make menuconfig
进行配置选择。
上下键可以进行选项寻找,按回车键可以进入,找到Kernel hacking
进入。
使用下键找到Compile-time checks and compiler options
,然后按回车键。
发现Provide GDB scripts for kernel debugging
已经默认选上了。
按两下Esc
按两下Esc
按两下Esc
选择yes按一下回车键。
grep CONFIG_DEBUG_INFO .config
验证一下,选择是否正确。
sudo sed -i 's/CONFIG_MODULE_SIG=y/CONFIG_MODULE_SIG=n/g' .config # 把 CONFIG_MODULE_SIG=y 替换成 CONFIG_MODULE_SIG=n
sudo sed -i 's/CONFIG_MODULE_SIG_ALL=y/CONFIG_MODULE_SIG_ALL=n/g' .config
sudo sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYS="debian\/canonical-certs.pem"/CONFIG_SYSTEM_TRUSTED_KEYS=""/g' .config
sudo sed -i 's/CONFIG_SYSTEM_REVOCATION_KEYS="debian\/canonical-revoked-certs.pem"/CONFIG_SYSTEM_REVOCATION_KEYS=""/g' .config
sudo sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYRING=y/CONFIG_SYSTEM_TRUSTED_KEYRING=n/g' .config # 把 CONFIG_SYSTEM_TRUSTED_KEYRING=y 替换成 CONFIG_SYSTEM_TRUSTED_KEYRING=n
cat .config | grep "CONFIG_SYSTEM_TRUSTED_KEYRING=n" # 看一下 CONFIG_SYSTEM_TRUSTED_KEYRING 相关字符串是否成功替换。
nproc
看一下当前系统核数。
sudo make -j2
开始编译
发现报错:
/home/ubuntu1804/linux-5.19/tools/objtool/include/objtool/elf.h:10:10: fatal err or: gelf.h: No such file or directory#include <gelf.h>^~~~~~~~
compilation terminated.
/home/ubuntu1804/linux-5.19/tools/build/Makefile.build:96: recipe for target '/h ome/ubuntu1804/linux-5.19/tools/objtool/arch/x86/special.o' failed
make[4]: *** [/home/ubuntu1804/linux-5.19/tools/objtool/arch/x86/special.o] Erro r 1
/home/ubuntu1804/linux-5.19/tools/build/Makefile.build:139: recipe for target 'a rch/x86' failed
make[3]: *** [arch/x86] Error 2
Makefile:53: recipe for target '/home/ubuntu1804/linux-5.19/tools/objtool/objtoo l-in.o' failed
make[2]: *** [/home/ubuntu1804/linux-5.19/tools/objtool/objtool-in.o] Error 2
Makefile:73: recipe for target 'objtool' failed
make[1]: *** [objtool] Error 2
Makefile:1343: recipe for target 'tools/objtool' failed
make: *** [tools/objtool] Error 2
make: *** Waiting for unfinished jobs....HOSTCC scripts/sorttableHOSTCC scripts/asn1_compilerHOSTCC scripts/sign-fileHOSTCC scripts/insert-sys-cert
scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or dire ctory#include <openssl/opensslv.h>^~~~~~~~~~~~~~~~~~~~
compilation terminated.
sudo apt-get install -y apt-file
安装apt-file
。
sudo apt-file search gelf.h
,提示 The cache is empty. You need to run "apt update" first.
,然后执行sudo apt update
。
sudo apt-file search gelf.h
找了许久,才找到。
我看还不如直接上网搜索比较快,sudo apt-get install -y libelf-dev libssl-dev
安装依赖包。
sudo make -j2
编译
报错如下:
make[3]: *** [drivers/net/bonding/bond_3ad.o] Error 1
make[3]: *** Waiting for unfinished jobs....
drivers/net/bonding/bond_main.c:6373:1: fatal error: error writing to /tmp/ccqoYlgl.s: No space left on deviceMODULE_AUTHOR("Thomas Davis, tadavis@lbl.gov and many others");^~~~~~~~~~~~~
compilation terminated.
scripts/Makefile.build:249: recipe for target 'drivers/net/bonding/bond_main.o' failed
make[3]: *** [drivers/net/bonding/bond_main.o] Error 1
scripts/Makefile.build:466: recipe for target 'drivers/net/bonding' failed
make[2]: *** [drivers/net/bonding] Error 2
scripts/Makefile.build:466: recipe for target 'drivers/net' failed
make[1]: *** [drivers/net] Error 2
Makefile:1843: recipe for target 'drivers' failed
make: *** [drivers] Error 2
sudo rm -rf /tmp
删除/tmp
里边的内容。
然后再次执行sudo make -j2
编译,这次发现是整个Ubuntu系统磁盘满了,开机之后再也无法进入Ubuntu了,所以只能进入到grub中recover模式删除原先编译好的文件,才能进入到系统。然后使用vmware扩展磁盘大小,然后再进行挂载。
sudo make menuconfig
进行配置选择。
已经默认选择上了。
重新配置一些参数。
sudo sed -i 's/CONFIG_MODULE_SIG=y/CONFIG_MODULE_SIG=n/g' .config # 把 CONFIG_MODULE_SIG=y 替换成 CONFIG_MODULE_SIG=n
sudo sed -i 's/CONFIG_MODULE_SIG_ALL=y/CONFIG_MODULE_SIG_ALL=n/g' .config
sudo sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYS="debian\/canonical-certs.pem"/CONFIG_SYSTEM_TRUSTED_KEYS=""/g' .config
sudo sed -i 's/CONFIG_SYSTEM_REVOCATION_KEYS="debian\/canonical-revoked-certs.pem"/CONFIG_SYSTEM_REVOCATION_KEYS=""/g' .config
sudo sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYRING=y/CONFIG_SYSTEM_TRUSTED_KEYRING=n/g' .config # 把 CONFIG_SYSTEM_TRUSTED_KEYRING=y 替换成 CONFIG_SYSTEM_TRUSTED_KEYRING=n
cat .config | grep "CONFIG_SYSTEM_TRUSTED_KEYRING=n" # 看一下 CONFIG_SYSTEM_TRUSTED_KEYRING 相关字符串是否成功替换。
sudo make -j2
发现报错如下:
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
Makefile:1164: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1
sudo apt-get install -y dwarves
安装dwarves
。
sudo make -j2
再次执行。
完成之后如下:
ls -hl vmlinux
可以看到生成的vmlinux
文件信息。
ls -hl ./arch/x86/boot/bzImage
可以看到生成的bzImage
文件信息。
安装Qmeu并开始调试
sudo apt install -y qemu qemu-utils qemu-kvm virt-manager libvirt-daemon-system libvirt-clients bridge-utils
安装依赖包。
sudo cp ~/busybox-1.36.1/_install/rootfs.img /mountsda4/linux-5.19/
将rootfs.img
移动到源代码目录下。
sudo qemu-system-x86_64 -kernel ./arch/x86/boot/bzImage -initrd ./rootfs.img -append "nokaslr console=ttyS0" -s -S -nographic
,可以看到停留在启动处。
再打开一个命令行,称之为B终端
,cd /mountsda4/linux-5.19
进入到vmlinux
文件所在的目录下,然后执行sudo gdb vmlinux
,就可以进入到gdb
测试界面。
之后输入target remote localhost:1234
连接上测试端口。
之后的测试就需要使用gdb
测试里边的知识了。
相关文章:

Ubuntu 18.04使用Qemu和GDB搭建运行内核的环境
安装busybox 参考博客: 使用GDBQEMU调试Linux内核环境搭建 一文教你如何使用GDBQemu调试Linux内核 ubuntu22.04搭建qemu环境测试内核 交叉编译busybox 编译busybox出现Library m is needed, can’t exclude it (yet)的解释 S3C2440 制作最新busybox文件系统 https:…...
GEE——利用Landsat系列数据集进行1984-2023EVI指数趋势分析
简介: 利用Landsat系列数据集进行1984-2023EVI指数趋势分析其主要目的是进行长时序的分析,这里我们选用EVI指数,然后进行了4个月的分析,查看其最后的线性趋势以及分布状况。 EVI指数: EVI指数(Enhanced Vegetation Index,增强型植被指数)是一种反映植被生长状态的遥…...

JAVA安全之Spring参数绑定漏洞CVE-2022-22965
前言 在介绍这个漏洞前,介绍下在spring下的参数绑定 在Spring框架中,参数绑定是一种常见的操作,用于将HTTP请求的参数值绑定到Controller方法的参数上。下面是一些示例,展示了如何在Spring中进行参数绑定: 示例1&am…...

辨析旅行商问题(TSP)与车辆路径问题(VRP)
目录 前言旅行商问题 (TSP)问题介绍数学模型符号定义问题输入约束条件目标函数问题输出 解的空间解空间大小计算解释 车辆路径问题 (VRP)问题介绍TSP到VRP的过渡数学模型符号定义问题输入约束条件优化目标问题输出 解空间特殊情况一般情况 TSP 与 VRP 对比 前言 计划是通过本文…...
2024年JAVA招聘行情如何?
大家都在说Java求职不好找,是真的吗?我们来看看数据。 数据支持:根据TIOBE 5月份的编程语言排行榜,Java仍然是前三名之一。这意味着,Java在开发领域仍然占据重要地位。 而在中国的IT市场中,Java仍然是主要…...

【合集】SpringBoot——Spring,SpringBoot,SpringCloud相关的博客文章合集
前言 本篇博客是spring相关的博客文章合集,内容涵盖Spring,SpringBoot,SpringCloud相关的知识,包括了基础的内容,比如核心容器,springMVC,Data Access;也包括Spring进阶的相关知识&…...
yolov5 获取漏检图片脚本
yolov5 获取漏检图片脚本 获取样本分数在0.05到0.38直接的样本。 # YOLOv5 by Ultralytics, GPL-3.0 licenseimport argparse import json import os import sys import time from pathlib import Pathimport cv2 import numpy as np import torch import torch.backends.cud…...

Unity之OpenXR+XR Interaction Toolkit接入微软VR设备Windows Mixed Reality
前言 Windows Mixed Reality 是 Microsoft 用于增强和虚拟现实体验的VR设备,如下图所示: 在国内,它的使用率很低,一把都是国外使用,所以适配起来是相当费劲。 这台VR设备只能用于串流Windows,启动后,会自动连接Window的Mixed Reality程序,然后打开微软的增强现实门户…...

【小聆送书第二期】人工智能时代AIGC重塑教育
🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋正文📝活动参与规则 参与活动方式文末详见。 📋正文 AI正迅猛地…...
中国移动公网IP申请过程
一、动机 由于从事互联网行业10年,一直从事移动端(前端)开发工作,未曾深入了解过后端技术,以至于工作10年也不算进入互联网的门。 所以准备在自己家用设备上搭建各种场景的服务器(云服务对个人来说成本偏…...

动态获取绝对路径
在Python中,可以使用 os模块 来获取当前工作目录的路径,并使用 os.path.join()函数 将相对路径与当前工作目录结合起来,形成一个动态获取的绝对路径 以下是一个简单的例子: import os# 获取当前工作目录的路径 current_director…...

pytorch中的归一化:BatchNorm、LayerNorm 和 GroupNorm
1 归一化概述 训练深度神经网络是一项具有挑战性的任务。 多年来,研究人员提出了不同的方法来加速和稳定学习过程。 归一化是一种被证明在这方面非常有效的技术。 1.1 为什么要归一化 数据的归一化操作是数据处理的一项基础性工作,在一些实际问题中&am…...
RocketMq源码分析(九)--顺序消息
文章目录 一、顺序消息二、顺序消息消费过程1、消息队列负载2、消息拉取3、消息消费4、消息进度存储 三、总结 一、顺序消息 RocketMq在同一个队列中可以保证消息被顺序消费,所以如果要做到消息顺序消费,可以将消费主题(topic)设置…...

Windows下nginx的启动,重启,关闭等功能bat脚本
echo off rem 提供Windows下nginx的启动,重启,关闭功能echo begincls ::ngxin 所在的盘符 set NGINX_PATHG:::nginx 所在目录 set NGINX_DIRG:\projects\nginx-1.24.0\ color 0a TITLE Nginx 管理程序增强版CLSecho. echo. ** Nginx 管理程序 *** echo.…...
Python 字典:dic = {} 和 dic = defaultdict(list)之间的区别
d defaultdict(list) 和 d {} 在Python中代表了两种不同类型的字典初始化方式,它们之间有几个关键的区别: 1、类型 d defaultdict(list):这里使用的是 collections 模块中的 defaultdict 类。它是一个字典的子类,提供了一个默…...

绘图 Seaborn 10个示例
绘图 Seaborn 是什么安装使用显示中文及负号散点图箱线图小提琴图堆叠柱状图分面绘图分类散点图热力图成对关系图线图直方图 是什么 Seaborn 是一个Python数据可视化库,它基于Matplotlib。Seaborn提供了高级的绘图接口,可以用来绘制各种统计图形…...

airserver mac 7.27官方破解版2024最新安装激活图文教程
airserver mac 7.27官方破解版是一款好用的airplay投屏工具,可以轻松将ios荧幕镜像(airplay)至mac上,在mac平台上实现视频、音频、幻灯片等文件资源的接收及投放演示操作,解决iphone或ipad的屏幕录像问题,满…...

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑移动式储能调度的配电网灾后多源协同孤岛运行策略》
这篇文章的标题表明研究的主题是在配电网发生灾害后,采用一种策略来实现多源协同孤岛运行,并在这个过程中特别考虑了移动式储能的调度。 让我们逐步解读标题的关键词: 考虑移动式储能调度: 文章关注的焦点之一是移动式储能系统的…...
Spring Boot 优雅地处理重复请求
前 言 对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。 重复的场…...
TailwindCSS 多主题色配置
TailwindCSS 多主题色配置 现在大多数网站都支持主题色变换,比如切换深色模式。那么我们该如何进行主题色配置呢? tailwind dark tailwind 包含一个 dark变体,当启用深色模式时,可以为网站设置不同样式 <div class"bg-whi…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...