qemu搭建arm64 linux kernel环境

一、环境准备

ubuntu 22.04

内核源码:linux-6.6.1 (直接上最新版) 下载链接:The Linux Kernel Archives

交叉编译工具链

sudo apt-get install gcc-12-aarch64-linux-gnu

具体能用的版本gcc-XX-arch64-linux-gnu可以按对应的ubuntu发行版本查找,当前22.04能用的最新版本是gcc-12;

或者可以到arm开发工具链上下载(自己下载的记得 PATH 变量中加一下路径)

Arm GNU Toolchain Downloads – Arm Developer

比如我现在用的gcc-13(不同的gcc版本支持的特性有差异,对编译结果优化也有差异):

 

qemu版本安装:

sudo apt-get install qemu-system-arm

还比较新

 

二、编译内核

解压linux内核后,先设置 config文件:

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- defconfig

CROSS_COMPILE这里要注意一点,和交叉编译工具链名字有关,看一下你自己的arm64 gcc的前缀(如果是apt install gcc-12-aarch64-linux-gnu 安装的,前缀可能是 aarch64-linux-gnu- )

 

上面使用的defconfig文件在目录arch/arm64/configs/defconfig, 如果需要增减kernel CONFIG 直接修改这个文件即可。

编译内核

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- Image -j8

 

这里的生成物 Image就是我们的kernel image, vmlinux是后面gdb调试使用的

编译module(ko): //这里并不必要,后续增加ko 时使用

make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- modules -j8

或者简洁点,导一个环境变量

export ARCH=arm64 export CROSS_COMPILE=aarch64-none-linux-gnu- make defconfig make all -j8

三、根文件系统制作

busybox配置编译

选择busybox, 比较便捷,下载链接:Index of /downloads

使用当前最新版本:busybox-1.36.1.tar.bz2

老套路:

export ARCH=arm64 export CROSS_COMPILE=aarch64-none-linux-gnu-

make menuconfig

Settings ---> [*] Build static binary (no shared libs) //静态编译

[*] Build with debug information //可选,带调试信息,方便后续调试

make; make install

busybox根目录下_install/ 就是根文件系统了

rootfs image制作

构建ext4 image

qemu-img create rootfs.img 512m

mkfs.ext4 rootfs.img

合并busybox 到img中

挂载rootfs.img到rootfs目录
mkdir rootfs
sudo mount rootfs.img rootfs

拷贝busybox的编译结果_install,同时创建关键目录(挂载虚拟文件系统需要)
sudo cp -rf _install/*  rootfs
sudo mkdir proc sys dev etc etc/init.d
sudo vim etc/init.d/rcS

rcS中的内容,主要是挂载常使用的虚拟文件系统
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug

然后给rcS增加执行权限
sudo chmod +x  etc/init.d/rcS

最后umount rootfs
sudo umount rootfs

四、qemu启动kernel

qemu启动时也需要配置一个启动脚本加载kernel和rootfs,前面使用的是ext4 img是为了后续做一些实验,保存结果,以及调试ext4时都可以使用,简单mount img 然后往里面拷贝测试程序也比较方便

将前面编译生成的Image (arch/arm64/boot/Image ; rootfs.img 拷贝到一个目录,创建一个shell 脚本,记得增加可执行权限), 脚本内容如下

qemu-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"

gic使用的是v3, 用的是arm64 A72 core (这里可以按自己需要去调整)

最后成功执行

水一篇操作手册,也是为了记录,虽然在不同的pc上搭建了很多次,有时也会犯重复错误

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python_ACM模式《剑指offer刷题》链表2

题目: 例如 面试tips: 询问有无时间复杂度或空间复杂度的限制。 思路: 本题的本质就是复杂链表的深拷贝 1. 暴力解法 → 第一次遍历原链表时构建一个复制了next的新链表,第二次遍历原链表,对每个原链表的节点的ran…

幻兽帕鲁服务器多少钱?4核16G支持32人在线吗?

4核16G服务器是幻兽帕鲁Palworld推荐的配置,阿里云和腾讯云均推出针对幻兽帕鲁的4核16G服务器,阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月,腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。云服务器吧yunfuwuqiba.com分享…

一、MongoDB、express的安装和基本使用

数据库【Sqlite3、MongoDB、Mysql】简介&小记 Sqlite3: SQLite3是一个轻量级的数据库系统,它被设计成嵌入式数据库。这意味着它是一个包含在应用程序中的数据库,而不是独立运行的系统服务。适用场景:如小型工具、游戏、本地…

node.js Redis SETNX命令实现分布式锁解决超卖/定时任务重复执行问题

Redis SETNX 命令背后的原理探究 当然,让我们通过一个简单的例子,使用 Redis CLI(命令行界面)来模拟获取锁和释放锁的过程。 在此示例中 获取锁: # 首先,设置锁密钥的唯一值和过期时间(秒) 127.0.0.1:6379> SET …

ChatGPT 官方中文页面上线

根据页面显示,OpenAI 现已推出 ChatGPT 的多语言功能 Alpha 版测试,允许用户选择不同语言的界面进行交互。 如下图所示,ChatGPT 会检测系统当前所使用的语言,并提示用户进行语言切换。 用户也可通过设置页面选择其他语言。目前&a…

企业转型:虚拟化对云计算的影响

虚拟化被认为是IT行业最优秀的技术之一。虚拟化提供的灵活性和效率,有助于企业根据不断变化的需求扩展其IT基础设施。虚拟化是云基础设施的基础,允许按需动态分配和管理计算资源。这种适应性对于满足现代企业的多样化需求至关重要,因为现代企…

深度学习之处理多维特征的输入

我们首先来看一个糖尿病的数据集: 在数据集中,我们称每一行叫做sample,表示一个样本,称每一列是feature,也就是特征在数据库里面这就是一个关系表,每一行叫做记录,每一列叫做字段。 每一个样本都…

山西电力市场日前价格预测【2024-01-29】

日前价格预测 预测说明: 如上图所示,预测明日(2024-01-29)山西电力市场全天平均日前电价为279.99元/MWh。其中,最高日前电价为397.38元/MWh,预计出现在07:45。最低日前电价为0.00元/MWh,预计出…

【计算机专业学习委员必备自动化催作业通知】

文章目录 前言一、前期准备zfile部署mysql服务搭建 二、编写python脚本python代码 三、总结 前言 大家好!我是一名计算机专业的菜鸟,作为这个专业的学习委员,我觉得收电子版作业是一件非常麻烦的事情,作业实验科目也比较多&#…

RLHF学习

整体流程 三个步骤分解: 预训练一个语言模型 (LM) ;聚合问答数据并训练一个奖励模型 (Reward Model,RM) ;用强化学习 (RL) 方式微调 LM。 RW RM 的训练是 RLHF 区别于旧范式的开端。这一模型接收一系列文本并返回一个标量奖励&…

探索Pyecharts关系图绘制技巧:炫酷效果与创意呈现【第42篇—python:Pyecharts水球图】

文章目录 Pyecharts绘制多种炫酷关系网图引言准备工作代码实战1. 基本关系网图2. 自定义节点样式和边样式3. 关系网图的层级结构4. 添加标签和工具提示5. 动态关系网图6. 高级关系网图 - Les Miserables 示例7. 自定义关系网图布局8. 添加背景图9. 3D 关系网图10. 热力关系网图…

使用PCL进行法向量可视化

使用PCL进行法向量可视化 文章目录 1、使用PCL进行法向量可视化2、计算所有点的法线并显示3、计算一个子集的法线 1、使用PCL进行法向量可视化 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/visualization/pcl_visualizer.h> #include &l…

Qt使用中文字符串乱码的问题

文章目录 vs编译器下第一种解决方式第二种解决方式 Qt编译器下 我们在使用qt的时候有时候会遇到打印中文字符串的时候出现中文乱码的问题&#xff0c;主要是由于Qt的QString字符串存储的方式是使用utf-8的编码方式&#xff0c;如果我们本地的文件是使用GBK方式的编码再使用中文…

DAY09_SpringBoot—整合SpringMVCSpringMVC参数取值用法

目录 1 SpringMVC1.1 SpringMVC框架介绍1.2 SpringMVC入门案例1.2.1 创建项目1.2.2 添加依赖项1.2.3 检查pom.xml文件1.2.4 编辑YML配置文件1.2.5 在templates中添加index.html文件1.2.6 默认页面跳转机制 1.3 RequestMapping注解测试1.3.1 编辑HelloController1.3.2 页面请求效…

【计算机网络】深入掌握计算机网络的核心要点(面试专用)

写在前面 前言四层模型网络地址管理Linux下设置ipARP请求包总结 前言 计算机网络是指将分散的计算机设备通过通信线路连接起来&#xff0c;形成一个统一的网络。为了使得各个计算机之间能够相互通信&#xff0c;需要遵循一定的协议和规范。OSI参考模型和TCP/IP参考模型是计算机…

32GPIO输入&按键控制LED&光敏控制蜂鸣器

一.硬件 光线越强&#xff0c;光敏电阻的阻值越小 温度越高&#xff0c;热敏电阻的阻值就越小 红外光线越强&#xff0c;红外接收管的阻值就越小 类比&#xff1a;电阻阻值越小&#xff0c;上拉或下拉就越强 &#xff08;弹簧的拉力就越强&#xff09; 在上下的电阻分压下&a…

FPGA HDMI IP之DDC(本质I2C协议)通道学习

目的&#xff1a; 使用KingstVIS逻辑分析仪软件分析HDMI的DDC通道传输的SCDC数据&#xff08;遵循I2C协议&#xff09;&#xff0c;同时学习了解SCDC的寄存器与I2C通信协议。 部分英文缩写&#xff1a; HDMIHigh Definition Multi-media Interface高清多媒体接口DDCDisplay Dat…

CSS基础细节学习

目录 一.CSS--网页的美容师 二.语法规范及选择器的介绍 一.CSS--网页的美容师 CSS是层叠样式表( Cascading Style Sheets )的简称&#xff0c;有时我们也会称之为CSS样式表或级联样式表。 CSS是也是一种标记语言&#xff0c;CSS主要用于设置HTML页面中的文本内容(字体、大小…

自定义实现 View.DragShadowBuilder 设置拖拽视图的大小

直接上刺刀 /*** Desc : 自定义拖拽视图的大小*/ public class CustomDragShadowBuilder extends View.DragShadowBuilder {private double mShadowSize;private Point mScaleFactor;/*** param view 需要拖拽的view* param shadowSize 拖拽视图的放大倍数*/public Cus…

CUDA下载安装教程,新手详细

目录 一、下载二、安装三、 设置环境变量四、补丁安装 由于项目需要安装特定版本的CUDA&#xff0c;现记录安装过程。 一、下载 进入官方下载地址&#xff1a;https://developer.nvidia.com/cuda-toolkit-archive 选择自己需要的版本。如果没有明确要求版本号&#xff0c;那么…