Porting ROMs from one Android device to another — by titiansxd
A ROM port means taking a ROM built for Device A and making it work on Device B.
Device A (Source) Device B (Target)
ROM built for A → Adapted to run on B
e.g. Xiaomi Mi 11 → Xiaomi Redmi Note 10
Since both devices may share similar hardware (same SoC, same chipset family), a port can work with the right modifications to the device tree and vendor blobs.
| ROM | Source Device | Target Device | Android | Status |
|---|---|---|---|---|
| LineageOS 21 | Device A | Device B | Android 14 | ✅ Stable |
| crDroid 10 | Device A | Device B | Android 14 | 🔧 Beta |
| PixelOS | Device A | Device B | Android 13 |
cross-device-port/
├── README.md
├── guides/
│ ├── 01-requirements.md # What you need before starting
│ ├── 02-extract-blobs.md # How to pull vendor blobs
│ ├── 03-adapt-device-tree.md # Editing device tree for target
│ ├── 04-fix-common-issues.md # Common port bugs & fixes
│ └── 05-testing.md # How to test your port
├── patches/
│ └── port-fixes/ # Patches specific to porting fixes
├── scripts/
│ ├── extract-blobs.sh # Pull blobs from source device
│ └── check-compatibility.sh # Check if devices are compatible
└── compatibility/
└── device-matrix.md # Which devices can port to which
- ✅ Same SoC (e.g. both Snapdragon 678)
- ✅ Same chipset family (e.g. both SM6150 series)
- ✅ Same architecture (arm64)
- ✅ Similar partition layout
- Linux PC (Ubuntu 20.04+ recommended)
- ADB & Fastboot
- Python 3
- Git
# 1. Clone this repo
git clone https://github.com/titiansxd/cross-device-port
# 2. Extract blobs from source device (connect Device A via USB)
cd scripts
chmod +x extract-blobs.sh
./extract-blobs.sh
# 3. Check compatibility between devices
./check-compatibility.sh <source_codename> <target_codename>
# 4. Follow the guides in order
cat guides/01-requirements.md| Issue | Likely Cause | Fix |
|---|---|---|
| Bootloop | Wrong kernel | Use target device kernel |
| No Wi-Fi | Wrong blobs | Re-extract Wi-Fi blobs from target |
| No sound | Audio HAL mismatch | Copy audio configs from target tree |
| No SIM | RIL mismatch | Use target device RIL blobs |
| Camera FC | Camera blob mismatch | Port camera configs separately |
| Touch not working | Wrong touch firmware | Copy touchscreen driver from target |
1. Get ROM source for Device A
↓
2. Extract vendor blobs from Device B (target)
↓
3. Adapt Device A tree → Device B tree
- Change codename, model, fingerprint
- Update partition sizes
- Swap kernel (use Device B kernel)
↓
4. Build ROM with adapted tree
↓
5. Flash & test on Device B
↓
6. Fix bugs → repeat from step 4
- LineageOS team
- crDroid team
- All device maintainers whose work helped these ports
Flashing custom ROMs voids warranty and may brick your device. Always take a full backup before flashing. I am not responsible for any damage.
Apache 2.0