Hi,
Le mercredi 17 février 2016 15:33:18 UTC+1,
sylvain.joff...@gmail.com a écrit :
>
> I'm interested in what you have found about this phone. I want to have FOS 2.5 on this phone and be able to get the SMS (French Free carrier) because it does'nt work well with alcatel build.
>
> Thank you !
Allright, let's go.
There are two ways to get FxOS 2.5 running on Fire E: rebuilding everything from source or upgrading selected components. I'll detail this last approach now, as rebuilding everything from source requires information that I'm still lacking at the moment.
Prerequisite is that you _need_ OEM FxOS 2.0 build [1] installed and running before going further. There's _no_ way to go without it. Indeed, OEM FxOS 1.3 build is based on Android Jelly Bean 4.3 r3 (build JLS36C) whereas OEM FxOS 2.0 build is based on newer Android Kitkat (KK) 4.4.2 r2 (build KVT49L). The reason is that we'll upgrade Gecko/Gaia component whereas Gonk layer will be kept untouched. And since we'll be using Gecko/Gaia component from Mozilla Flame, we must ensure that we're running the same Gonk layer to prevent issues as much as possible.
But why use Gecko/Gaia component from Mozilla Flame, may you ask? Well, because as Mozilla's reference phone, Flame has probably the best FxOS support, with FxOS builds readily available. And also because, luckily enough, Flame and Fire E seem close siblings. Indeed, they're designed/manufactured by the same company: TCL. More exactly T2Mobile for Flame and TCT (standing for TCL Communication Technology) Mobile Limited for Fire E, both 100% subsidiaries of TCL. As another evidence of this close relationships, Flame is provided with Alcatel OneTouch-branded battery pack. And Alcatel OneTouch is the brand TCT-manufactured phones are sold under (e.g. Alcatel OneTouch 6015X for Fire E). So, I _think_ that Fire E can be seen as the consumer version of Flame (targeted at developers). Hardware seems very close too, with the exception of smaller 512MB (fixed) RAM on Fire E vs. 256MB-1GB (adjustable) on Flame, NFC support on Flame (none on Fire E) and bigger qHD (960x540 pixels) display on Fire E vs. FWVGA (854x480 pixels) on Flame. Here, we're lucky again as pixel ratio is the same (GAIA_DEV_PIXELS_PER_PX 1.5) between Flame and Fire E, so Gaia component from Flame can be used as-is.
Now, why KK-based Gonk is important? Well, because FxOS 2.x builds for Flame are KK-based. In fact, FxOS 2.0 v18D base image for Flame [2] was built on Dec. 15, 2014 while OEM FxOS 2.0 for Fire E was built on Dec. 12, 2014 so only 3 days earlier. And both are based on same Android KK KVT49L build. Pretty close, isn't it? BTW, size of /system partition on eMMC is exactly the same between Flame and Fire E, though located at different sectors. Additionally, partition names and numbering are also the same.
Ready for action? I assume that you have an external SD inserted in your Fire E. I assume that you're comfortable with Linux, familiar with adb and fastboot and that you know how to backup and unbrick your phone. I also assume that you already have backup copies of /boot, /system and /custpack partitions. For this, you need to get ClockWorkMod (CWM) recovery [3] of Alcatel OneTouch 6014X "Idol 2 Mini L" phone (Fire E's Android variant). Using CWM recovery, you can gain root access with adb when required. Upgrading Gecko/Gaia while keeping Gonk untouched will require altering /system and /custpack partitions (and /boot in one occasion). While most (all?) FxOS phones are hosting FxOS files on unique /system partition, these are spread across two distinct /system and /custpack partitions on Fire E, with symlinks from /system to /custpack for some of them. In short, Gonk/Gecko is hosted on /system on Fire E, whereas Gaia is hosted on /custpack. This is a major difference from FxOS standard layout, hence the reason I still don't have a working build configuration to rebuild everything from source and why we cannot use shallow-flash.sh script [4] as-is.
Disclaimer: Once upgraded to FxOS > 2.0, you'll lose time keeping between reboots or resume when SIM is locked and WiFi disconnected. You'll probably also lose A-GPS feature and probably other things that I didn't noticed yet ;-) Indeed, /system/b2g/distribution/bundles folder contains four... bundles: b2g_time, location, settings and telephony, the exact purpose isn't known to me. I know for sure that b2g_time bundle normally helps in keeping time while SIM is locked and WiFi disconnected. But on Fire E, this isn't sufficient: b2g_time bundle works in conjunction with telephony bundle to achieve this successfully. telephony bundle is probably used for other things telephony-related, but I don't know exactly what. location bundle is probably related to A-GPS. settings is perhaps related to customization in OEM FxOS build, such as integrated Application Manager, Torch webapp, etc. All these bundles rely on proprietary binaries by Qualcomm, compatible with Gecko 32 API only, as found in FxOS 2.0. As soon as you upgrade to FxOS > 2.0, these binaries won't work anymore as Gecko API evolves.
The upgrade procedure I'll now describe is adapted from shallow-flash.sh script. It doesn't require unlocking your device :-)
Warning: This procedure will wipe everything on your phone. So don't keep contacts, media or important data there. You've been warned.
Upgrade to FxOS 2.1 (Gecko 34):
- get Gecko/Gaia component from Flame KK device [5];
- get Fira font update [6];
- loop mount your OEM FxOS 2.0 /custpack partition image backup. This is MOUNT_DIR from now on;
- extract gaia.zip: this creates gaia folder with profile subfolder. gaia/profile is GAIA_DIR from now on;
- remove MOUNT_DIR/webapps folder and replace it with GAIA_DIR/webapps;
- overwrite MOUNT_DIR/b2g/defaults/pref/user.js with GAIA_DIR/defaults/pref/user.js;
- overwrite MOUNT_DIR/b2g/defaults/settings.js with GAIA_DIR/defaults/settings.js;
- overwrite MOUNT_DIR/b2g/user.js with GAIA_DIR/user.js;
- ensure that MOUNT_DIR/b2g and MOUNT_DIR/webapps are owned (recursively) by root:root;
- unmount the updated /custpack partition image in MOUNT_DIR.
That's all for Gaia. Now, go for Gecko:
- extract b2g-34.0.en-US.android-arm.tar.gz; it expands in b2g folder. This is B2G_DIR from now on;
- loop mount your OEM FxOS 2.0 /system partition image backup. This is MOUNT_DIR from now on;
- optionally remove MOUNT_DIR/b2g/distribution folder; as explained earlier, bundles therein won't work anymore with Gecko 34;
- overwrite (without erasing to keep the symlinks to /custpack partition untouched) MOUNT_DIR/b2g with B2G_DIR;
- extract Fira font update: it expands in fira-font-update folder. There's fonts subfolder therein. fira-font-update/fonts is FONT_DIR from now on;
- copy all files from FONT_DIR to MOUNT_DIR/fonts;
- ensure that MOUNT_DIR/b2g and MOUNT_DIR/fonts are owned (recursively) by root:root;
- optionally remove MOUNT_DIR/media/audio and MOUNT_DIR/media/video folders;
- unmount the updated /system partition image in MOUNT_DIR.
Let's flash everything to the phone:
- adb reboot bootloader to put Fire E in fastboot mode;
- sudo fastboot flash custpack custpack.img to update Gaia. I assume here that the OEM FxOS 2.0 backup copy of /custpack partition we've just updated was named custpack.img. Adjust accordingly if that wasn't the case;
- I never had luck flashing /system partition image with fastboot flash. So, still from fastboot mode, boot CWM recovery: sudo fastboot boot recovery.img. Wait until CWM screen is displayed on phone;
- send updated /system partition image to external SD card in phone: adb push system.img /sd-ext. I assume here that the OEM FxOS 2.0 backup copy of /system partition we've just updated was named system.img. Adjust accordingly if that wasn't the case;
- run adb shell and "flash" updated /system partition. This operation requires root access, that's why we've booted from CWM recovery: cat /sd-ext/system.img > /dev/block/platform/msm_sdcc.1/by_name/system;
- once done, chose factory reset/wipe all partitions from CWM recovery;
- still from CWM recovery, chose reboot system now.
Fire E should restart, happily running FxOS 2.1. Don't panic if FxOS boot animation logo hangs. You should ultimately be welcomed by FxOS first-launch customization process :-)
Upgrade to FxOS 2.2r (_not_ 2.2 it doesn't work on Fire E) (Gecko 37):
- get Gecko/Gaia component from Flame KK device [7];
- get mkbootimg tools [8];
- follow steps above to create updated /custpack and /system partition images;
Bluetooth has been put in a separate process between FxOS 2.1 and 2.2, so there's some work here:
- loop mount your /system partition image. This is MOUNT_DIR from now on;
- loop mount Flame's v18D /system partition image (you need to convert it from sparse image to image file format using simg2img first). This is V18D_DIR;
- copy V18D_DIR/bin/bluetoothd to MOUNT_DIR/bin. Ensure it's owned by root:2000;
- copy V18D_DIR/lib/libfdio.so to MOUNT_DIR/lib. Ensure it's owned by root:root;
- unmount both v18D /system partition image in V18D_DIR and updated /system partition image in MOUNT_DIR;
- extract Flame's v18D /boot partition image using mkboot from mkbootimg tools: mkboot boot.img boot. The created boot folder is FLAME_BOOT_DIR from now on;
- extract your OEM FxOS 2.0 backup copy of /boot partition using mkboot from mkbootimg tools: mkboot boot.img boot. I assume here that the OEM FxOS 2.0 backup copy of /system partition was named system.img. Adjust accordingly if that wasn't the case. The created boot folder is FIRE_BOOT_DIR from now on;
- copy FLAME_BOOT_DIR/ramdisk/init.bluetooth.rc to FIRE_BOOT_DIR/ramdisk; ensure it's owned by root:root;
- edit FIRE_BOOT_DIR/ramdisk/init.qcom.rc file, look for service hciattach section and replace root by bluetooth (user root -> user bluetooth; group bluetooth net_bt_admin root -> group bluetooth net_bt_admin bluetooth);
- edit FIRE_BOOT_DIR/ramdisk/init.rc file and add import /init.bluetooth.rc directive, just after import /init.trace.rc one;
- repack boot.img, still using mkboot from mkbootimg tools: mkboot FIRE_BOOT_DIR boot.img;
- adb reboot bootloader to put Fire E in fastboot mode;
- sudo fastboot flash boot boot.img to flash the updated /boot partition we've just created above;
- flash /custpack and /system partitions as described in FxOS 2.1 upgrade.
Fire E should restart, happily running FxOS 2.2. Frames of FxOS boot animation aren't sized correctly, so you'll now noticed a one-pixel white border in the top, bottom and right edges [9]. This is harmless functionally-wise, but may have an impact performance-wise.
Upgrade to FxOS 2.5 (Gecko 44):
- get Gecko/Gaia component from Flame KK device [10];
- steps are identical to upgrade to 2.2r above.
Upgrade to FxOS 2.6 (Gecko 46):
- get Gecko/Gaia component from Flame KK device [11];
- steps are identical to upgrade to 2.2r/2.5 above.
Hope this helps,
Émeric
[1]
http://4pda.ru/forum/index.php?showtopic=656329
[2]
http://cds.w5v8t3u9.hwcdn.net/v18D.zip
[3]
https://github.com/cookiengineer/alcatel-6015x/blob/master/custom/recovery.img
[4]
https://github.com/Mozilla-TWQA/B2G-flash-tool/blob/master/shallow_flash.sh
[5]
http://ftp.mozilla.org/pub/b2g/nightly/2015/07/2015-07-24-00-12-07-mozilla-b2g34_v2_1-flame-kk/
[6]
https://people.mozilla.org/~mwu/fira-font-update.zip
[7]
http://ftp.mozilla.org/pub/b2g/nightly/latest-mozilla-b2g37_v2_2r-flame-kk/
[8]
https://github.com/xiaolu/mkbootimg_tools.git
[9]
https://groups.google.com/forum/#!topic/mozilla.dev.fxos/dzh6KxWTw7I
[10]
http://ftp.mozilla.org/pub/b2g/nightly/latest-mozilla-b2g44_v2_5-flame-kk/
[11]
http://ftp.mozilla.org/pub/b2g/nightly/latest-mozilla-central-flame-kk/