Xiaomi Redmi 12 (xiaomi-fire)

From postmarketOS Wiki


Xiaomi Redmi 12
Manufacturer Xiaomi
Name Redmi 12
Codename xiaomi-fire
Released 2023
Category testing
Pre-built images no
Original software Android
Original version 13 with Linux 4.19.191
Extended version 14 with the same kernel version
Hardware
Chipset MediaTek Helio G88 (MT6769H)
CPU 2x 2.0 GHz ARM Cortex-A75 & 6x 1.8 GHz ARM Cortex-A55
GPU Mali-G52 MC2
Display 1080 x 2460 IPS LCD
Storage 128/256 GB
Memory 4/8 GB
Architecture AArch64
Type handset
Features
USB Networking
Partial
Flashing
Works
Touchscreen
Works
Display
Works
WiFi
Broken
FDE
Broken
Mainline
Broken
Battery
Partial
3D Acceleration
Broken
Audio
Broken
Bluetooth
Broken
Camera
Broken
GPS
Broken
Mobile data
Broken
Internal storage
Works
SMS
Broken
Calls
Broken
USB OTG
Works
NFC
Broken
Sensors
Accelerometer
Broken
Magnetometer
Broken
Ambient Light
Broken
Proximity
Broken
Misc
Camera Flash
Broken
Ir TX
Broken
Ir RX
Broken
Memory Card
Works
Haptics
Broken
FOSS bootloader
Broken


Installation

Preparation

Entering the flash mode

When the phone is powered off, hold the Power and Volume Down button to enter into fastboot (bootloader) mode, or run adb reboot bootloader from Android.

Unlocking the bootloader

Unlock the bootloader using the official method with Mi Unlock Tool https://en.miui.com/unlock

You'll need to link your device with your Mi Account and wait 7 days to unlock the device.

Alternatively, you can also unlock the phone's bootloader using MTKClient to bypass the waiting, but this method isn't recommended overall, so do this on your own risk.

Flashing postmarketOS

Type pmbootstrap init and choose the following in the wizard:

Release channel: edge
Vendor: xiaomi
Device codename: fire

xfce4, MATE and LXQt are tested and work out of the box. Other UIs are not guaranteed to work.

After choosing an user interface and the rest, type the below command to begin downloading and preparing postmarketOS for installation

$ pmbootstrap install

Boot the phone in fastboot mode, connect it to the computer with a USB cable. Use fastboot devices or lsusb to verify that the phone is detected by the computer. It should detect as something like Google Inc. Xiaomi Mi/Redmi 2 (fastboot) in case with lsusb. If it is not detected, try another USB cable/USB port etc.

Now type the following commands to flash postmarketOS to your device.

$ pmbootstrap flasher flash_kernel
$ pmbootstrap flasher flash_rootfs

After the commands finished, finally type

fastboot reboot

to exit fastboot. You can alternatively just hold the power button until the device reboots.

That's it, if you get a boot splash and then the desktop you've chosen you successfully installed postmarketOS to your Redmi 12.

Installing Android after postmarketOS

After flashing postmarketOS, you won't be able to boot Android again. So here is how to bring Android back: download the stock fastboot ROM, unpack it, then flash the stock super.img and boot.img using the following commands:

fastboot flash super super.img

to flash the super, and

fastboot flash boot boot.img

to flash the boot image.

Graphical Interfaces

Interface Info Working
none Doesn't work. But gets stuck at the loading splash. N
GNOME 3 Unknown - Not tested
i3wm Works fine, but has the same battery issue as LXQt. Y
MATE Works fine, but the device will shut down if you open anything related to power management. P
Phosh Unknown - Not tested.
Plasma Mobile Unknown - Not tested.
Shelli Unknown / Not tested.
Sxmo Unknown - Not Tested.
Sway Wayland doesn't work on this device. N
Weston Unknown / Not tested
Xfce4 Works like expected, except it shows the battery as 1% and then shuts down afterwards if not plugged in. Y
LXQt Works, but also shuts down if the device is not plugged in. Y

Parts and their status

Touchscreen

Our device comes with 3 different touchscreens - Focaltech FT8720, Focaltech FT8725, and Novatek NT36xxx.

Currently, only the Novatek touchscreen works.

In case with FT8720, fts_ts seems to search for a firmware file called "focaltech_ts_fw_.bin" somewhere, even though it is in /lib/firmware/postmarketos and the cmdline has "firmware_class.path=/lib/firmware/postmarketos" parameter.

https://gitlab.com/postmarketOS/pmaports/-/issues/2608

UPDATE: Touchscreen works in MATE after waiting for screen to completely turn off.

Battery

UPower detects if the battery is charging or not, but the battery percentage is always at 0%. In case with LXQt, if you power on the device while it is on battery, it will boot the LXQt, but after a few seconds the device will just shut down. But if you power on the device while it is plugged in, and unplug it only after booting postmarketOS, it works on battery as usual.

Audio

Needs "aw87xxx_acf.bin" firmware file. The firmware package would later be updated.

Miscellaneous

Partition layout

This device uses A/B partitions and dynamic partitions, the recovery is inside boot. All files in /dev/block/by-name are just links to actual partitions in /dev/block.

ls -lrt /dev/block/by-name
mmcblk0 -> /dev/block/mmcblk0
vbmeta_system_a -> /dev/block/mmcblk0p7
super -> /dev/block/mmcblk0p57
md_udc -> /dev/block/mmcblk0p12
boot_a -> /dev/block/mmcblk0p27
vbmeta_vendor_a -> /dev/block/mmcblk0p8
vbmeta_a -> /dev/block/mmcblk0p6 
otp -> /dev/block/mmcblk0p59
protect2 -> /dev/block/mmcblk0p19
opcust -> /dev/block/mmcblk0p50
sspm_b -> /dev/block/mmcblk0p40
vbmeta_b -> /dev/block/mmcblk0p9
spmfw_a -> /dev/block/mmcblk0p22
flashinfo -> /dev/block/mmcblk0p60
tee_a -> /dev/block/mmcblk0p30
scp_b -> /dev/block/mmcblk0p39
dtbo_b -> /dev/block/mmcblk0p45
vbmeta_system_b -> /dev/block/mmcblk0p10
seccfg -> /dev/block/mmcblk0p20
scp_a -> /dev/block/mmcblk0p23
dtbo_a -> /dev/block/mmcblk0p29
frp -> /dev/block/mmcblk0p5
rescue -> /dev/block/mmcblk0p49
persistbak -> /dev/block/mmcblk0p17
proinfo -> /dev/block/mmcblk0p33
mmcblk0boot0 -> /dev/block/mmcblk0boot0
mem -> /dev/block/mmcblk0p55
logo_b -> /dev/block/mmcblk0p47
ffu -> /dev/block/mmcblk0p53
protect1 -> /dev/block/mmcblk0p18
para -> /dev/block/mmcblk0p3
nvdata -> /dev/block/mmcblk0p15
boot_para -> /dev/block/mmcblk0p35
md1img_b -> /dev/block/mmcblk0p37
gz_b -> /dev/block/mmcblk0p41
efuse -> /dev/block/mmcblk0p34
boot_b -> /dev/block/mmcblk0p43
vbmeta_vendor_b -> /dev/block/mmcblk0p11
metadata -> /dev/block/mmcblk0p13
mmcblk0boot1 -> /dev/block/mmcblk0boot1
misc -> /dev/block/mmcblk0p1
vendor_boot_b -> /dev/block/mmcblk0p44
md1img_a -> /dev/block/mmcblk0p21
logo_a -> /dev/block/mmcblk0p31
gz_a -> /dev/block/mmcblk0p25
vendor_boot_a -> /dev/block/mmcblk0p28
userdata -> /dev/block/mmcblk0p58
spmfw_b -> /dev/block/mmcblk0p38
oops -> /dev/block/mmcblk0p56
expdb -> /dev/block/mmcblk0p4
opconfig -> /dev/block/mmcblk0p51
lk_a -> /dev/block/mmcblk0p26
tee_b -> /dev/block/mmcblk0p46
persist -> /dev/block/mmcblk0p16
nvcfg -> /dev/block/mmcblk0p14
gsort -> /dev/block/mmcblk0p52
devinfo -> /dev/block/mmcblk0p54
cust -> /dev/block/mmcblk0p48
sspm_a -> /dev/block/mmcblk0p24
sec1 -> /dev/block/mmcblk0p32
nvram -> /dev/block/mmcblk0p36
lk_b -> /dev/block/mmcblk0p42
countrycode -> /dev/block/mmcblk0p2
preloader_a -> /dev/block/mmcblk0boot0
preloader_b -> /dev/block/mmcblk0boot1

Community info

Contributors

  • Buildingat90degreesC (Currently running LineageOS 21 GSI on it)
  • Neokitty

Users owning this device


See also