mac m1通过qemu和grub制作操作系统引导盘

news2024/11/12 8:23:07

文章目录

  • 前言
  • grub安装引导盘
  • FAQ
  • 参考
  • 附录
    • qemu安装ubuntu
    • GRUB安装到回环设备
    • 吧啦吧啦...

前言

我电脑是mac m1芯片的,做了如下尝试,最终在第4种方式下成功:

  1. 开始用了parallels desktop安装了ubuntu 22版本的,因为本机是arm64芯片,所以只能安装arm64的ubuntu,然后在运行grub-install /dev/loop0时报错:grub-install: error: cannot find EFI directory,并且它只能安装arm64的efi
  2. 如果是ubutnu16.04版本会报:embedding is not possible, but this is required for cross-disk install
  3. 我用qemu安装了x86_64架构的centos7上使用了grub2-install /dev/loop0时报错:embedding is not possible, but this is required for cross-disk install
  4. 最终我用qemu安装了x86_64架构的ubutnu18.04,然后跑了如下命令成功了

grub安装引导盘

dd bs=512 if=/dev/zero of=hd.img count=20480

sudo losetup /dev/loop0 hd.img


sudo mkfs.ext4 -q /dev/loop0  

mkdir hdisk

sudo mount -o loop ./hd.img ./hdisk/
sudo mkdir ./hdisk/boot/

sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop0

/hdisk/boot/grub/ 目录下建立一个 grub.cfg 文本文件

menuentry 'HelloOS' {
insmod part_msdos
insmod ext2
set root='hd0' 
multiboot2 /boot/HelloOS.eki 
boot 
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; then
  set timeout=10
fi

可使用如下2种方式运行

qemu-system-i386 -m 1024 -drive format=raw,file=hd.img

# 64位系统的命令
qemu-system-x86_64 -m 1024 -drive format=raw,file=hd.img
qemu-img convert -O qcow2 hd.img qemu-grub.img
qemu-system-x86_64 -hda ./qemu-grub.img

最终效果
在这里插入图片描述
在这里插入图片描述

FAQ

  1. 挂载/dev/loop0时可能遇到device busy,可以使用losetup -f查看一个空闲的使用,如果一个回环设备都没有,可以使用sudo mknod /dev/loop0 b 7 200传建回环设备
  2. 遇到警告可以忽略:grub-install: warning: File system `ext2’ doesn’t support embedding.
    grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged…
    Installation finished. No error reported.
  3. grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn’t exist 我开始用的arm64的ubuntu,它不支持x86系列的,所以需要安装一个x86的操作系统来进行grub
  4. mac电脑可以使用brew install qemu安装qemu

参考

制作一个grub虚拟启动盘,在qemu下调试
重点ubuntu arm环境下grub启动镜像制作
fdisk 命令实现磁盘分区详细教程
Grub这篇文章可以看看
linux安装网络
各操作系统安装grub程序
qemu 安装CentOS

附录

qemu安装ubuntu

qemu-system-x86_64 -m 2048 -hda UbuntuOS.img -cdrom ./ubuntu-18.04.6-live-server-amd64.iso -boot d

qemu-system-x86_64 -m 2048 -hda UbuntuOS.img  -boot c -device e1000,netdev=net0 -netdev user,id=net0,hostfwd=tcp::5555-:22

GRUB安装到回环设备

在Linux系统中,可以使用以下命令将GRUB安装到回环设备:

  1. 首先,使用以下命令创建一个空的磁盘映像文件:

    dd if=/dev/zero of=grub.img bs=1M count=100
    

    这将创建一个名为grub.img的100MB空映像文件。

  2. 使用losetup命令将映像文件关联到一个回环设备:

    losetup /dev/loop0 grub.img
    

    这将将grub.img文件关联到/dev/loop0回环设备。

  3. 使用fdiskparted等工具将回环设备分区,并格式化分区:

    fdisk /dev/loop0
    mkfs.ext4 /dev/loop0p1
    

    这将在/dev/loop0上创建一个分区,并使用ext4文件系统格式化该分区。

  4. 挂载分区:

    mount /dev/loop0p1 /mnt
    

    这将在/mnt目录下挂载/dev/loop0p1分区。

  5. 使用grub-install命令将GRUB安装到回环设备的MBR(Master Boot Record):

    grub-install --target=i386-pc --root-directory=/mnt /dev/loop0
    

    这将将GRUB安装到/dev/loop0回环设备的MBR。

  6. 卸载分区并取消回环设备的关联:

    umount /mnt
    losetup -d /dev/loop0
    

    这将卸载/mnt目录下的分区,并取消grub.img文件与/dev/loop0回环设备的关联。

现在,grub.img文件就可以作为一个可引导的设备使用了。

吧啦吧啦…

  1. rm -rf 以及grub-install -/dev/sda这2个命令不要随便乱搞,弄错了系统就崩了
  2. qemu-system-aarch64 -M virt -m 1024 -drive format=raw,file=grub.img 这是启动arm64架构的,但不好使~

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

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

相关文章

Linux学习-基础篇

Linux学习 学自尚硅谷武晟然老师,结合老师课堂内容和自己笔记所写博文。 文章目录 Linux学习基础篇桌面与终端文件系统一、文件系统和挂载点二、目录结构bin、sbinlib、lib64usrbootdevetchome、rootoptmedia、mntprocrunsrvsystmpvar Vim编辑器一、整体介绍和模式转…

GridView编辑更新时数据没有改变,总是原来的值

GridView编辑更新时数据没有改变,总是原来的值 猜测原因是:我在点击更新时又执行了page_load方法,又将数据库的值绑定到了gridview上,所以永远都是数据库的值 解决办法:判断页面是不是第一次加载。在page_load方法…

【论文笔记】FASTER SEGMENT ANYTHING:TOWARDS LIGHTWEIGHT SAM FOR MOBILE APPLICATIONS

前脚fast SAM刚发完,后脚mobile SAM就发了 ,之前的论文笔记中我一直就认为fast SAM其实应该算是yolo的扩展工作,和原生的SAM架构相去甚远,而且在简介上直接就对(gong)比(ji)了FastSA…

VS2022运行一闪而过的解决方案

1.问题情景 编写完程序后,尝试在VS中编译链接运行(使用快捷键F5或者fnF5或者ctrlfnF5,不同的电脑可能不太一样)发现控制台一闪而过。 2.解决方案 解决方案:右击“项目”->“链接器”->“子系统”->修改为“…

云原生——什么是云原生?

❄️作者介绍:奇妙的大歪❄️ 🎀个人名言:但行前路,不负韶华!🎀 🐽个人简介:云计算网络运维专业人员🐽 前言 伴随云计算的滚滚浪潮,云原生(CloudNative…

Matlab中统计矩阵中元素个数的方法

1、 tabulate函数 a [1,2,1,3,1,4,1,5,2,3,1,4,2,5,4,2];tabulate(a)第一列代表了元素,第二类代表该元素出现的个数,第三列代表该元素的占比。 2、find函数和length函数 判断矩阵a中元素2出现的次数 a [1,2,1,3,1,4,1,5,2,3,1,4,2,5,4,2]; length(…

Cadence 生成智能 PDF 的方法

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 项目设计完成后,原理图文件需要导出 PDF 文档进行归档,过去导出的 PDF 文 件不带属性,网络标识不可选择,查找元器件和网络标识不…

自定义类创建数组的赋值;并回复:窗体图片时间

缘由https://bbs.csdn.net/topics/392551630 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;…

Nacos 配置更新的工作流程

首先,Nacos 是采用长轮训的方式向 Nacos Server 端发起配置更新查询的功能。所谓长轮训,(如图)就是客户端发起一次轮训请求到服务端,当服务端配置没有任何变更的时候,这个连接一直打开。 直到服务端有配置或…

微分方程应用——笔记整理

首先,根据正常思路走,化简得到式子: 不难发现,设 后面得出该方程的通解: 这里要注意什么等于这个通解 --- z 又因为该曲线过点 所以可以求出c为3 该题虽然简单,但是要注意几个问题,该定…

轻松生成高质量用例的API接口工具

1、前言 随着自动化测试技术的普及,已经有很多公司或项目,多多少少都会进行自动化测试。 目前本部门的自动化测试以接口自动化为主,接口用例采用 Excel 进行维护,按照既定的接口用例编写规则,对于功能测试人员来说只…

vue使用img标签:src属性动态引入资源路径的方法

vue版本号&#xff1a;3.2.13 vue中<img src"" />标签静态引入图片资源 <template><!-- <router-view/> --><!-- 静态引入图片资源 --><img src"./assets/logo.png" alt""> </template><style la…

微软MFC技术中消息的定义

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来聊聊MFC技术中消息的定义。 本贴子首先介绍MFC消息的基本概念&#xff0c;理解消息的定义是学习使用MFC的基础。了解消息的驱动机制后&#xff0c;才能彻底明白MFC的运行机制。 首先来看什么是消息。…

VS code搭建JavaScript环境调用XHR实现post和get简单流程

一、下载NodeJS 下载node&#xff0c;最好到node官 https://nodejs.org/en/ 下载一个LTS&#xff08;Long Term Surport&#xff09;长期支持版本。 输入命令node -v 就可以看到node的版本了如果node安装包集成了npm(node package manage)&#xff0c;那我们输入命令npm -v 也…

11 S整数小波分解图像(matlab程序)

1.简述 学习目标&#xff1a; 非标准小波分解&#xff08;用S整数变换&#xff09; 小波分解过程&#xff1a;读取加入噪声后的图片后&#xff0c;数据即是高度*宽度个数据点。对此矩阵数据要做二维离散小波分解&#xff0c;二维小波变换和一维小波变换的区别从原理上来说就是…

stable diffusion webui 下载和使用civitai中的模型

1.网址 C站网址为&#xff1a;https://civitai.com/。注&#xff1a;这里需要科学上网 2.下载模型 1.选择想要的模型&#xff0c;点击【Download】按钮&#xff0c;这里演示【Deliberate】模型的下载和使用 2.将下载的模型&#xff0c;存放到【/models/Stable-diffusion】目…

基于圆弧搜索和最小似然圆估计的圆查找算法

在这里提出一种算法&#xff0c;其实是将两篇papers的想法的结合。没有什么创新点&#xff0c;只是做一下算法原理的记录&#xff0c;防止后面重新看代码的时候一头雾水。 算法的目的在于查找特定半径范围的圆&#xff0c;而不致力于查找所有的圆&#xff0c;当然它也支持查找所…

04约瑟夫环

约瑟夫问题 设编号为1&#xff0c;2&#xff0c;3……n的n个人围坐成一圈&#xff0c;约定编号为k(1<k<n)的人从1开始报数&#xff0c;数到m的那个人出列&#xff0c;它的下一位又从1开始报数&#xff0c;数到m的那个人又出列&#xff0c;以此类推&#xff0c;直到所有人…

新手简单看懂Servlet里面的web.xml配置

背景&#xff1a; ecplisetomcatservlet 我们在学习servlet时候&#xff0c;因为前面基础没学好&#xff0c;导致servlet看不懂&#xff0c;比如笔者当时就是servlet的web.xml看不懂&#xff0c;如果我们能先看懂web.xml&#xff0c;知道前端访问哪个接口&#xff0c;调用哪个…

一个VBA的概率的模型(草稿)(未完成)

现在 可以让概率变化一般的抽奖&#xff0c;都是 概率稳定的&#xff0c;好处是稳定&#xff0c;没啥好处坏处是&#xff0c;不同的人次数差距很大&#xff0c;无法形成稳定的预期 概率0.1 变成概率0.1&#xff0c;如果失败就增加概率 这个增加概率可以是&#xff0c;已经失…