【ubuntu20.04上构建qemu启动linux kernel】

news2024/10/7 6:37:56

参考Ubuntu环境下使用qemu搭建arm64运行环境 - 简书

 一、交叉编译工具

sudo apt install gcc-aarch64-linux-gnu
aarch64-linux-gnu-gcc -v

二、linux内核编译

git clone https://github.com/torvalds/linux.git
cp arch/arm64/configs/virt.config .config
make ARCH=arm64 menuconfig
make ARCH=arm64 defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- all -j12
ls arch/arm64/boot/Image

三、busybox制作rootfs

下载busybox 地址 : http://busybox.net/downloads/

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
配置
make menuconfig
注:此时应该全屏,然后进入配置页面, 设置成静态编译
Settings --->
[*] Build static binary (no shared libs)
编译安装
make
make CONFIG_PREFIX=./__install install

我们来创建其他需要的目录:
mkdir dev etc lib sys proc tmp var home root mnt
我们主要需要更新etc、dev和lib目录:

对于etc目录的更新:
添加profile文件:
#!/bin/sh
export HOSTNAME=liebao
export USER=root
export HOME=/home
export PS1="[HOSTNAME \W]# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH


cd进入了我们制定的家目录homes,导出了环境变量。

添加inittab文件:etc/ 目录下新建一个 inittab 文件
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

添加fstab文件:
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
kmod_mount /mnt 9p trans=virtio 0 0

指定挂载的文件系统。
创建init.d目录:
mkdir init.d
init.d下添加rcS文件:
mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
到此我们etc下的文件都制作好了,目录结构如下:
$ tree
.
├── fstab
├── init.d
│ └── rcS
├── inittab
└── profile
1 directory, 4 files

制作dev下必要文件:
cd dev/
sudo mknod console c 5 1
sudo mknod null c 1 3
制作lib下必要文件:为了支持动态编译的应用程序的执行,根文件系统需要支持动态库,所以我们添加arm64相关的动态库文件到lib下:
cd lib
cp /usr/aarch64-linux-gnu/lib/.so -a .
对库文件进行瘦身(去除符号表和调试信息),使得库文件变小:
aarch64-linux-gnu-strip *
至此,我们的最小的根文件系统已经全部制作完成!
制作磁盘文件
cd busybox
dd if=/dev/zero of=rootfs_ext4.img bs=1M count=256
mkfs.ext4 rootfs_ext4.img
mkdir -p tmpfs
mount -t ext4 rootfs_ext4.img tmpfs/ -o loop
cp -af _install/* tmpfs/
umount tmpfs
rm -rf tmpfs
chmod 777 rootfs_ext4.img

四、qemu启动

apt-get install qemu qemu-system qemu-user
apt-get install ninja-build

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine type=virt -m 512 -smp 2 -nographic \
-kernel Image \
-drive format=raw,file=rootfs_ext4.img \
-append "noinitrd root=/dev/vda rw console=ttyAMA0 loglevel=8" \
-fsdev local,id=kmod_dev,path=$PWD/kmodules,security_model=none \
-device virtio-9p-device,fsdev=kmod_dev,mount_tag=kmod_mount

#(命令参数介绍)Linker option :
#-cpu 指定处理器的架构
#-smp 指定处理器的个数
#-m 指定内存的大小
#-nographic 不启动图形界面
#-kernel 指定编译生成的内核镜像的存放位置
#-append 是内核启动的附加
#-drive 指定之前制作生成的根文件系统的镜像位置

五、共享文件夹

在当前目录创建kmodules文件

kmodules目录:通过mount可以查看被挂载到了qemu上的系统的/mnt目录下
在主机的内核源码目录的kmodules目录中echo一个文件:

 

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

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

相关文章

并网逆变器杂记1-VO-DCC双环控制

NOTE1: 母线电压恒定的条件是: PV输出功率 ,等于逆变侧消耗功率 假设:PV侧给母线输入10A ,但是逆变侧消耗1A,此时母线Udc会升高 反之PV输入1A,消耗10A,母线Udc会降低。 NOTE2&#…

【IP地址】使用这个免费工具轻松获取地理位置

文章目录 前言一、Ip-API二、使用示例2.1、语言2.2、数据格式 三、简单示例四、更好的服务五、需要注意的点结尾 前言 今天分享一个免费的在线工具来查询IP地址所在的地理位置。可以通过IP地址所属的网络运营商和其他相关信息来确定设备的位置,包括国家、地区、城市…

CentOs中操作用户命令(添加或删除)

1、不添加任何参数,创建 zhangsan 用户 不加参数时,创建用户默认创建一个用户目录以及用户和组同名,且UID和GID相同 useradd zhangsan 用 id和 ll 命令查看一下,是否成功创建用户目录以及用户和用户组 id ll uid1003( zhangsan) gid1003( zhangsan) 组1003( zhangsan) 2…

Obsidian 与 Typora 图片兼容保存路径一致设置

目录 一、问题二、解决方法 Obsidian官网 : https://obsidian.md/ Your thoughts are yours. 你的想法就是你的。 Obsidian stores notes on your device, so you can access them quickly, even offline. No one else can read them, not even us. 黑曜石将笔记存储…

Java——基础语法

文章目录 1. 变量:变量的声明和初始化变量的作用域变量的命名规则常量 2. 运算符:算术运算符关系运算符逻辑运算符位运算符其他运算符 3. 流程控制:分支结构循环结构跳转控制 4. 类与对象:类的概念对象的概念类的成员构造方法和析…

深入理解深度学习——BERT派生模型:T5(Text to Text Transfer Transformer)

分类目录:《深入理解深度学习》总目录 T5的全称为Text to Text Transfer Transformer,是谷歌提出的预训练语言模型领域的通用模型,该模型将所有自然语言问题都转化成文本到文本的形式,并用一个统一的模型解决。为了得到大一统的高…

Tkinter创建列表使用方法

前言 ttk.Treeview 是 Tkinter 模块中的一个组件,它提供了一个可用于显示层次结构数据的树状列表。它具有以下特点和功能: 显示层次结构:ttk.Treeview支持以树状结构显示数据。每个节点可以有子节点,从而形成层次结构。用户可以展…

GPT-2源码实现及GPT-3、GPT-3.5、GPT-4及GPT-5内幕解析(三)

GPT-2源码实现及GPT-3、GPT-3.5、GPT-4及GPT-5内幕解析(三) 5.3 GPT-3 内幕机制可视化解析 GPT-3是一个基于Transformer的语言模型,通过不同的层次提取语言不同层面的特性,构建整个语言的语义信息,它学习的过程跟人类正常学习的过程是类似的,开始的时候是一个无监督预训练…

材料表面与界面 关键概念介绍

目录 1. Conductivity and two general modes of charge transport in solid-state materials (Fig. 1b) 2. What is Bravais lattice, what is basis and what is crystal lattice (Fig. 2). The differences between five possible Bravais lattices in two dimensions (Fi…

【计算机毕设系统项目说明】VB+ACCESS采购管理系统开发(论文+系统+答辩PPT+封面)

大家好,这里是小伙整理的VB项目系列,大家可以用于自己的课设Q或毕设,需要的可自取。 项目包含内容 项目包含: 项目源码 论文 答辩PPT 其他相关 截图: 库存管理软件说明 一.系统设置 1) 锁定&#xff1…

2023考研一战上岸 电子科技大学 860软件工程 经验分享

目录 1. 前言:考研,心态最重要! 2. 初试各科复习经验 (1) 数学一 (2) 英语一 (3) 专业课 (4) 政治 (5) 四门课时间划分 3. 复试流程和备考建议 (1) 复试流程 (2) 备考建议 4. 结语 首先,先简要做一个自我介绍&#xff…

记录:Qt Creator 10配置安卓开发环境

Qt Creator 现在的安卓开发环境配置相比老版本方便了不少,本文以目前在线安装版的 Qt Creator 10.0.2 Qt 5.15 / Qt 6.5 为例做演示(有些文件可能会因为网络问题需要科学上网才能下载)。 1.下载 JDK 11 https://adoptium.net/zh-CN/temuri…

MATLAB 之 对话框设计

这里写目录标题 一、对话框设计1. 控件的种类及作用2. 控件的操作2.1 建立控件对象2.2 控件对象的基本控制属性2.3 建立控件对象举例 一、对话框设计 对话框是用户与计算机进行信息交流的临时窗口,在现代软件中有着广泛的应用。在软件设计时,借助于对话…

分治、贪心专题

分治、贪心专题 分治篇LeetCode 241. 为运算表达式设计优先级解题思路代码实现总结 不要纠结,干就完事了,熟练度很重要!!!多练习,多总结!!! 分治篇 LeetCode 241. 为运算…

夏驰和徐策的大学英语四六级备考

一、今日单词: 1.anxiety 中文意思是"焦虑"或"忧虑"。它通常用来描述一种内心的不安、紧张或担忧感。"anxiety"可以指个人的情绪状态,也可以指一种心理疾病或临床诊断。 以下是一些关于"anxiety"的用法和例…

3DMAX样条线轮廓修改器插件SplineOffset使用方法详解

SplineOffset 是 3dMax 的修改器,可创建样条曲线的多个克隆,并可选择增量增加或减少偏移、平移和旋转。在许多方面,它类似于 3ds Max 的内置阵列工具与样条线偏移功能相结合,但有两个主要优点:首先,SplineO…

Spring Framework 6 中的设计模式

文章目录 1、简介2、单例模式(Singleton Pattern)2.1 单例 Beans(Singleton Beans)2.2 自动注入单例(Autowired Singletons) 3、工厂方法模式(Factory Method Pattern)3.1 应用上下文…

【课程笔记】分布式计算系统 徐辰

分布式计算系统笔记 课程介绍 课程背景 大数据处理系统——> 分布式计算系统 Hadoop,Spark,Flink大数据涵义过于宽泛 本课程/教材 强调系统设计、原理、编程的集合 课程目的 培养系统思维 应用层:搜索、推荐算法设计层&#xff1a…

work 6.24

1、grep:查找字符串 grep 字符串 文件名 -w:按单词查找 -R:实现递归查找,主要用于路径是目录的情况 -i:不区分大小写 -n:显示行号 grep -w "^ubuntu" /etc/passwd ---->查找以ubuntu单词作为开头位置的所在行 grep -w "ubuntu$"…

使用frp实现内网穿透

本篇博客最早发布于实验室公共博客,但已无人维护,现迁移至个人博客 引言 一打五师兄走之前留了一块树莓派给我,暑假闲来无事拿出来玩玩 如果每次都连接显示屏和键盘使用有点麻烦而且低级 正常笔记本和树莓派都连着实验室的WIFI&#xff0c…