一、Qemu调试内核

一、安装Qemu

1、安装Qemu

sudo apt install qemu-system-arm

2、测试版本

qemu-system-arrch -version

二、编译内核

1、下载内核

https://mirrors.edge.kernel.org/pub/linux/kernel

2、编译内核

(1)配置架构和编译器

ARCH		?= $(SUBARCH)ARCH			:= arm64
CROSS_COMPILE	:= aarch64-linux-gnu-

(2)选择默认配置文件

cp arch/arm64/configs/defconfig ./.config

(3)配置内核

Kernel Features  ---> [ ] Randomize the address of the kernel image  //取消内核内存地址随机化,不同内核通过搜索RANDOMIZE_BASE查找	      

(4)编译内核(-j 参数表示使用6个线程编译)

make Image -j6

三、下载busybox

1、下载busybox

https://busybox.net/downloads/

2、配置架构和编译器

ARCH		?= $(SUBARCH)ARCH			:= arm64
CROSS_COMPILE	:= aarch64-linux-gnu-

4、配置busbox

Settings  ---> 
[*] Build static binary (no shared libs)    //静态编译
[*] Build with debug information       //可选,带调试信息,方便后续调试

5、编译busybox

make install 将编译内容安装在当前目录_install下

make
make install 

四、生成跟文件系统镜像

1、生成镜像

qemu-img create rootfs.img 512m
mkfs.ext4 rootfs.img

2、将busybox移植进入镜像

mkdir rootfs
sudo mount rootfs.img rootfssudo cp -rf _install/*  rootfs
sudo mkdir proc sys dev etc etc/init.d
sudo vim etc/init.d/rcS<etc/init.d/rcS>
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debugsudo chmod +x  etc/init.d/rcSsudo umount rootfs

五、编写启动脚本

#! /bin/shqemu-system-aarch64 \-machine virt,virtualization=true,gic-version=3 \-nographic \-m size=1024M \-cpu cortex-a72 \-smp 2 \-kernel Image \-drive format=raw,file=rootfs.img \-append "root=/dev/vda rw"

备注

参考:qemu搭建arm64 linux kernel环境
本人编译结果:qemu调试内核(aarch64)

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

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

相关文章

【java计算机毕设】学生项目竞赛管理系统 MySQL ssm JSP maven小组项目设计代码源码+万字文档

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】学生项目竞赛管理系统 MySQL ssm JSP maven小组项目设计代码源码万字文档 2项目介绍 系统功能&#xff1a; 学生项目竞赛管理系统包括管理员、用户、教师三种角色。 管理员功能包括个人中心模块用于修改个…

ArcGIS Pro SDK (八)地理数据库 5 编辑

ArcGIS Pro SDK &#xff08;八&#xff09;地理数据库 5 编辑 文章目录 ArcGIS Pro SDK &#xff08;八&#xff09;地理数据库 5 编辑1 创建行2 创建要素3 修改行4 修改要素5 将值写入 Guid 列6 删除行/要素7 添加附件8 更新附件9 删除附件10 写入 Blob 字段11 读取 Blob 字段…

Perl高手秘籍:自定义操作符的炼金术

&#x1f31f; Perl高手秘籍&#xff1a;自定义操作符的炼金术 Perl是一种极其灵活的编程语言&#xff0c;它不仅支持内置的操作符&#xff0c;还允许开发者定义自己的操作符。自定义操作符可以极大地增强Perl代码的表达力和功能性。本文将深入探讨如何在Perl中定义自定义操作…

一位互联网公司项目经理繁忙的一天

早晨&#xff1a;准备与计划 7:00 AM - 起床与准备 项目经理起床后&#xff0c;快速洗漱并享用早餐。之后花几分钟查看手机上的邮件和消息&#xff0c;确保没有紧急事务需要立即处理。 7:30 AM - 通勤时间 前往公司。在通勤途中&#xff0c;通过手机或平板电脑查看当天的会议…

Java多线程面试题

目录 一.线程和进程的区别 二.保证线程安全的手段 三.创建多线程的方式 四.线程池的讲解 五.volatile和synchronzied的区别 六.synchronized 和 Lock的区别 七.产生死锁的条件 八.Java当中常见的锁策略 本专栏全是博主自己收集的面试题&#xff0c;仅可参考…

C基础day8

一、思维导图 二、课后习题 #include<myhead.h> #define Max_Stu 100 //函数声明 //学生信息录入函数 void Enter_stu(int *Num_Stu,char Stu_name[][50],int Stu_score[]); //查看学生信息 void Print_stu(int Num_Stu,char Stu_name[][50],int Stu_score[]); //求出成绩…

运维锅总详解进程、内核线程、用户态线程和协程

I/O 密集型应用、计算密集型应用应该用什么实现&#xff1f;进程、内核线程、用户态线程、协程它们的原理和应用场景又是什么&#xff1f;如何组合它们才能让机器性能达到最优&#xff1f;它们的死锁和竞态又是什么&#xff1f;如何清晰地表示它们之间的关系&#xff1f;希望读…

红日靶场----(三)2.漏洞利用

上期的通过一句话木马实现对目标主机的持久后门 我使用的是蚁剑&#xff0c;蚁剑安装及使用参考&#xff1a; 下载地址&#xff1a; GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 安装即使用&#xff1a; 1. 快速入门 语雀 通过YXCMS的后台GETSHELL 利用…

Dify工作流中的变量聚合节点

一.定义 变量聚合节点&#xff08;原变量赋值节点&#xff09;负责整合不同分支的输出结果&#xff0c;确保无论哪个分支被执行&#xff0c;其结果都能通过一个统一的变量来引用和访问。这在多分支的情况下非常有用&#xff0c;可将不同分支下相同作用的变量映射为一个输出变量…

剖析自闭症孩子玩手的独特之处

自闭症孩子玩手的行为常常具有一些较为独特的特点。 重复性是一个显著的特征。他们可能会以一种几乎相同的方式、节奏和频率反复地摆弄自己的手&#xff0c;例如不停地握拳、张开&#xff0c;或者持续地旋转手腕。 动作的单调性也是常见的。玩手的方式可能较为单一&#xff0c;…

力扣 24两两交换链表中节点

画图 注意有头结点 注意判断时先判断cur->next ! nullptr,再判断cur->next->next ! nullptr 注意末尾返回dumyhead->next&#xff0c;用新建result指针来接并返回 class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode *dummyhead new List…

java线程介绍

Java 线程是指程序中的一个独立执行路径。使用多线程编程可以实现并发,从而使程序可以同时执行多个任务。Java 提供了强大的线程支持,使得开发多线程应用程序变得相对简单。以下是对 Java 线程的详细介绍,包括基本概念、创建和管理线程的方法,以及常见的使用场景和注意事项…

小技巧(更新中)

1.Pycharm使用小技巧pycharm的使用小技巧1---快速找到模块内的函数和类&#xff0c;快速定位查看的模块所在位置_pycharm怎么查找某个函数-CSDN博客 2. Python库之requirments Python库安装之requirements.txt, environment.yml_python requirements-CSDN博客 3.执行.sh脚本的…

【Spring Boot 异常处理】

文章目录 一、Spring Boot 中的异常处理概述1. 异常处理的重要性2. Spring Boot的默认异常处理机制 二、自定义异常处理1. 创建自定义异常类示例代码 2. 使用ExceptionHandler注解示例代码 3. ControllerAdvice的使用示例代码 三、进阶异常处理1. 异常处理与REST API使用RestCo…

vue中v-if与v-show的区别

在 Vue.js 中&#xff0c;v-if 和 v-show 都是用来控制元素显示与隐藏的指令&#xff0c;但它们之间有几个关键的区别&#xff1a; 直接上图 一. 条件渲染方式不同 v-if&#xff1a; 真正的条件渲染&#xff1a;v-if 指令会根据表达式的真假来销毁或重新创建 DOM 元素及其…

立体视差算法的研究

实时立体匹配模型 antabangun/coex (github.com) 立体视差数据集网站包含最新高分算法排行榜 antabangun/coex (github.com)

LeetCode 88.合并两个有序数组 C写法

LeetCode 88.合并两个有序数组 C写法 思路&#xff1a; ​ 由题nums1的长度为mn&#xff0c;则我们不需要开辟新的数组去存储元素。题目要求要有序合并&#xff0c;于是可以判断哪边数更大&#xff0c;将更大的数尾插在nums1中。 ​ 定义三个变量来控制下标&#xff0c;end1控…

AI绘画工具Stable Diffusion神级插件InstantID,AI换脸完美版!

随着AI绘画技术的不断迭代&#xff0c;AI换脸也日臻完美。 从路线上看&#xff0c;主要有两条路线&#xff0c;一是一张图换脸&#xff0c;优点是操作简便&#xff0c;缺点是换个姿势的时候&#xff0c;往往不太像&#xff0c;roop等插件是基于这个思路&#xff1b;二是炼制专…

第7章 Vite的测试和调试

测试和调试是软件开发过程中的重要环节。通过合理的测试策略和调试技巧&#xff0c;可以大幅提高代码的质量和稳定性。本章将介绍如何在 Vite 项目中进行单元测试、集成测试和端到端测试&#xff0c;以及常用的调试方法和工具。 1 单元测试 单元测试是对最小可测试单元进行验证…

UWB:FiRa Consortium UCI Generic Technical Specification v1.1.0(1)- UCI架构和通用数据包头

FiRa fine ranging 精确测距 为了UWB产业能够蓬勃发展&#xff0c;各个公司的产品必须互联互通&#xff0c;不然就是一盘散沙&#xff0c;成不了气候。于是成立了FiRa UWB联盟&#xff0c;相当于WiFi里面的WiFi alliance&#xff08;WiFi联盟&#xff09;&#xff0c;蓝牙里面…