Home

Awesome

m1n1: an experimentation playground for Apple Silicon

(And to some extent a Linux bootloader)

Building

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 make ARCH=.

To build verbosely, use make V=1.

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 make.

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

Usage

Our wiki has more information on how to use m1n1.

To install on an OS container based on macOS <12.1, use m1n1.macho:

kmutil configure-boot -c m1n1.macho -v <path to your OS volume>

To install on an OS container based on macOS >=12.1, use m1n1.bin:

kmutil configure-boot -c m1n1.bin --raw --entry-point 2048 --lowest-virtual-address 0 -v <path to your OS volume>

Payloads

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:

Supported compression formats:

License

m1n1 is licensed under the MIT license, as included in the LICENSE file.

Please see the Git history for authorship information.

Portions of m1n1 are based on mini:

m1n1 embeds libfdt, which is dual BSD and GPL-2 licensed and copyright:

The ADT code in mini is also based on libfdt and subject to the same license.

m1n1 embeds minlzma, which is MIT licensed and copyright:

m1n1 embeds a slightly modified version of tinf, which is ZLIB licensed and copyright:

m1n1 embeds portions taken from arm-trusted-firmware, which is BSD licensed and copyright:

m1n1 embeds Doug Lea's malloc (dlmalloc), which is in the public domain (CC0).

m1n1 embeds portions of PDCLib, which is in the public domain (CC0).

m1n1 embeds the Source Code Pro font, which is licensed under the OFL-1.1 license and copyright:

m1n1 embeds portions of the dwc3 usb linux driver, which was BSD-or-GPLv2 dual-licensed and copyright

m1n1 embeds portions of musl-libc's floating point library, which are MIT licensed and copyright

m1n1 embeds some rust crates. Licenses can be found in the vendor directory for every crate.