FP6 /e/OS installation tips and checklist

Hi everyone,

My apologies if this topic has already been covered before. I looked around this forum as well as the Fairphone forums to get some guidance and found some answers, but I still had a few questions that I hope the community here might be able to help me with.

I bought a Fairphone 6 last week with Android preinstalled and immediately set out to install /e/OS. This was the first time I have installed a custom OS on a phone, and unfortunately I managed to hard-brick the phone.

I followed the guide Install /e/OS on a Fairphone The Fairphone (Gen. 6) - “FP6” and here is a quick summary of my environment and the steps I carried out.

Environment:

Windows 11 Laptop

Steps:

  1. Installed Android SDK Platform-Tools to get adb and fastboot.

  2. Added Platform Tools folder to my system PATH for easier access to adb and fastboot commands.

  3. Installed Google USB Drivers and Universal ADB Drivers from clockworkmod’s website.

  4. This might’ve been overkill but I had some initial issues with adb not finding my device so this was part of my solution.

  5. Ran initial setup of FP6 and updated to latest Android version with Security patch: 2025-06-05.

  6. Enabled Developer options on FP6.

  7. Enabled OEM unlock on FP6 with Bootloader Unlock code generated from Fairphone website.

  8. Enabled USB debugging on FP6.

  9. Set Default USB configuration to File transfer.

  10. Downloaded /e/OS build : A15 official (Security patch: 2025-06-05), specifically IMG-e-3.0.4-a15-20250708507307-official-FP6.zip from link in the FP6 Installation Guide.

  11. Followed all steps in Install /e/OS on a Fairphone The Fairphone (Gen. 6) - “FP6” under section Unlocking the bootloader.

  12. Everything seemed fine here, no obvious problems or errors encountered.

  13. Unzipped the downloaded build archive and confirmed that the extracted dir contained the listed directories and files (steps 1 & 2 in Install /e/OS on a Fairphone The Fairphone (Gen. 6) - “FP6” under section Installing /e/OS)

  14. Booted phone into bootloader/fastboot mode and ran installer script in Windows 11 Git Bash CLI (MinGW).

Installation log:


$ ./flash_FP6_factory.sh

INFO: You are using MinGW on Windows.

INFO: Looking for connected device(s)...

INFO: One Fairphone 6 in fastboot mode found (serial number: <serial>).

Info: Your phone is in regular bootloader mode.

Sending 'bluetooth_a' (812 KB) OKAY [ 0.041s]

Writing 'bluetooth_a' OKAY [ 0.002s]

Finished. Total time: 0.061s

Sending 'bluetooth_b' (812 KB) OKAY [ 0.047s]

Writing 'bluetooth_b' OKAY [ 0.002s]

Finished. Total time: 0.066s

Click for full log

Sending 'devcfg_a' (47 KB) OKAY [ 0.004s]

Writing 'devcfg_a' OKAY [ 0.001s]

Finished. Total time: 0.023s

Sending 'devcfg_b' (47 KB) OKAY [ 0.003s]

Writing 'devcfg_b' OKAY [ 0.002s]

Finished. Total time: 0.021s

Sending 'dsp_a' (65536 KB) OKAY [ 4.200s]

Writing 'dsp_a' OKAY [ 0.031s]

Finished. Total time: 4.246s

Sending 'dsp_b' (65536 KB) OKAY [ 3.630s]

Writing 'dsp_b' OKAY [ 0.032s]

Finished. Total time: 3.677s

Sending 'modem_a' (180876 KB) OKAY [ 8.441s]

Writing 'modem_a' OKAY [ 0.090s]

Finished. Total time: 8.547s

Sending 'modem_b' (180876 KB) OKAY [ 13.088s]

Writing 'modem_b' OKAY [ 0.097s]

Finished. Total time: 13.202s

Sending 'xbl_a' (1138 KB) OKAY [ 0.361s]

Writing 'xbl_a' OKAY [ 0.008s]

Finished. Total time: 0.387s

Sending 'xbl_b' (1138 KB) OKAY [ 0.215s]

Writing 'xbl_b' OKAY [ 0.009s]

Finished. Total time: 0.240s

Sending 'tz_a' (3932 KB) OKAY [ 0.566s]

Writing 'tz_a' OKAY [ 0.003s]

Finished. Total time: 0.585s

Sending 'tz_b' (3932 KB) OKAY [ 0.915s]

Writing 'tz_b' OKAY [ 0.003s]

Finished. Total time: 0.934s

Sending 'hyp_a' (1642 KB) OKAY [ 0.104s]

Writing 'hyp_a' OKAY [ 0.002s]

Finished. Total time: 0.125s

Sending 'hyp_b' (1642 KB) OKAY [ 0.126s]

Writing 'hyp_b' OKAY [ 0.002s]

Finished. Total time: 0.144s

Sending 'keymaster_a' (430 KB) OKAY [ 0.317s]

Writing 'keymaster_a' OKAY [ 0.002s]

Finished. Total time: 0.336s

Sending 'keymaster_b' (430 KB) OKAY [ 0.236s]

Writing 'keymaster_b' OKAY [ 0.002s]

Finished. Total time: 0.253s

Sending 'abl_a' (239 KB) OKAY [ 0.007s]

Writing 'abl_a' OKAY [ 0.002s]

Finished. Total time: 0.032s

Sending 'abl_b' (239 KB) OKAY [ 0.007s]

Writing 'abl_b' OKAY [ 0.001s]

Finished. Total time: 0.025s

Sending 'aop_a' (311 KB) OKAY [ 0.034s]

Writing 'aop_a' OKAY [ 0.002s]

Finished. Total time: 0.051s

Sending 'aop_b' (311 KB) OKAY [ 0.137s]

Writing 'aop_b' OKAY [ 0.001s]

Finished. Total time: 0.157s

Sending 'featenabler_a' (102 KB) OKAY [ 0.008s]

Writing 'featenabler_a' OKAY [ 0.001s]

Finished. Total time: 0.027s

Sending 'featenabler_b' (102 KB) OKAY [ 0.027s]

Writing 'featenabler_b' OKAY [ 0.001s]

Finished. Total time: 0.045s

Sending 'imagefv_a' (51 KB) OKAY [ 0.008s]

Writing 'imagefv_a' OKAY [ 0.002s]

Finished. Total time: 0.027s

Sending 'imagefv_b' (51 KB) OKAY [ 0.005s]

Writing 'imagefv_b' OKAY [ 0.002s]

Finished. Total time: 0.025s

Sending 'multiimgoem_a' (11 KB) OKAY [ 0.001s]

Writing 'multiimgoem_a' OKAY [ 0.005s]

Finished. Total time: 0.024s

Sending 'multiimgoem_b' (11 KB) OKAY [ 0.002s]

Writing 'multiimgoem_b' OKAY [ 0.005s]

Finished. Total time: 0.023s

Sending 'qupfw_a' (59 KB) OKAY [ 0.005s]

Writing 'qupfw_a' OKAY [ 0.001s]

Finished. Total time: 0.023s

Sending 'qupfw_b' (59 KB) OKAY [ 0.006s]

Writing 'qupfw_b' OKAY [ 0.002s]

Finished. Total time: 0.025s

Sending 'uefisecapp_a' (192 KB) OKAY [ 0.011s]

Writing 'uefisecapp_a' OKAY [ 0.002s]

Finished. Total time: 0.030s

Sending 'uefisecapp_b' (192 KB) OKAY [ 0.012s]

Writing 'uefisecapp_b' OKAY [ 0.001s]

Finished. Total time: 0.031s

Sending 'xbl_config_a' (300 KB) OKAY [ 0.022s]

Writing 'xbl_config_a' OKAY [ 0.006s]

Finished. Total time: 0.045s

Sending 'xbl_config_b' (300 KB) OKAY [ 0.019s]

Writing 'xbl_config_b' OKAY [ 0.005s]

Finished. Total time: 0.041s

Sending 'aop_config_a' (19 KB) OKAY [ 0.002s]

Writing 'aop_config_a' OKAY [ 0.001s]

Finished. Total time: 0.021s

Sending 'aop_config_b' (19 KB) OKAY [ 0.002s]

Writing 'aop_config_b' OKAY [ 0.002s]

Finished. Total time: 0.021s

Sending 'cpucp_dtb_a' (11 KB) OKAY [ 0.001s]

Writing 'cpucp_dtb_a' OKAY [ 0.001s]

Finished. Total time: 0.020s

Sending 'cpucp_dtb_b' (11 KB) OKAY [ 0.002s]

Writing 'cpucp_dtb_b' OKAY [ 0.002s]

Finished. Total time: 0.020s


Sending 'uefi_a' (2835 KB) OKAY [ 0.110s]

Writing 'uefi_a' OKAY [ 0.003s]

Finished. Total time: 0.129s

Sending 'uefi_b' (2835 KB) OKAY [ 0.084s]

Writing 'uefi_b' OKAY [ 0.003s]

Finished. Total time: 0.104s

Sending 'vm-bootsys_a' (502200 KB) OKAY [ 22.678s]

Writing 'vm-bootsys_a' OKAY [ 0.250s]

Finished. Total time: 22.954s

Sending 'vm-bootsys_b' (502200 KB) FAILED (Write to device failed in SendBuffer() (no link))

fastboot: error: Command failed

ERROR: Could not flash the vm-bootsys_b partition on device c006dc30.

ERROR: Please unplug the phone, take the battery out, boot the device into

ERROR: fastboot mode, and start this script again.

ERROR: (To get to fastboot mode, press Volume-Down and plug in the USB-C)

ERROR: (cable until the fastboot menu appears.)

ERROR: Aborting now (press Enter to terminate).

Now I am not sure if the problem was caused by a bad laptop USB port, a bad cable, MinGW messing up or my USB port or that I didn’t disable USB power-saving settings in Windows Device Manager, or anything else. In any case, I didn’t have any screwdrivers available at this point to open up the back and disconnect the battery as the script output suggested. Instead, I unplugged the cable, turned off the phone and tried booting it up again to try restarting the script. This is where the real problem started where the phone would not boot up no matter what button or button + cable combination I tried. After plugging the phone into the PC I noticed the phone’s name in the Device manager was QUSB_BULK_CID:<cid>_SN:<sn>, which I understood to mean that the phone was in EDL mode and would not boot into Fastboot mode anymore, and you would need a Firehose file to restore the phone. I sent the phone to the FP service center to get it fixed and just got it back, and now I am considering trying to install /e/OS a second time (I am very stupid and persistent).

Avoiding hard-bricking:

I just wanted to get your feedback and summarize some steps and measures I can make to reduce the risk of hard-bricking the phone again. These are the steps I have written down for myself.

  1. Use a new, short cable (I bought the USB-C 3.2 Long Life Charging & Data (20Gb/s) Cable 1m from Fairphone which I intend to use).

  2. Don’t touch the phone or cable at all during installation.

  3. Run installation on Linux instead of Windows (I understood that this is more reliable/stable?)

  4. Disable USB power-saving settings on PC

  5. Use a USB 2.0 port on PC (I think 2.0 ports are more reliable?)

Is there any measure/tip I have missed here that can be helpful?

Q1:

I also have a question with regards to the installation script’s console output tip to unplug phone, remove battery, boot device and restart script. Can this actually work if the installation is interrupted for some reason, as it was when I tried? What’s the difference between removing the battery and just powering off the device in this situation? And also just to recap the tip, I am supposed to:

  1. Unplug phone

  2. Remove battery

  3. Put battery back in

  4. Press Volume-Down and plug cable back in at the same time

  5. Restart script

1 Like

You have raised many points but did you mention anti-rollback?

As for a preinstall checklist for following readers, I propose

Take a screenshot from the FairphoneOS showing the Android Security Patch Level at the time of unlocking.

This will seem an odd suggestion if one has not noticed the Red coloured Caution on the install page

:warning: Please read that caution. This post discusses the issue (answered) Install /e/ on FP5 with newer Security Patches

3 Likes

I also just got a FP6 with the latest stockOS (FP6.QREL.15.105.0). This version had a security patch date of June 5, 2025. I unlocked the bootloader and installed the latest official e/OS version 3.0.4. I then checked the date of the security patch and it reported June 1, 2025. This is strange but technically the security patch in e/OS v3.0.4 is thus 4 days older than that of the stock OS, which makes me anxious about relocking the bootloader. I will probably wait for v3.1 before attempting to relock the bootloader. See this thread in the Fairphone forum

2 Likes

This post Device is corrupt - stuck in fasboot screen - #13 by tcecyk supports the view that you are right not to lock the bootloader.

Connected, clarification of this 4 day anomaly was asked for here Please put the complete date of the security patch date in the release notes

Thanks for your reply aibd. Other than verifying that the security patch version on the phone matches the /e/OS build, is there anything else you can think of that could minimize the risk for hard-bricking?

Do you know if the battery trick might work for an interrupted install, or are you basically f*ed?

I believe that “trick” is to ensure that you make a totally fresh start.

In the case that became necessary due to failure to flash all partitions, apart from the hardware considerations you mentioned, ensure that your PC has plenty of RAM and if being very cautious buy a “high capacity” cable. However a failure to flash should not be a killer.

The primary risk of bricking would occur if the script went on to lock your boorloader despite you knowing that would result in failure.

Putting it another way bricking is associated with locking not installing.

Proviso Assuming FP6 behaves the same as older Fairphones 4 and 5.

Being pedantic /e/ must be “in advance of or equal”.

You say that your bricking event was only a week ago but this post and thread indicate that it may have been difficult to be certain of some dates, idk. Install e/OS on Fairphone 6 - #33 by AnotherElk

I did the same path you did, but I locked the bootloader at the end. It worked fine. If you keep ADB access disabled your software security (in-OS) is still pretty tight.

Bootloader locking is specifically to defend against physical attacks, e.g. your phone getting stolen. It is however not perfect so long as /e/OS is a userdebug build instead of user: “adb root” option in recovery means that a physical attacker can dump the data partition and brute force it on another device (if I understand correctly). This only applies until the announced switch to user - which is already under development.

Accessing the data without your consent would require a highly motivated attacker in any case, and if you have that kind of attention, I would recommend setting a very long password as a screen lock in order to make the encryption key hard to brute force.

This can then be combined with finger print login for ease of use; that doesn’t affect the encryption key AFAIK.

As it stands, /e/OS can’t be set up to prevent a factory reset, whether the bootloader is locked or not. My take here is that if the phone gets stolen, I’m probably not getting it back anyway, so it makes no real difference to me. The data security aspect I cover with encryption key length and other measures.

Protip: the main feature of a password that decides how hard it is to brute force is length. Pick a combination of memorable words, or a sentence/motto, or other things that are both easy to remember and long. Think like a song lyric.

To prevent stirring the pot on the constant security vs. privacy discussions, I want to add here that security and privacy are not the same, and the most secure options (e.g. GrapheneOS, making use of the most advanced crypt hardware) are markedly worse for privacy. Both have legitimate use cases, and unless you are fighting off some incredibly motivated attackers, the difference is really just FP6 + /e/OS is more private.

If someone really, genuinely requires such high security that /e/OS can’t fit your needs - then they should have been aware of this before purchasing the phone, looking at the various hardware backed cryptography hardwares, etc.

As a final note, if someone does worry about such motivated attackers, I would like to point out that state actor-tier attackers can subpoena your data from the cloud mob bosses like Google. And data that they never had, they cannot provide.

This article has smarter people than myself philosophizing: If You Don’t Want Your Data Sold, Fairphone 6 Should Be Your Next Phone - iFixit

I initially got my FP6 with stock Android OS and proceeded with bootloader unlocking in order to install e/OS. After installing e/OS v3.0.4 I did NOT relock the bootloader because the SPL of v3.0.4 was older (01.06.2025) than that of the stock OS (05.06.2025). Now I enabled the test canal in dev options and installed the test build of v3.1. This worked well and this version reports a security patch level with a date of 01.07.2025. So technically, I should now be allowed to relock the bootloader without bricking the phone, right? But is it okay to relock the bootloader on a test build or should I wait for the stable release of v3.1.1? By the way, is it okay to update via OTA from a test build (v3.1) to the next stable release (v3.1.1) when it will become available or is it preferable to use OTA only from one stable release to the next?

Locking and testing do not go hand in hand.

I suggest you get out of the testing channel without locking straight away. Not to be too harsh; testing is for those who know the risks without guidance at this forum level.

We know that the 3.1 build was held for further development but we don’t know the underlying issue. Further FP6 has fundamental build issues (related to it being a very new device) which may change for production.

Now wait patiently and hope that the “production” 3.x.x build arrives without incident.

Should the System Updater fail for any reason, you can then just “new install”.

  • (Please bear in mind that I have broken the rules by even answering you regarding a release candidate)

OK sorry, didn’t know this was not the place to discuss testing builds. I’ll make a few more test with 3.1 and then get back to stable 3.0.4, all without relocking the bootloader.

Now when the stable v3.1.1 will land I’ll proceed with bootloader relocking. However something is still unclear for me in the FP6 install documentation. After having installed e/OS, the doc mentions

Once you have completed the above steps and before rebooting you can lock your Bootloader.

When I initially installed stable v3.0.4, the phone did reboot on its own at the end of the installation. It did not wait for my input (as mentionned in the doc). So if that happen again after installing the stable v3.1.1, is it enough to reboot in fastboot and proceed with bootloader relocking or is there anything special to do once the OS has been booted once after installation? I seem to remembered having read that booting into the OS would set fastboot flashing get_unlock_ability=0. Is this correct? If so, how can I set it back to 1?

“Late lockers” face a hazard of “device state” perhaps read the two links here Installed 3.0.2 official and tried to lock bootloader - #5 by aibd and the follow on posts.

1 Like

Great thanks! Now I just need to wait for the stable release of v3.1.1

The unlock ability should stay =1, if it says 0 definitely don’t re-lock. Mine stayed =1. Check before you lock, you’ll be alright.

I’ve been on the test channel (by error) for a few days and I’d like now to revert to the official v3.0.4 doing a clean install. My bootloader is still unlocked and when I run fastboot flashing get_unlock_ability, I do get 1. So I thought I would be all set to reinstall v3.0.4. However when I attempt to reinstall it using the flash_FP6_factory.sh script, I get

INFO: You are using a Linux distribution.
INFO: Looking for connected device(s)...
INFO: One Fairphone 6 in fastboot mode found (serial number: XXXXXXX).
Info: Your phone is in regular bootloader mode.
Error: Your device's bootloader is still locked.
Please follow the instructions to unlock the bootloader!
Error: Your phone is not ready for flashing yet (see above), aborting...

But if I run fastboot flashing unlock_critical, I get

FAILED (remote: '	Device already : unlocked!')
fastboot: error: Command failed

So my bootloader is seen both as locked and unlocked… What am I doing wrong? Does it mean I have to flash FPOS back and then do the bootloader procedure all over again? Note that currently (in e/OS), the OEM unlock option in dev options is greyed out but as mentionned, I did not relock the bootloader when installing e/OS the first time.

EDIT:
My bootloader is confirmed to still be unlocked: when running fastboot oem device-info, I get

(bootloader) Verity mode: true
(bootloader) Device unlocked: true
(bootloader) Device critical unlocked: true
(bootloader) Charger screen enabled: true
OKAY [  0.000s]
Finished. Total time: 0.000s

Also, when running fastboot getvar unlocked, I get

unlocked: yes
Finished. Total time: 0.004s

This last command is exactly what is being checked in the install script:

if ("${FASTBOOT_BIN}" getvar unlocked 2>&1 | grep -q no); then
      echo "Error: Your device's bootloader is still locked."
      echo "Please follow the instructions to unlock the bootloader!"
      PHONE_IS_READY=false
fi

But for some reason, the script interpret the output of this command as a “no”

I would treat this as a script issue. If you search forum posts for ${FASTBOOT_BIN you will find many inconclusive posts. I can only assume that this is some problem with the platform-tools install (maybe distro related, idk). The /e/ recommendation is Installing adb and fastboot on a Linux PC. (Some have asserted that this is a problem with the use of ${FASTBOOT_BIN in the script – but the script works for many users.)

However Did you use this machine for your initial fp6 install ?? Did you change or update the distro since ??

As you added your complex problem to a “tips and checklist” thread I find it a bit difficult to follow your story. Your initial mistake of allowing “Testing channel” is expected to undo naturally when e-3.1.x is released as long as you are sure to cancel that toggle in developer options.

Yes I used the same laptop to install e/OS on the FP6 initially, and I did not update the distro since. The plateform tools were installed using the recommended approach (i.e. from android site) and were not updated afterwards too. It is a bit strange that it worked on the initial install and not this time.

I’ve disabled the test channel in Dev options. However, it seems that I cannot simply upgrade from a testing build to the next stable release as described in the doc, because test builds are signed with different keys. So I guess I have to do a clean install using fastboot. But I’m 100% sure my bootloader is still unlocked so I guess I can safely bypass the part that checks the bootloader status in the install script. Ideally I’d like to reinstall v3.0.4 official (without relocking the bootloader) and I’ll relock it after installing v3.1.x when it gets released as the security patch will be updated.

1 Like

Hi there,

I bought a FP6, I used to be a user of FP3 and FP4 before, I used /e/OS on both of them so I am not that new to installations. However, after following the manual, I end up with a unlocked FP6 (that’s what the bootloader screen says) in FastBoot Mode, but “fastboot devices” does not find the device at all. Even trying on two different computers, one with Linux and one with Windows 11, even rotating cables. “adb devices” lists my phone without issues, btw. Anything else I can do? Thanks.

As a side note, there is no SIM in the phone yet.

The expectation is that

fastboot devices

will find the device as long as it is in Fastboot mode aka Bootloader. Big green START at top of screen.

Thanks for your reply.

To be precise: I am on my bootloader screen telling me “FastBoot Mode” and unlocked. There “fastboot devices” shows no results, “adb devices” is successful when the stock ROM is booted.

On Widows only [Solved] Windows does not see my phone in Fastboot mode