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

文章目录

  • 前言
  • 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=20480sudo losetup /dev/loop0 hd.imgsudo mkfs.ext4 -q /dev/loop0  mkdir hdisksudo 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 ]; thenset 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 dqemu-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.hqwc.cn/news/5120.html

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

相关文章

vue js实现表格行拖拽

效果图&#xff1a; <a-table :dataSource"dataSource" :columns"columns" :pagination"false"><template #bodyCell"{ column, record }"><template v-if"column.key td"><div style"cursor: p…

【容器起不来~tomcat】

记录一次线上容器~tomcat起不来的场景: **部门由于资金有限,只能用tomcat去部署,话不多说直接贴图: Docker 镜像 Tomcat 启动失败– 查看线上日志,日志报错了,报错内容如下: 1,Error response from daemon: driver failed programming external connectivityon endpoint jen…

R 语言 ggplot2 PCA 主成分分析(虚拟数据集)

生成虚拟数据集 library(ggplot2)data.matrix <- matrix(nrow 100, ncol 10)colnames(data.matrix) <- c(paste("wt",1:5,sep ""),paste("ko",1:5,sep "") )rownames(data.matrix) <- paste("gene",1:100,sep…

Modin 入门学习

Modin 是一个 Python 第三方库&#xff0c;用于加速 Pandas 的 API 执行速度。原始的 Pandas 是单线程执行的&#xff0c;而 Modin 则重新打包了 Pandas 里面的 API&#xff0c;使其同时在多个内核中运行&#xff0c;提高硬件性能的利用率。 使用方法很简单&#xff0c;安装 M…

车载软件架构 —— 闲聊几句AUTOSAR OS(七)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕的就是把别人的眼光当成自己生活的唯一标…

CAD Voronoi 3D三维泰森多边形维诺图插件三维狄利克雷镶嵌(Dirichlet tessellation)

三维Voronoi Voronoi又名泰森多边形或Dirichlet图、维诺图等&#xff0c;三维Voronoi是由连接两邻点直线的垂直平分面组成的连续三维多面体结构。Voronoi在各个学科中应用广泛&#xff0c;如进行区域规划、晶体塑性有限元研究、路径优化、地形简化、多孔结构力学等方面的分析。…

蓝桥杯专题-试题版-【危险系数】【网络寻路】【高僧斗法】【约数倍数选卡片】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Apollo分布式配置中心(二)

上一篇&#xff1a; 上一篇已经知道Apollo是什么东西了&#xff0c;接下来实践一下 目录 一、创建应用 1、 新增配置 2、创建Namespace ​3、同步配置 4、灰度发布 添加灰度配置项 ​编辑 配置灰度规则 二、删除应用、集群、appNamespace 三、springBoot整合Apollo …

C/C++结构体内存对齐的一些思考

在C中&#xff0c;结构体的内存对齐是为了提高访问结构体成员变量的效率和保证硬件的要求。 结构体对齐 C/C C 结构体内存对齐的示例代码C/C结构体内存对齐的原则结合汇编代码分析结构体的内存对齐问题 C 结构体内存对齐的示例代码 #include <iostream>struct Test_Stru…

C++之GNU C的__attribute__常用属性(一百五十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Symbol.for()

示例&#xff1a;Symbol() 和 Symbol.for(‘ ’)的区别 Symbol.for("foo"); // 创建一个 symbol 并放入 symbol 注册表中&#xff0c;键为 "foo" Symbol.for("foo"); // 从 symbol 注册表中读取键为"foo"的 symbolSymbol.for("b…

ISE软件基本使用

ISE软件基本使用 基本设置 关联notepad的操作&#xff1a;选择notepad的exe文件路径&#xff0c;并且加 { } 符号&#xff0c;并在结尾加$1。ISE可以设置程序运行的速度等级&#xff0c;该速度等级会影响程序从外部SPI Flash启动的启动速度。JTAG 接口的作用是将编译好的程 序…