因科研项目需求, 我们需要在Apple M1 Mac Mini上运行Linux来运行测试程序。基于前人几个月前的工作, 目前在M1 Mini上运行Linux只需要少量的命令操作。特此记录如下:
〇、准备实验材料
M1 Mini上带有网口、USB Type-C接口和USB Type-A接口。当前版本的Linux还没有网口和USB Type-A口的驱动程序, 因此下面只能使用USB Type-C口。于是, 我们需要一个USB Type-C扩展坞、单独的或扩展坞带的USB网卡、USB存储设备(U盘或移动硬盘)、鼠标、键盘以及显示器。
一、制作启动镜像
首先, 需要安装AArch64 (64位的ARM)架构的GCC工具链以及其他一些辅助工具:
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu lzop autopoint zstd device-tree-compiler gettext libtool-bin libipc-run-perl
然后, 克隆我修改过的pearl项目的代码仓库:
git clone https://github.com/twd2/pearl.git cd pearl git submodule update --init --recursive
我的修改主要开启了Linux内核的USB网卡驱动程序, 以及修改了启动脚本。根据具体的环境, 用户可能还需要修改linux/pearl/bin/prepare-linux
里面填写的根文件系统设备路径。
最后, 编译启动镜像, 得到pearl.image.macho
:
make build/linux/pearl.image.macho -j20
二、准备根文件系统
从这里下载前人制作好的根文件系统镜像, 解压, 然后用dd
将其写入准备好的USB存储设备中。这个镜像是基于树莓派Ubuntu修改的, 因此M1 Mini是一个大号的树莓派(?)
sudo dd if=ubuntu-20.10-preinstalled-desktop-arm64+raspi.img of=/dev/rdisk2 bs=1m
写入完成之后, 应该可以看到一个FAT分区(卷标应该为system-boot
)。把上一步得到的pearl
复制到这个分区里面。此处只是临时用其存放一下这个文件, 在完成下面第三步后, 便可将.image
.machopearl
删除。.image
.macho
三、设置启动策略
首先, 将显示器和扩展坞连接至M1 Mini, 并将USB外设连接至扩展坞。然后, 在M1 Mini关机状态下长按电源键, 直到进入启动项选择界面。接着, 选择“Options”并按回车进入。
进入后, 打开终端并输入以下命令来关闭一些安全特性(需要输入密码):
bputil -n -k -c -a -s csrutil disable csrutil authenticated-root disable
上述命令只需要运行一次, 之后通过运行如下命令即可设置启动策略(需要输入用户名和密码):
kmutil configure-boot -c pearl.image.macho文件的路径 -v "/Volumes/Macintosh HD/"
设置好后, 重新启动M1 Mini。
如果后续需要回到macOS启动, 则可以使用如下命令(需要输入密码):
bputil -n pol change
四、启动
M1 Mini重新启动后, 应该就自动进入树莓派Ubuntu系统了。如果有USB网卡, 网络应该也自动连接上了。
如果启动时发现找不到根文件系统设备, 需要返回第一步, 修改代码仓库中
文件, 然后重新尝试后续步骤。linux/pearl/bin/prepare-linux
参考资料
为何不用虚拟机,一样可以跑,而且很方便
我们需要在M1真实机器上运行Linux
好吧
Hello! Sorry for writing in English, I don’t (yet) speak Chinese.
I’m really thrilled to see this, thank you for providing a guide. If there is anything I can help with, please let me know.
I don’t, unfortunately, have a Mini at this time, so I’m afraid I can’t really help with the network card issue.
Thanks again, and all the best for your project!