Ubuntu 18.04使用Qemu和GDB搭建运行内核的环境

news2024/11/18 17:52:55

安装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 rt
 Library crypt is not needed, excluding it
 Library m is needed, can't exclude it (yet)
 Library resolv is needed, can't exclude it (yet)
 Library rt is not needed, excluding it
 Library 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新建两个目录procsys
在这里插入图片描述

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 /tmp
 
mdev -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/sorttable
  HOSTCC  scripts/asn1_compiler
  HOSTCC  scripts/sign-file
  HOSTCC  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 device
 MODULE_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测试里边的知识了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue,nvue,uniapp,到底是什么

vue,nvue,uniapp,到底是什么&#xff1f; 发展猜想&#xff1a; 开发移动端软件&#xff0c;一般是控件逻辑&#xff0c;可拖动控件android studio都给你设计好了。 开发web页面时&#xff0c;用vue&#xff0c;vue是前端框架。主要是终端设备通过浏览器进行访问&#xff08…

第三节JavaScript 函数、作用域、事件、字符串、运算符、比较

一、JavaScript的作用域 1、变量在函数内声明&#xff0c;变量为局部变量&#xff0c;具有局部的作用域。 局部变量&#xff1a;只能在函数内部访问 示例&#xff1a; // 此处不能调用 carName 变量 function myFunction() { var carName "Volvo"; // 函数内可…

Unirest-Java:Java发起GET、POST、PUT、DELETE、文件上传,文件下载工具类介绍

一、简介 Unirest-Java是一个轻量级的HTTP客户端库&#xff0c;用于在Java应用程序中发送HTTP请求。 它提供了简单易用的API&#xff0c;可以方便地处理GET、POST、PUT、DELETE等HTTP方法。 Unirest-Java支持异步和同步请求&#xff0c;可以轻松地与JSON、XML等数据格式进行…

MongoDB的条件操作符

本文主要介绍MongoDB的条件操作符。 目录 MongoDB条件操作符1.比较操作符2.逻辑操作符3.元素操作符4.数组操作符5.文本搜索操作符 MongoDB条件操作符 MongoDB的条件操作符主要分为比较操作符、逻辑操作符、元素操作符、数组操作符、文本搜索操作符等几种类型。 以下是这些操作…

使用医学数据集MIMIC,常见的问题记录

目录 MIMIC数据库安装及数据导入教程1.postgresql安装第一步&#xff1a;error running考虑到是不是不同的sql的冲突从报错信息出发重启之后可以安装了 2.打开navicate153.7z 不是内部或外部命令&#xff0c;也不是可运行的程序4.在postgreSQL中输入**\i xxx**命令后遇到提示pe…

idea__SpringBoot微服务06——静态资源(新依赖),首页和图标定制

静态资源 一、静态资源二、首页和图标定制————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;谢谢~~ 新依赖&#xff1a;jquery的 <dependency><groupId>org.webjars&…

阿里云SLS采集jvm日志

一、背景 java应用部署在阿里云的k8s容器里&#xff0c;采集其日志的需求则是一个不可缺少的。而不同公司的jvm日志会存在很大的差异&#xff0c;所以本文仅以我的实际情况作一个示例&#xff0c;仅供有需要采集jvm日志的同学们一个参考。 我们打印的Jvm日志格式见下&#xf…

基于JAVA+SpringBoot+Vue的前后端分离的医院信息智能化HIS系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着科技的不断发展&a…

Gson 自动生成适配器插件

在json解析方面 我们常见有下面几方面困扰 1. moshi code-gen能自动生成适配器,序列化效率比gson快,但是自定义程度不如gson,能java kotlin共存 且解决了默认值的问题 2.gson api 强大自由,但是 第一次gson的反射缓存比较慢,而且生成对象都是反射,除非主动注册com.google.gson…

maven下载安装与配置

文章目录 1. Maven下载2. 配置settings.xml2.1 指定Maven的本地仓库2.2 配置阿里云提供的镜像仓库2.3 配置 Maven 工程的基础 JDK 版本 3. 配置环境变量3.1 检查 JAVA_HOME 配置是否正确3.2 配置 MAVEN_HOME3.3 配置PATH3.4 验证 1. Maven下载 【Maven官网地址】 【Maven下载…

消息队列zookeeper集群+kafka

消息队列zookeeper集群kafka kafka 3.0之前依赖于zookpeeper zookeeper开源分布式架构&#xff0c;提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式设计的分布式服务管理架构 存储和管理数据。分布式节点的服务结束观察者的注册&#xff0c;一旦分布式节点…

在idea中使用maven创建dynamic web project

1、先创建一个empty project 2、添加一个module , 核心是选择maven archetype webapp, 这个是maven提供的创建web工程的模版。 3、添加完等自动安装好即可 4、目录可能不完整 右键src---->点击New---->点击Directory &#xff08;注意&#xff1a;这是笔者所缺失的结…

汽车4S店中的“S”指的什么?柯桥生活英语学习

很多人买车都会去4S店选购 因为比较有保障 服务又很到位 可你有没有想过 这里的“4S”是什么意思 其实&#xff0c;这几个单词大家都认识 今天我们就来聊一下 与“4S店”相关的英文表达 01 “4S店”的英语表达 其实&#xff0c;4S店的全称是&#xff1a;汽车销售服务4S店…

20231207_最新已测_Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066

以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…

GO面试题系列

1.GO有哪些关键字 2.GO有哪些数据类型 3.Go方法与函数的区别 在Go语言中&#xff0c;方法和函数是两个不同的概念&#xff0c;尽管它们在某些方面有相似之处。下面是它们的主要区别&#xff1a; 定义位置&#xff1a; 函数&#xff1a; 函数是独立声明的&#xff0c;它们不…

vulnhub靶机Phineas

下载地址&#xff1a;https://download.vulnhub.com/phineas/Phineas.ova 主机发现 目标154 端口扫描 端口服务扫描 漏洞扫描 直接访问web 初始页面&#xff0c;我就不信没东西&#xff0c;开扫&#xff01; 访问一下 访问fuel时候发现url变化了 只能进行拼接url那就试一下凭借…

【C/C++笔试练习】多态的概念、虚函数的概念、虚表地址、派生类的虚函数、虚函数的访问、指针引用、动态多态、完全数计算、扑克牌大小

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;多态的概念&#xff08;2&#xff09;虚函数的概念&#xff08;3&#xff09;虚表地址&#xff08;4&#xff09;派生类的虚函数&#xff08;5&#xff09;虚函数的访问&#xff08;6&#xff09;分析程序&#xff08;7&…

树莓派CSI摄像头在新系统(23年12月)中的不用设置了,没有开关,也没有raspistill

网上都是老信息&#xff0c;用的raspistill命令&#xff0c;至少新系统没有这个东西了&#xff0c;也不会在sudo raspi-config里面也没有摄像头的开关了。 ls /dev/video* 能看到摄像头video0&#xff0c;但是vcgencmd get_camera supported0&#xff0c; detected0&#xff0…

IEEE期刊论文模板

一、模板下载 1、登陆IEEE作者中心Author Center 地址&#xff1a;Publish with IEEE Journals - IEEE Author Center Journals 2、点击“Download a template” 3、在弹出的模板下载页面点击IEEE模板选择器“IEEE Template Selector” 4、在弹出的模板选择器页面点击“Tran…

积分商城小程序源码

商城小程序核心功能模块商城、积分商城、二级分销。php开发语言&#xff0c;有成品源码&#xff0c;支持二开&#xff0c;定制开发。 一 商城 商品分类&#xff0c;在线选择规格&#xff0c;加入购物车&#xff0c;在线下单支付&#xff0c;管理我的订单。 二 积分商城 在商…