Xiaomi Redmi Note 9 - Merlin

Supports: Android 10, 11 (through GSI’s)
Device-specific ROMS: None at the moment, only GSI’s, due to the fact it is an MTK device.
Device-specific XDA Forums: https://forum.xda-developers.com/redmi-note-9
My own XDA guide: https://forum.xda-developers.com/redmi-note-9/how-to/faq-guides-bootloader-magisk-edxposed-t4176581

I am willing to give all the support I can, whether you need me on Windows 10 or Linux.
I own the device and am willing to experiment on it, as long as it’s not hard bricked and there’s a way to recover it for daily use.

1 Like

Also interested in installing /e/OS on a Redmi Note 9!

Android Version: 10 QP1A.190711.020
MIUI Version: MIUI Global 12.0.5Stable, (QJOEUXM)
Model: M2003J15SG
Base Band Version: MOLY.LR12A.R3.MP.V98.P71
Kernel Version: 4.14.141-g2dd0cee

Dear developers, I hope you’ll consider including this recent phone in your list.
Thanks and continue the excellent work

1 Like

I’m building right now an unofficial Q-build (android 10)
When all goes well, it will be ready in about 3 hours.
Are you willing to test this build when it’s finished? @Charts

Regards Edwin


You can test my build if you want to…

Thanks a lot for making it available so quickly!

I’ll try to install it but this will take some time, as I’m unexperienced. Today I just spent 6 hours trying to unlock the phone, it’s been a failure so far…

I’ll ask for help on this post.

Good luck, it will be a great experience…:+1:

Dear @itsclarence,
I resumed the installation after the phone was finally unlocked, but I don’t manage to enter TWRP recovery.
I first tried getting the Merlin .img file from the Internet (e.g. here) but this didn’t work. Then I realized there are some .img files in the folder your provided : boot, dtbo and vbmeta. Should I use these?
I understood that I can write files onto the phone by typing ‘fastboot flash recovery boot.img’ for example, but I’m not sure exactly what I should do, as ‘fastboot boot xxx.img’ then didn’t work.
Any help would be welcome :slight_smile:

No you don’t have to extract my build.zip.
You have to download the recovery Image for merlin and the vbmeta image.
Than use the commands for installing the recovery and vbmeta.
You can rename the recovery Image into for example merlin.img. Than you get :

fastboot flash recovery merlin.img
fastboot flash vbmeta vbmeta.img
fastboot flash misc misc.bin
fastboot boot merlin.img

Now flash my build unofficial-merlin.zip in twrp

hi, thanks I’ve now tried this, but I still don’t manage to enter TWRP afterwards, neither by typing ‘adb reboot recovery’, nor by pressing (Power) and (Volume+) for some seconds.
Instead, the phone always goes into Redmi-Recovery 3.0. I did it many times, tried several variations, it never worked. On some forums people complain that somehow the phone in enforcing Redmi-Recovery over TWRP and they get the same problem as I do.
Is there a trick, such as precise moment to press those buttons?
Can it be due to my current MIUI (Global 12.0.5)? Should I try to update, or maybe downgrade to MIUI 11?

and should I root the phone?

I wish I could help you, but I don’t own the device. Maybe someone in this community can help you out. Maybe this post can point you in the right direction.

Dear Edwin,
My girlfriend and I gave it more tries, many things happened, but as a summary :

  • we did something wrong while trying to enter TWRP, and we bricked the Redmi Note 9 (no !!)
  • we bounced back and bought another Xiaomi (a second-hand Redmi Note 7 for 80€)
  • we unlocked it and there was zero waiting time
  • we managed to install /e/OS for lavender on it

So unfortunately we didn’t get as far as to try your build for Merlin, but the phone bricking was independent of /e/OS, just our fault.

Now we understood the whole process and are ready to try degoogle more phones!!

Many thanks for your help

1 Like

Hi @itsclarence,

I am hoping to be able to test. I am on a nervous 7 day wait for the unlocking of:

Seller: Xiaomi Redmi Note 9 4GB/128GB Midnight Grey (UK Version + Official 2 Year Warranty) MTK Helio G85 + NFC sticker on the box.

About phone: Redmi Note 9 MIUI Global V12.0.7.0 (QJOMIXM)

From the Aida64 app: https://paste.ubuntu.com/p/Hyv4tBNb2k/

In short:
Device: merlinnfc
Hardware: mt6769z
Platform: mt6768
Product: merlinnfc_global

I am assuming the best estimate of the device code (until I unlock it) is my info from Aida64 app?

Could you possibly please advise if you think this is the correct ROM?

This rom is build on these spec’s…So it should be fine


1 Like

Thank you, @itsclarence, for sharing the device tree, that was great in giving me the confidence to proceed.

First off I bricked my new Redmi Note 9 shortly after the 7 day unlocking period.
I read a lot at XDA, still not certain enough to write up my method, but
fastboot erase misc
did allow me to eventually load a rather fragile TWRP, fragile in that it was inclined to crash on “Swipe to start”. I got quite used to
fastboot flash recovery recovery.img
I learned to switch out of manually, rather than any variant of fastboot boot/reboot …(N/W)

:warning: I believe
fastboot flash misc misc.bin
is the wrong instruction for models having MIUI above V12.0.5.0.

On now to flash /e/merlin.zip

Using TWRP-RedmiNote9-V12.0.6.0.QJOMIXM-20201213-wzsx15.zip

TWRP Wipe Data, Cache and dalvic

$ adb sideload e-0.15-q-20210310-UNOFFICIAL-merlin.zip
Total xfer: 1.00x
No reported error. Boot to system, did not work, returns to TWRP recovery mode…

TWRP Advanced wipe all, including data

$ ./fastboot flash system e-0.15-q-20210310-UNOFFICIAL-merlin.zip
Invalid sparse file format at header magic
error: write_sparse_skip_chunk: don't care size 708306307 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 574088579 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 439874947 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 305661315 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 171447683 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 37234051 is not a multiple of the block size 4096
Sending sparse 'system' 1/7 (131068 KB)            error: write_sparse_skip_chunk: don't care size 708306307 is not a multiple of the block size 4096
error: write_sparse_skip_chunk: don't care size 708306307 is not a multiple of the block size 4096
OKAY [  6.719s]
Writing 'system'                                   FAILED (remote: 'This partition doesn't exist')
fastboot: error: Command failed

In TWRP, on Reboot to system, I see “No OS installed! Are you sure you want to reboot?” I believe I have seen this before and accepted it is a TWRP bug. Reboot to system anyway, reboots, Redmi Logo 15 - 20 seconds, then reboots automatic to TWRP.
I have access to Reboot to bootloader.
fastboot devices and adb devices, both ok.
TWRP terminal is working, but I cannot think of commands which would throw light on system partition doesn’t exist.

I read a warning about not advised to format system partition, so I doubt I did that, uncertain. Edit x2 for clarity, I had wiped all with TWRP. “Auto format - Format all” within SP Flash Tool is the hazard. I never used such command.

After overnight reflection, am not quite sure what I should try next.

Transfer e-0.15-q-20210310-UNOFFICIAL-merlin.zip to SD card.
Use TWRP to install from SD card.
TWRP reports success.
Reboot to system.
Redmi Logo 15 - 20 seconds, then reboots automatic to TWRP. :disappointed:

TWRP log

Further Edit! I do see from this screenshot (although it is not present in the log) “Target” is mentioned as V11.0.2.0. This .2. may be inconsistent with my device. (Same as TWRP :warning: flash issue above.)

This must be the last Edit
It is my guess, that without a device tree running to V12.0.6.0. an approach like this will be required.

@itsclarence, sorry to reveal all the tears before bedtime during the process!

Now it is great, everything looks, well, perfect. :smile:
The fix was more simple than above. I just got a vendor firmware file (fw-vendor_merlin_miui_MERLINEEAGlobal_V12.0.3.0.QJOEUXM_74dd6bb502_10.0.zip) from MI Vendor Updater Downloads | Xiaomi Firmware Updater and allowed TWRP to flash it before and together with /e/merlin.img

I also stopped the first boot with power button as soon as I saw the animated /e/ (very hard to do).
Run /e/ Setup wizard and here we are:

Thank you so much!


After one month’s use, where the phone has performed very well, I decided to reinstall the above @itsclarence image to use as my main phone.

I wiped the phone and updated it to the latest found from official sources, MIUI V12.0.9.0.
The answer to my anti rollback issue was resolved by using an lk.img collected from a V12.0.4.0 ROM.
I used the unofficial and experimental TWRP-V12.0.6-wzsx15recovery.img and a patched vbmeta.img

Some of the drastic steps I thought I had to do including taking a backup of my IEME have proved unnecessary using the downgraded lk.img, and it means that /system/vendor/etc/device_features/merlin.xml and /merlinnfc.xml are currently present on the phone.

Credit and kudos to XDA Senior member VD171. Here is his FAQ, Guide and Solution centre for Redmi Note 9 | 10x-4g - merlin.

One point to note - do not allow the phone to boot to system at any time between start and end of the flash, so I copied e-0.15-q-20210310-UNOFFICIAL-merlin.zip onto my SD card before I started. It might be overkill but I did, TWRP, Wipe >> Advanced wipe >> Select: Data, Dalvik, Internal, Cache >> Swipe to wipe both before and after flashing merlin.zip.

At the end, TWRP Reboot to system, just worked.

Thank you so much @itsclarence.

1 Like

@itsclarence could you possibly provide the manifest xml that you used for this, I am trying to build for Redmi Note 9 using repo


Gr Edwin

Thanks I will try this now