m1n1: an experimentation playground for Apple Silicon
(And to some extent a Linux bootloader)
You need an
aarch64-linux-gnu-gcc cross-compiler toolchain (or a native one, if running on ARM64).
$ git clone --recursive https://github.com/AsahiLinux/m1n1.git $ cd m1n1 $ make
The output will be in build/m1n1.macho.
To build on a native arm64 machine, use
To build verbosely, use
Building on ARM64 macOS is supported with clang and LLVM; you need to use Homebrew to install the required dependencies:
$ brew install llvm
After that, just type
Building using the container setup
If you have a container runtime installed, like Podman or Docker, you can make use of the compose setup, which contains all build dependencies.
$ git clone --recursive https://github.com/AsahiLinux/m1n1.git $ cd m1n1 $ podman-compose run m1n1 make $ # or $ docker-compose run m1n1 make
Our wiki has more information on how to use m1n1.
To install on an OS container based on macOS <12.1, use
kmutil configure-boot -c m1n1.macho -v <path to your OS volume>
To install on an OS container based on macOS >=12.1, use
kmutil configure-boot -c m1n1.bin --raw --entry-point 2048 --lowest-virtual-address 0 -v <path to your OS volume>
m1n1 supports running payloads by simple concatenation:
$ cat build/m1n1.macho Image.gz build/dtb/apple-j274.dtb initramfs.cpio.gz > m1n1-payload.macho $ cat build/m1n1.bin Image.gz build/dtb/apple-j274.dtb initramfs.cpio.gz > m1n1-payload.bin
Supported payload file formats:
- Kernel images (or compatible). Must be compressed or last payload.
- Devicetree blobs (FDT). May be uncompressed or compressed.
- Initramfs cpio images. Must be compressed.
Supported compression formats:
m1n1 is licensed under the MIT license, as included in the LICENSE file.
- Copyright The Asahi Linux Contributors
Please see the Git history for authorship information.
Portions of m1n1 are based on mini:
- Copyright (C) 2008-2010 Hector Martin "marcan" firstname.lastname@example.org
- Copyright (C) 2008-2010 Sven Peter email@example.com
- Copyright (C) 2008-2010 Andre Heider firstname.lastname@example.org
- Copyright (C) 2014 David Gibson email@example.com
- Copyright (C) 2018 embedded brains GmbH
- Copyright (C) 2006-2012 David Gibson, IBM Corporation.
- Copyright (C) 2012 David Gibson, IBM Corporation.
- Copyright 2012 Kim Phillips, Freescale Semiconductor.
- Copyright (C) 2016 Free Electrons
- Copyright (C) 2016 NextThing Co.
The ADT code in mini is also based on libfdt and subject to the same license.
- Copyright (c) 2020 Alex Ionescu
- Copyright (c) 2003-2019 Joergen Ibsen
- Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved.
m1n1 embeds Doug Lea's malloc (dlmalloc), which is in the public domain (CC0).
- Copyright 2010-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
- This Font Software is licensed under the SIL Open Font License, Version 1.1.
- Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
m1n1 embeds portions of musl-libc's floating point library, which are MIT licensed and copyright
- Copyright (c) 2017-2018, Arm Limited.
m1n1 embeds some rust crates. Licenses can be found in the vendor directory for every crate.