Xiaomi Redmi 9A (xiaomi-dandelion)
File:Xiaomi-dandelion.jpg Xiaomi Redmi 9A (xiaomi-dandelion) | |
Manufacturer | Xiaomi |
---|---|
Name | Redmi 9A |
Codename | xiaomi-dandelion |
Model | M2006C3LG |
Released | 2020 |
Type | "handset" |
Hardware | |
Chipset | Mediatek Helio G25 (MT6762G) |
CPU | Octa-core (4x2.0 GHz Cortex-A53 & 4x1.5 GHz Cortex-A53) |
GPU | PowerVR GE8320 |
Display | 720 x 1600 IPS LCD |
Storage | 32GB |
Memory | 2GB |
Architecture | aarch64 |
Software | |
Original software | MIUI 12 |
Original version | Android 10 |
postmarketOS | |
Category | testing |
Pre-built images | no |
postmarketOS kernel | 6.x.x |
Unixbench Whet/Dhry score | 0.0 |
Contributors
- Paradoxvirus
Users owning this device
- Azuk1 (Notes: testing mainline)
- Paradoxvirus (Notes: testing port)
How to unlock device
How to enter flash mode
How to port device (overview)
1. Create pmbootstrap config files
2. Find the Linux kernel fork used by the device
3. Edit pmbootstrap config to point it to the kernel
4. Download the kernel
5. Compile the kernel
...
How to port device (in progress)
See official docs for up to date and more complete instructions. I recommend reading the installation guide, this guide and the official porting guide before running anything.
See also https://github.com/SheatNoisette/postmarket_redmi_9a/tree/main
Install pmbootstrap
What worked best for me was just using the latest version from Gitlab directly and not trying to install it.
git clone https://gitlab.postmarketos.org/postmarketOS && cd postmarketOS
./pmbootstrap.py --version
Initialize
./pmbootstrap.py init
As far as I can tell, this creates files in
$workdir/aports/device/testing/device-xiaomi-dandelion
$workdir/aports/device/testing/linux-xiaomi-dandelion
or
$workdir/cache_git/aports/device/testing/device-xiaomi-dandelion
$workdir/cache_git/aports/device/testing/linux-xiaomi-dandelion
and populates them according to the inputs you submitted.
Find the Linux kernel fork
If the device is supported by LineageOS, you can find the kernel on their GitHub repo. The same goes for other custom ROMs.
In this case, LineageOS does not support the device but the vendor (Xiaomi) open sources the kernels on https://github.com/MiCode/Xiaomi_Kernel_OpenSource.
Find the branch of the (same) repository that the kernel is hosted on and access it: https://github.com/MiCode/Xiaomi_Kernel_OpenSource/tree/dandelion-q-oss.
Tell pmbootstrap where the kernel is hosted
cd $workdir/cache_git/aports/device/testing/linux-xiaomi-dandelion
vim APKBUILD
Change the url, the _repository variable and the _commit variable in the APKBUILD so that they point to the latest commit in the branch of the git repo where the kernel is hosted.
< pkgver=4.9.190 --- > pkgver=3.0.0 26,27c26,27 < _repository="Xiaomi_Kernel_OpenSource" < _commit="8974b9164af90d94603900b229264ae879a83a83" --- > _repository="(CHANGEME!)" > _commit="ffffffffffffffffffffffffffffffffffffffff" 30c30 < $pkgname-$_commit.tar.gz::https://github.com/MiCode/$_repository/archive/$_commit.tar.gz --- > $pkgname-$_commit.tar.gz::https://github.com/LineageOS/$_repository/archive/$_commit.tar.gz
Tell pmbootstrap what version of the kernel you found
Find the kernel version from the Makefile in the GitHub repo. In this case, as of October 2024,
VERSION = 4
PATCHLEVEL = 9
SUBLEVEL = 190
This is equivalent to kernel version 4.9.190
Download the kernel configuration (defconfig)
In this kernel fork there are many defconfig files and I'm not sure which one to use, but I think it makes most sense to use the one called dandelion-defconfig, even though this one isn't mentioned in the build.config files that are in the root of the project.
wget https://raw.githubusercontent.com/MiCode/Xiaomi_Kernel_OpenSource/refs/heads/dandelion-q-oss/arch/arm64/configs/dandelion_defconfig -O $HOME/.local/var/pmbootstrap/cache_git/pmaports/device/testing/linux-xiaomi-dandelion/config-xiaomi-dandelion.aarch64
Check that it has been downloaded and saved correctly by opening it.
vim config-xiaomi-dandelion.aarch64
Download and verify the kernel
pmbootstrap checksum linux-xiaomi-dandelion
Remove the patches that fail
Run the following code to check which patches fail.
pmbootstrap kconfig edit linux-xiaomi-dandelion
Remove the patches that fail from the directory and from the APKBUILD.
Calculate new checksums.
pmbootstrap checksum linux-xiaomi-dandelion
Try again.
pmbootstrap kconfig edit
Add the patch that fixes the ncurses error
pmbootstrap kconfig edit linux-xiaomi-dandelion
The above line fails for me with the error Install ncurses (ncurses-devel) and try again.
, so I download the patch to the directory and add it to the APKBUILD file as described in the docs.
Regenerate the checksums to add the patch.
pmbootstrap kconfig checksum linux-xiaomi-dandelion
Retry.
pmbootstrap kconfig edit linux-xiaomi-dandelion
Build (compile) the kernel
Find or create patches to fix kernel errors
Compile with GCC6 if you can't make it compile
Extract and analyze the boot image
Get a boot image from TWRP, LineageOS or extract it from running android.