Perkedel WoosiePerkedel NTLF+ASTR

How to Compile & Install Magic Lantern 2023 Working

Here Instruction:

 Open this Instruction RAW directly


How to compile & install Magic Lantern (2023 Working 100% minus 1%)

This is an instruction of how to compile &/or install Magic Lantern for your Canon EOS DSLR & Mirrorless camera (except PowerShot & EOS with PowerShot firmwares).
Also featuring QEMU compilation instruction Working 2023 100% minus 1%.

Some URL syntax below uses Markdown format (example_link) which is the ones without πŸ”—ο‚Ž (External link) symbols next to it & won't open in new tab! Be sure to always use Middle Click the URL without External Link Symbols if you like to make sure staying here.

Build Compile:


You must use exactly Debian 11, Bullseye, in which this stable release has GCC & G++ 10 series which are compatible with the ML Simplified source code we will be using.

Using Windows Subsystem for Linux

Windows Only

Only for Windows

This feature is only available for Windows atleast 10 & up

Download Debian WSL here.

Once installed, simply launch Debian app & configure your Debian WSL for the 1st time. Make sure you remember your username & password for this WSL.

Using virtual Machine / Container

Download the latest stable build of Debian, here
You only need the very top Netinst ISO file.

Make sure you also provided the virtual machine / container sufficient amount of specifications, e.g.:

add / mount the Debian Netinst ISO you've just downloaded & boot from it. Follow instructions on the virtual screen. Don't forget to make your main user an admin / sudoers. Make sure you remember your username & all passwords (both main user & root) for this virtual machine / container

Download the virtual machine / container image

Tips: Please go to Recompilation section below to clean up the compilation first for the best result.

ERROR: USERNAME is not in the sudoers file. This incident will be reported.

If somehow that after installation your main user did not exist in the sudoers group, you can do the following to fix this problem:

Further informations:

Use Source Code Edition of

names_are_hard's Magic Lantern Simplified. Here GitHub repository
the QEMU (simulates Canon firmware) will be on a separate repository of This GitHub repository

Needed Package

You will need the following package, as we have collected, tested, & guessed the equivalent from various instructions:

Therefore, pls do these commands bellow:

sudo apt update # to update repository cache
sudo apt upgrade -y # to upgrade all installed packaged, always confirm
# and these packages finally:
sudo apt install git build-essential make cmake gcc g++ gcc-arm-none-eabi zlib1g-dev libglib2.0 autoconf libtool libsdl-console flex bison libgtk2.0-dev mtools libsdl-console-dev install make gcc gcc-arm-none-eabi mercurial gcc-mingw-w64 python3-docutils zip perl

or use synaptic for graphical package management experience.
Simply search by those package names above, mark them for installation, & apply.



clone these two. It is also recommended to clone them in a dedicated folder.

# (RECOMMENDED) make a special folder & go inside it
cd # or `cd ~`
mkdir -p sauce/simplified
cd sauce/simplified
# This to ensure you have tidy working space & clean home folder.

# Clone Magic Lantern Simplified
git clone

# Clone the `qemu-eos`
git clone


Magic Lantern itself
# Use the same special folder with instruction above or whereever `magiclantern_simplified` clone folder is
cd ~/sauce/simplified

# go to your Magic Lantern Simplified folder
cd magiclantern_simplified

# Go to which camera model you would like to compile for
# let's say you have 200D firmware v1.01, so go to 200D.101 platform folder!
cd platform/200D.101

# (OPTIONAL) you may need to update the documentations files
make docq
# PLS HELP: still failed

# then just make zip to compile & zip the ML package
make zip

You should see a zip file with names like this:

so say you have just compiled 200D firmware version 1.01 at certain date, so the file will looks like:

It is possible to compile & zip every single version exist in this ML repository.
simply make zip in the root ML Simplified directory, without going to which platform folder.

cd ~/sauce/simplified/magiclantern_simplified
make zip

and as usual, the zip files will be on each platform folder.


Further informations:

# Use the same special folder with instruction above or whereever `magiclantern_simplified` clone folder is
cd ~/sauce/simplified

# Make sure you have cloned `magiclantern_simplified` before,
# instruction above section

# Go inside `qemu-eos` you've just cloned, switch branch to v4.2.1, & then get out of it
cd qemu-eos; git switch qemu-eos-v4.2.1; cd ..
# Important, since the v4.2.1 branch is atleast the most compatible with our compilation library we have.

# Create separate build folder next to our QEMU called `qemu-eos-build`, then go inside it
mkdir qemu-eos-build
cd qemu-eos-build

# Begin the configuration procedure with the following parameters
../qemu-eos/configure --target-list=arm-softmmu --enable-plugins --disable-docs --enable-vnc --enable-gtk

# Make with 16 threads. 
# You can change how many thread you want, 
# but be sure not to get too high than your computer specification.
make -j16

# Make the plugins
make plugins

# Copy the Magic Lantern library into our QEMU plugin folder
cp tests/plugin/ arm-softmmu/plugins/

# Done. you can now run the QEMU.
# go back to `qemu-eos` repository & see the help for further instruction
cd ../qemu-eos/magiclantern
./ --help
# you will now run QEMU with that `` command above.

# Be sure to provide your own ROM you dumped from your own Canon EOS camera!
# Perkedel nor X0p1r4t3 will not provide neither accepting sparsdated Canon ROM firmware files 
# due to abusive DMCA laws extradited from Earth where Canon comes from,
# unless Canon goes bankrupt & the files becomes rare & risk disappearing.

If you made some changes in this QEMU EOS, don't forget to recompile & make sure the Magic Lantern library is still placed properly to your QEMU EOS plugin folder

make -j16 && make plugins && cp tests/plugin/ arm-softmmu/plugins/

Note however, that you may need to do cleanup (instruction below) for the best result OR if the recompilation fails.


Before recompiling after either change or not or something else, make sure you have cleaned up the compilation result for the best outcome possible by doing the following:

# cleanup Magic Lantern
cd ~/sauce/simplified/magiclantern_simplified
make clean

# return home

# cleanup QEMU EOS
cd ~/sauce/simplified/qemu-eos-build
make clean
Magic Lantern itself

Simple go to which platform folder you'd like & then recompile

# for example to recompile 200D firmware v1.01 again..
cd ~/sauce/simplified/magiclantern
cd platform/200D.101
make zip

# OR you can recompile all versions of ML by start 
# compiling at the root of the repository instead of which platform
cd ~/sauce/simplified/magiclantern
make zip

You need to reconfigure the QEMU EOS again, then compile the QEMU & the plugins, & recopy the ML library back to QEMU plugin folder

# make sure you are still in the QEMU EOS build folder
cd ~/sauce/simplified/qemu-eos-build

# reconfigure so the compiler can see installed libraries you had right now
../qemu-eos/configure --target-list=arm-softmmu --enable-plugins --disable-docs --enable-vnc --enable-gtk

# start recompilation both the QEMU & plugins
# & recopy the ML library to the plugin folder.
make -j16 && make plugins && cp tests/plugin/ arm-softmmu/plugins/

Preparing QEMU EOS

Further informations:


Incomplete & unconfirmed instruction

We are deeply apologize. However, instructions in this section below are still in progress.
We have compiled stuffs we could understand from many replies & articles above
Proceed at your own risk!, We are currently unable to test the step & optimize the working condition due to a technical difficulties at the moment.
We are working on the fix.

Step 1. Dump the ROM from your Canon camera!

⚠️ Sparsdat / Piracy of active on sale Canon Firmware & Dumped ROM files are forbidden


Perkedel nor X0p1r4t3 nor affiliates will not accept sparsdat contribution of active commercial proprietary product, Canon Firmware & Dumped ROM files that are still on sale (or shipped from certain product) & very common.
Unless any or some of the following:

  • File(s) is/are litterally gone, no longer found, poof to dust. At this point, restrictions especially ones that disallow redistribution shall be void & null.
  • File(s) is/are too long overdue on a case by case basis
  • File(s) is/are becomes rare these days, sought after, on a case by case basis
  • File(s) is/are terminally rare & just one risk of disappearing, few to none exception on a case by case basis
  • File(s) is/are too long overdue forbidden for reuploads due to a certain reasons on a case by case basis
  • File(s) is/are Open Source licensed (e.g. GNU GPL series) But it costs more than $0 to get its binary. If the next version repent to $0, link the canonical download link instead & keep redistributing the old version (unless found & confirmed the version archive at any point, which then you have to link to that archive instead if you wish to link the old version.)
  • File(s) is/are placed behind account login / email access wall / community guild exclusive (e.g. Discord only), even as a 69420 protection. Archivers hates login required, most of them can only do anonymous crawling! Not only that, it is egregious having to share your personal data just to get the file.
  • File(s) is/are encrypted behind password separate to 3rd party link or any complicated exclusive means, even if the password reveal link(s) is/are still active. Forcing gamers to open up 3rd party link just to get the password may compromise personal data & possibly downloads other unwanted malicious softwares. This rule applies only to password that did not placed next to download link at the same page. Admiral Zumi recommends to re-zip (recompress) the folder without password for convenience, unless the topic is contextually known to cause / being in war.
  • File(s) is/are set in a time bomb where at certain time it / they expires & no longer accessible or otherwise downloadable, even if the bomb still not detonated yet. Gamers shall not & NEVER be exposed to any form of FOMO (Fear of Missing Out) & create moment of envy for those who were late of acquiring the file(s). Does not apply the opposite, If the active embargo forbids any redistribution or access, wait for maximum subjective time appropriate or actual embargo finish time, then link to canonical download links instead (even if it has been reserved for later when embargo finish, please put so immediately).
  • File(s) is/are linked under a complicated button function & non-obvious e.g. requires running Javascript function (embedded inside a button element & a script element close by or separated regardless their complexity & obfuscation level) to lead you to download link instead of doing things like <a href='></a>'. Most Archivers have troubles interpreting non-standard URL button, and may requires manual intervention which no archivers have. Even some of them do not properly emulate any Javascript or worse do not load its Javascript.
  • File(s) was/were $0 before, but by the same version it's no longer $0, whether other mirror still downloadable or not. Does not apply opposite, if the file became $0 (again or just finally), cease reuploading the new $0 file(s), and link to there instead!
  • Company/Individual has a version control repository public, but upon further inspection it was just empty (does not count whether or not it has any text file such as README &/or LICENSE), only collecting Issues; Promises to submit the entire source code later but to this day still not fulfilled on a case by case basis. At this point, all rules above become void & you must re-link the correct direct download OR reupload the correct non-suspicious files even if the product is still on sale & not rare
  • Company/Individual has been bankrupt, so with their copyright restrictions
  • Company/Individual has been acquired by an open source company (us or somebody), miraculously, & removed every nonsense restriction as all as possible (e.g. uploading source code publicly)
  • Company/Individual has egregious greeds such as subcription only
  • Company/Individual downtook a precious products for an egregious reason, like an immature & snowflakes
  • Company/Individual is notorious for being litiguous (such as abusing DMCA reporting system & getting the content they deem infringing down at all cost; always trying to sue all consumer they think has infringed their so-entitleful copyrights). At this point, all rules above become void & you must re-link the direct download OR reupload the actual files even if the product is still on sale & not rare
  • Company/Individual is notorious for being genophobic (blocking everyone for certain likes & features, such as anti-kamatussa; blocking simply for others specification either for certain agendas or any over-exagerated sacred means; even does diligent measures to block that particular person on every platforms. At this point, all rules above become void & you must re-link the direct download OR reupload the actual files even if the product is still on sale & not rare, as well as all citizens are permitted to do their responsibilities.
  • Company/Individual has placed download link / purchase page behind advertise short links (ad fly esque). At this point, all rules above become void & you must re-link the direct download OR reupload the actual files even if the product is still on sale & not rare
  • Company/Individual has placed download link / purchase page behind a guild system (e.g. Discord) which often times each account has limited amount of joins without a premium or subscription to the guildverse (Nitro for Discord); Not to mention that some guild disallows alternate account &/or gamers does not like to create alt accounts just to complete the mission. At this point, all rules above become void & you must re-link the direct download OR reupload the actual files even if the product is still on sale & not rare
  • Company/Individual has packed the downloaded file (asset files, just simple single asset & plugins) in a suspicious executable binary (e.g. Never_gonna_give_you_up-Downloader.exe). At this point, all rules above become void & you must re-link the correct direct download OR reupload the correct non-suspicious files even if the product is still on sale & not rare
  • Company/Individual uses / relies on a transaction system that is either, some, or all: unrecognized, untrusted, unfamiliar (neither Gumroad, Patreon, Steam, Itch, etc. anything we have already trusted, verified, & familiar with), proprietary system (even if it directly benefits legit payment API like PayPal), Manual ala dark web mafia substance purchase style; (* on a case by case basis). At this point, all rules above become void & you must re-link the correct direct download OR reupload the correct non-suspicious files even if the product is still on sale & not rare

Additionally, we will not host* any eligible to sparsdat files directly in here due to location of our hosting here on Earth. If you have any question, Please consult with Admiral Zumi or representatives at X0p1r4t3 Support Center in Dasandim.

For paywallist & proprietarist, Perkedel & X0p1r4t3 will not be responsible for any event data loss & corruption caused by either disaster or intentional. Events like this is unfortunately a consequences from the aforementioned Company/Individual.
If any of your file(s) does / do violates any of the exception above, you will be punished not by us but also other gamers e.g. with redistribution for a particular loss or worse, as a whole.

* There may be expceptions if need be.

Step 2. Insert the ROMs into the emulator!

According to in your Simplified QEMU EOS, by default ROMs will be placed in the roms folder located next qemu-eos & qemu-eos-build.

joelwindows7@JOEL-ROG-GL503GE:~/sauce/simplified/qemu-eos/magiclantern$ ls  cam_config   docker_builder  ml_tests  disk_images  ml_qemu
joelwindows7@JOEL-ROG-GL503GE:~/sauce/simplified/qemu-eos/magiclantern$ ./ --help
usage: [-h] [-q QEMU_BUILD_DIR] [-r ROM_DIR] [-s SOURCE_DIR] [--boot] [--gdb] [-d [D_ARGS ...]]

Script to run Qemu with EOS support.

positional arguments:
                        Name of model to emulate, required

optional arguments:
  -h, --help            show this help message and exit
  -q QEMU_BUILD_DIR, --qemu-build-dir QEMU_BUILD_DIR
                        build dir for ML Qemu, default: /home/joelwindows7/sauce/simplified/qemu-eos-build
  -r ROM_DIR, --rom-dir ROM_DIR
                        location of roms, default: /home/joelwindows7/sauce/simplified/roms
  -s SOURCE_DIR, --source-dir SOURCE_DIR
                        location of Magic Lantern repo, used to find stubs etc for emulation. Default:
  --boot                attempt to run autoexec.bin from card (set cam bootflag), default: False
  --gdb                 start Qemu suspended, until gdb connects on port 1234
  -d [D_ARGS ...], --d-args [D_ARGS ...]
                        space separated list of qemu '-d' arguments. See help for qemu for complete list

say that in your working folder looks something like this:

joelwindows7@JOEL-ROG-GL503GE:~/sauce/simplified$ ls
magiclantern_simplified  qemu-eos  qemu-eos-build

Therefore, you'll need to create a directory called roms by typing mkdir roms. do make sure that folder is placed among your Magic Lantern workspace, NOT inside any of the source code folder.

joelwindows7@JOEL-ROG-GL503GE:~/sauce/simplified$ mkdir roms
joelwindows7@JOEL-ROG-GL503GE:~/sauce/simplified$ ls
magiclantern_simplified  qemu-eos  qemu-eos-build  roms

However, you can change where the rom folder would be loaded at with -r ROM_DIR or --rom-dir ROM_DIR where ROM_DIR (when going to execute if folder you choose where both of your ROM located at.

Copy the ROM files you just saved into that new roms folder or whereever you would later choose with -r argument. We recommend that you leave the setting at its default for now.

Step 3. (Optional, perhaps needed) Apply patch into the ROM files.

# Go into the `roms` folder
cd ~/sauce/simplified/roms

# write the BOOT.BIN from ROM1.BIN & then overwrite part of the ROM1 with stuffs from BOOT.BIN just there.
dd if=ROM1.BIN of=BOOT.BIN bs=64k skip=1 count=1
dd if=BOOT.BIN of=ROM1.BIN bs=64k seek=511

Step 4. Run the emulation

Once done, you can run the emulation.

# Make sure you're in the QEMU-EOS Magic Lantern folder
cd ~/sauce/simplified/qemu-eos/magiclantern

# Attempt to run this
# You must replace `YOUR_MODEL_ACCORDING_TO_HELP` (required) with available 
# models in the run qemu help. say your model is 1000D & you had both of the ROMs, so
./run_qemu 1000D

# & if you had different ROMs in another folder, you can have that too
./run_qemu -r ~/sauce/simplified/roms/200D 200D 
# the model name shall be placed the last as 
# that argument in the python script was programmed like that, to be positional.
# note once again, you may need to have magiclantern_simplified cloned too as well.




For the impatient: just follow the quick install guide from the download page.
For a more thorough description of the install process, including what to do when things go wrong, keep reading.

Before installing Magic Lantern you need to:


Read Carefully

May possibly damage your camera, Read instruction real carefully!

LED Blinking & Card door open on the camera, pay attention!
  • Read the entire guide before performing any steps.
  • You are responsible for any damage done to your camera.
  • Never delete the Magic Lantern files from the card! Format the card instead.
  • After opening the card door, always wait for LED confirmation (or for 5 seconds) before removing the card, even if your camera is turned off!!!
  • Additionally for NEW INSTALL, there is a bug regarding to libUSB which workaround is available according to This petabyt's thread reply

Right after opening the card door, Canon firmware accesses the card without turning on the LED (yes, with the main switch turned off). If you remove the card too early, the camera will freeze and will drain the battery, or even cause permanent damage! You will be running random code (remember you are loading executable code from the card), and we can't do anything about it without reflashing Canon firmware with our own code.

Get the right firmware version


NEW INSTALL (Work in Progress)

as in: This NEWER Install Instruction
Please check this guide above for up to date instruction. Instructions will be syndicated here for redundancy, in event of disaster.

Compatible for:

Newer ML ports & relatively new camera

  1. Connect the camera to a Windows 7/10 or Linux computer with a USB cable.
  2. Download mlinstall (
  3. On Windows, extract the files and run the EXE. On Linux, you'll need to set the .AppImage file as executable. Here's a quick tutorial: Here I click `Get Device Info`` to see if it can detect the device.
    Fig 1 - Result of Clicked `Get Device Info`
    Fig. 1 - Result of Clicked Get Device Info

On first run on Windows, it should not work. Here's what to do:

  1. DO NOT USE ZADIG for now! IT'S SLOW & DESTRUCTIVE!! use mcuee's libUSB instead! Learn more in petabyt's reply
  2. (Backup) ~~Download and run Zadig.~~
  3. (Backup) ~~On the Canon Camera device, replace WinUSB with libusb-win32 as in this GIF:
  4. (Backup) In order to revert this change, simply repeat the steps and choose WinUSB instead of libusb-win32. Some Windows software may fail to work if this change is not reverted.
  5. (Backup) Once you have verified that USB communication is working, click Enable Boot Disk.
  6. (Backup) In order to revert the camera to factory settings, click Disable Boot Disk.
    Fig. 2 - Enabling Bootdisk to the camera
    Fig. 2 - Enabling Bootdisk to the camera
  7. Unplug the camera SD card from the camera.
  8. Insert the camera SD card into your computer. You might need an adapter.
  9. Ensure that your SD card is named EOS_DIGITAL. mlinstall searches for a storage device named EOS_DIGITAL and writes to the first one it finds.
  10. In mlinstall, navigate to the Card tab and click Write card boot flags. This will write data to the SD card. It's a good idea to format the card in the camera first.
  11. In Linux, eject / unmount the card before removing it. Usually in your file manager left sidebar, you should see  (Eject) Button next to EOS_DIGITAL media. Click the  eject button to unmount the SD Card.
    Fig. 3 - Enabled Bootflag to the SD Card
    Fig. 3 - Enabled Bootflag to the SD Card
  12. Once you have written the card flags, you will need to download a build for your camera. Make sure that the model ID and firmware version of your camera matches the build. (you can check it in the Canon menu). You might need to downgrade or upgrade.
  13. Extract the Magic Lantern release zip file contents onto the SD card. Make sure that autoexec.bin and the ML folder are at the top directory, alongside DCIM.
    Fig. 4 - Basic folder structure of installed Magic Lantern in the SD Card
    Fig. 4 - Basic folder structure of installed Magic Lantern in the SD Card
  14. Insert SD Card into camera and turn it on. On first startup, ROM1 and ROM0 will be backed up. In the picture settings screen in M (Manual) mode, press the Q / Av button (or ο‡Έ DELETE/TRASH button).
Uninstalling Magic Lantern
  1. Format the card (and back up any data first!)
  2. Run mlinstall again and click Disable Boot Disk.

Note that mlinstall has a Destroy Card Boot Flags feature that can make the SD Card non-bootable. (revert it to normal setting) After you run it, you will not need to format your card.

1300D / Kiss X80 / Rebel T6

You may either have to downgrade or upgrade your firmware to a specific version. Here are some guides showing how to downgrade your firmware:

ccritix / critix: β€œTry to do a firmware update to version 1.1.0. (even if you have exactly this version on your device). Then you can try to test ML. This problem seems to exist on many devices. I suffered the same with my device. After an β€œupdate” to version 1.1.0, I was able to work on ML.”


as in: This Install Instruction Please check this guide above for up to date instruction. Instructions will be syndicated here for redundancy, in event of disaster.

Compatible for:

Any older cameras & cameras not listed on the New install above.

First install guide
Step 1. Preparing your camera
Step 2. Installation
Example of successful Magic Lantern installation
Step 3. Magic Lantern first startup
Installing Magic Lantern on other cards
Screenshot of Pelican's EOScard Utility

This table below explains where magic strings must be written depending on Filesystem type & version (done by tools above):

FAT version Volume Label = EOS_DEVELOP Bootcode+2 = BOOTDISK SCRIPT
FAT12/16 0x2b / 43 0x40 / 64 0x1f0
FAT32 0x47 / 71 0x5c / 92 0x1f0
ExFAT 0x82 / 130 0x7a / 122 0x1f0
BtrFS (unsupported) 0x??? / ??? 0x??? / ??? 0x???
ext3 (unsupported) 0x??? / ??? 0x??? / ??? 0x???
ext4 (unsupported) 0x??? / ??? 0x??? / ??? 0x???

VBR checksums must be updated for ExFat
SCRIPT is for Canon basic.

Updating Magic Lantern
Uninstalling Magic Lantern

DO NOT just delete the Magic Lantern files from the card!

If you do, the camera will freeze at startup and you'll have to take the battery out.

Please follow below instruction on how to properly uninstall Magic Lantern!

Uninstalling ML from one card
Uninstalling ML from the camera
Important notes

Further steps

You may wanted to learn the following stuffs if you'd like to go further & perhaps contribute:




by JOELwindows7
Perkedel Technologies

Markdown / Article Info

Info Value
Title How to Compile & Install Magic Lantern 2023 Working
Author JOELwindows7 (  @JOELwindows7; )
Description How to Compile & Install Magic Lantern 2023 Working Guaranteed working (minus 1 thing) how to build Magic Lantern No fatal error!
Date , (Edited , ; Expires in , ,
Keywords tech, fun, novelty, open source, gratis, free, MagicLantern, Canon, compile, fatal error
File /opt/build/repo/src/pages/apps/wceload/Canon/Compile/MagicLantern.mdx
URL /apps/wceload/Canon/Compile/MagicLantern
Mature Content? NO