https://wiki.merproject.org/w/api.php?action=feedcontributions&user=Birdzhang&feedformat=atomMer Wiki - User contributions [en]2024-03-28T23:25:38ZUser contributionsMediaWiki 1.19.20+dfsg-2.3https://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2020-11-27T01:35:16Z<p>Birdzhang: </p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.4.0.24<br />
| last_update = 2020-11-27<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
<br />
Updates will be on xda https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
<br />
'''2019-11-15'''<br />
* update to 3.2.0.12<br />
<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here https://gitlab.com/sailfishos-porters-ci/vince-ci/-/pipelines<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash firmware<br />
firmware zip can be found from https://androidfilehost.com/?fid=673956719939819128<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-3.1.0.12-devel-20190809.zip<br />
https://gitlab.com/sailfishos-porters-ci/vince-ci/-/jobs/354561211/artifacts/file/sfe-vince-3.2.0.12-devel-20191119/sailfishos-vince-release-3.2.0.12-devel-20191119.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2020-11-27T01:34:15Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.1.0.12<br />
| last_update = 2019-08-09<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
<br />
Updates will be on xda https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
<br />
'''2019-11-15'''<br />
* update to 3.2.0.12<br />
<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here https://gitlab.com/sailfishos-porters-ci/vince-ci/-/pipelines<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash firmware<br />
firmware zip can be found from https://androidfilehost.com/?fid=673956719939819128<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-3.1.0.12-devel-20190809.zip<br />
https://gitlab.com/sailfishos-porters-ci/vince-ci/-/jobs/354561211/artifacts/file/sfe-vince-3.2.0.12-devel-20191119/sailfishos-vince-release-3.2.0.12-devel-20191119.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2020-11-20T06:26:24Z<p>Birdzhang: /* Downloads */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.1.0.12<br />
| last_update = 2019-08-09<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2019-11-15'''<br />
* update to 3.2.0.12<br />
<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here https://gitlab.com/sailfishos-porters-ci/vince-ci/-/pipelines<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash firmware<br />
firmware zip can be found from https://androidfilehost.com/?fid=673956719939819128<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-3.1.0.12-devel-20190809.zip<br />
https://gitlab.com/sailfishos-porters-ci/vince-ci/-/jobs/354561211/artifacts/file/sfe-vince-3.2.0.12-devel-20191119/sailfishos-vince-release-3.2.0.12-devel-20191119.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_geminiAdaptations/libhybris/Install SailfishOS for gemini2020-09-25T07:29:09Z<p>Birdzhang: /* Downloads */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Gemini<br />
| vendor = Xiaomi<br />
| product = Mi 5<br />
| screenshot = Sailfish-mi5.jpg<br />
| sailfish_version = 2.1.0.10<br />
| last_update = 26.05.2017<br />
}}<br />
<br />
=== Hardware Support ===<br />
<br />
{{Hadktableheader}}<br />
{{device_gemini|function=Hadktablerow}}<br />
|}<br />
<br />
<br />
=== Status ===<br />
* 21th Jul 2017: most sensors work, and also OTA :)<br />
* 16th Jul 2017: audio/video playback works, camera partially works, preview and capture work, video record not.<br />
* 26th May 2017: tried krnlyng's hwc workround, now lipstick working happily :), many thanks to krnlyng!<br />
* 16th February 2017: wifi works.<br />
* 14th February 2017: Unstable, not ready for use :)<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here https://www.androidfilehost.com/?fid=8889791610682945367<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.0.2-3-gemini.img<br />
<br />
* flash cm13.0 zip with twrp (press and hold Volume up and Power key, boot to recovery)<br />
cm-13.0-20161220-SNAPSHOT-ZNH5YAO3XM-gemini.zip<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-gemini-release-2.1.0.11-alpha5.zip<br />
<br />
* reboot!<br />
<br />
<br />
=== Build image by yourself ===<br />
<br />
* Refer to https://sailfishos.org/hadk and download the porting guide PDF<br />
* Replace "Creating Repositories for a New Device" section with this local manifest https://raw.githubusercontent.com/zhxt/local_manifests/hybris-13.0/gemini.xml <br />
<br />
<br />
=== Known Issues ===<br />
1. lipstic crash sometimes.[fixed with krnlyng's hybris patch].<br />
<br />
dmesg:<br />
<br />
[ +19.213579] __create_fence: fb0_release: get_unused_fd_flags failed error:0xffffffe8<br />
[ +0.000018] __handle_buffer_fences: unable to retrieve release fence<br />
[ +0.044521] binder: send failed reply for transaction 6048, target dead<br />
<br />
2. The working version of libdsyscalls.so is borrowed from ghosalmartin. :) <br />
<br />
[fixed by:<br />
<krnlyng> zhxt, revert the thread_local stuff, and add LOCAL_CLANG := false to libdsyscalls.so in Android.mk<br />
]</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybrisAdaptations/libhybris2020-06-16T04:29:46Z<p>Birdzhang: /* Xiaomi */</p>
<hr />
<div>Check here if the port's active: [[Adaptations/libhybris/porters]] then [https://sailfishos.org/hadk come here] and help!<br />
==Smartphones==<br />
<br />
=== HTC ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_m7 | HTC One (m7)]]<br />
<!-- generated from template device_m7 --><br />
{{device_m7|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/htc-desire-hd/development/sailfish-htc-desire-hd-t2882123 HTC Desire HD (ace)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013<br />
| linux_kernel=3.0.101<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=Y<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=N<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/htc-desire-z/development/teaser-vision-sailfish-os-1-0-8-19-t2885230 HTC Desire Z (vision)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2010<br />
| linux_kernel=3.0.101<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=Y<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=Y<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=N<br />
| rtc_status=N<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/showpost.php?p=65647507&postcount=44 HTC One Sprint (m7spr)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013/03<br />
| linux_kernel=3.4.82<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=?<br />
| sms_status=N<br />
| voice_status=N<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=N<br />
| gps_status=Y<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=?<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=?<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" |[https://forum.xda-developers.com/htc-one-max/development/sailfish-os-htc-one-max-t6-t3728384 HTC One Max (t6)] <br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013/10<br />
| linux_kernel=3.4.82<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=?<br />
| sms_status=N<br />
| voice_status=N<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=N<br />
| gps_status=Y<br />
| camera_status=N<br />
| fingerprint_status=?<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=?<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=?<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_pyramid | HTC Sensation (pyramid)]]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2011/05<br />
| linux_kernel=3.0.85 / 3.4.112<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=?<br />
| audio_status=?<br />
| nfc_status=NA<br />
| bluetooth_status=?<br />
| sms_status=?<br />
| voice_status=?<br />
| data_status=?<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=?<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=?<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=?<br />
| sensor_gyroscope_status=?<br />
| sensor_magnetic_status=?<br />
| vol_key_status=Y<br />
| home_key_status=N<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=?<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
|}<br />
<br />
=== Huawei ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Huawei P8lite<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015<br />
| linux_kernel=3.10.49<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=HAL<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=?<br />
| sms_status=N<br />
| voice_status=N<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=?<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=?<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Huawei Ascend P6 (hwp6_u06)<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2013 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.0.8 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!--leds --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Audio --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GPS --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Light --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Huawei C8813Q / G525<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2013 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.4.98 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GPS --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/jolla-sailfish/general/rom-unoffical-sailfish-os-huawei-y6-t3527525 Huawei Y6 SCL21]<br />
{{device_HuaweiY6|function=Hadktablerow}}<br />
|-<br />
|}<br />
<br />
=== Motorola ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://talk.maemo.org/showthread.php?t=99669 Motorola/Lenovo Moto Z Play (addison)]<br />
{{device_addison|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://github.com/MashaKl?tab=repositories Motorola Moto Z (griffin) ]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2016/09<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/droid-turbo-2/orig-development/kinzie-sailfishos-t3664787 Motorola Moto X Force (kinzie)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/11<br />
| linux_kernel=3.10.102<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/moto-x-play/orig-development/sailfishos-lux-t3606670 Motorola Moto X Play (lux)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/Q3<br />
| linux_kernel=3.10.49<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=HAL<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=N<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Motorola Moto X Pro (shamu_t)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/Q3<br />
| linux_kernel=3.10.40<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=N<br />
| sms_status=N<br />
| voice_status=N<br />
| data_status=N<br />
| wlan_status=N<br />
| hotspot_status=N<br />
| gps_status=N<br />
| camera_status=N<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/moto-x-2014/orig-development/victara-sailfishos-t3716368 Motorola Moto X 2014 (victara)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/09<br />
| linux_kernel=3.4.42<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=N<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=?<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Motorola Moto X (ghost)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013/08<br />
| linux_kernel=3.4.42<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=?<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Motorola DROID Turbo (quark)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/10<br />
| linux_kernel=3.10.91<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=?<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=N<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/moto-g/development/sailfishos-2-moto-g-falcon-t3326670/ Motorola Moto G 2013 (falcon) piggz ]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013/11<br />
| linux_kernel=3.4.42<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/moto-g-2014/development/sailfish-os-t3204245 Motorola Moto G 2014 (titan)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/09<br />
| linux_kernel=3.4.42<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/moto-g-lte/development/rom-thea-sailfish-os-2-0-5-6-t3542079 Motorola Moto G 2014 LTE (thea)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/03<br />
| linux_kernel=3.4.42<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/2015-moto-g/orig-development/sailfishos-t3786634 Motorola Moto G 2015 (osprey)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/09<br />
| linux_kernel=3.4.42<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=N<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/moto-g4-plus/development/rom-sailfish-os-2-1-t3668304 Motorola Moto G4 Plus (athene)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2016/05<br />
| linux_kernel=3.10.84<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=N<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Motorola Moto G4 Play (harpia)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2016/05<br />
| linux_kernel=3.10.49<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=NA<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=?<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=N<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/moto-e-2015/development/surnia-sailfishos-2-1-moto-e-2015-lte-t3623141 Motorola Moto E 2015 LTE (surnia)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/02<br />
| linux_kernel=3.10.49<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://talk.maemo.org/showthread.php?p=1526969 Motorola Droid 4 XT894 (maserati)]<br />
{{device_maserati|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/photon-q-4g-lte/general/sailfishos-3-photon-q-t3870979 Motorola Photon Q (xt897/xt907)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2012/08<br />
| linux_kernel=3.0.101<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=QWERTY<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
|}<br />
<br />
=== Nexus ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_maguro | Galaxy Nexus (maguro)]]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2011/11<br />
| linux_kernel=3.0.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=Y<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=HAL<br />
| camera_status=HAL<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Nexus One (passion)<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2010 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2.6.38 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!--leds --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Audio --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- NFC --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GPS --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Light --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Home --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Power --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/nexus-4/development/rom-sailfish-os-community-port-t2969823 Nexus 4 (mako)]<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2012 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.4 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GPS --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_hammerhead Nexus 5 (hammerhead)]<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2013 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.4 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GPS --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/nexus-5x/general/sailfish-os-bullhead-t3542388 Nexus 5X (bullhead)] <br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/10<br />
| linux_kernel=3.10.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=N<br />
| fingerprint_status=N<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Nexus 6 (shamu)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/Q3<br />
| linux_kernel=3.10.40<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=N<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=?<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=?<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=?<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=?<br />
| power_status=Y<br />
| rtc_status=N/A<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
|}<br />
<br />
=== Oneplus ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_onyx|OnePlus X (onyx)]]<br />
{{device_onyx|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Bacon_Info|Oneplus One Bacon ]]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/06<br />
| linux_kernel=3.4.67<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/oneplus-3t/development/sailfish-os-oneplus-3-3t-t3724264/post74946835 Oneplus 3/3T ]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=N<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_cheeseburger-dumpling|OnePlus 5/5T]]<br />
{{device_cheeseburger-dumpling|function=Hadktablerow}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_enchilada|OnePlus 6]]<br />
{{device_enchilada|function=Hadktablerow}}|-<br />
|}<br />
<br />
=== Samsung ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://impegoraro.github.io/sailfish-sgs3/ SGSIII Intl (i9300)] [http://forum.xda-developers.com/jolla-sailfish/general/jolla-sailfish-os-gs3-t2028133/post56602392 xda]<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2012 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.0.64 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- GPS --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | SGSIII 4G (i9305)<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2012 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.0.64 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GPS --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Light --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Home --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|- <br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" |Samsung Galaxy S (galaxysmtd)<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2010 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.0.101 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!--leds --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Audio --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GPS --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Light --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Samsung s4 mini (serrano)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013/08<br />
| linux_kernel=3.4.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=NA<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=N<br />
| sms_status=N<br />
| voice_status=N<br />
| data_status=N<br />
| wlan_status=N<br />
| hotspot_status=N<br />
| gps_status=N<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=N<br />
| home_key_status=Y<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=N<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=?<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_jfltexx|Samsung Galaxy S4 GT-I9505 LTE (jfltexx)]]<br />
{{device_jfltexx|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://plus.google.com/+AdamPigg/posts/iZpwGxrTZu1 Galaxy Note (n7000)]<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2011 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.0.64 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GPS --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | y <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Home --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/galaxy-s7/how-to/sailfish-os-samsung-galaxy-s7-t3745646 Samsung Galaxy S7 (herolte)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=<br />
| linux_kernel=3.18.14<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=?<br />
| audio_status=Y<br />
| nfc_status=N<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=N<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=N<br />
| fingerpring_status=N<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=Y<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=?<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://github.com/DeadSquirrel01/sailfishos-a5ultexx-releases Samsung Galaxy A5 (a5ultexx)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015<br />
| linux_kernel=3.10.106<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=NA<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=Y<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/galaxy-s2/general/sailfish-os-samsung-galaxy-s2-i9100-t4052915 SGSII (i9100)]<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2011 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.0 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- NFC --><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GPS --><br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Samsung Galaxy Note 4 SM-N910C (treltexx)<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2014 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.10.9 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- NFC --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GPS --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Camera --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Home --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- fm radio --><br />
|-<br />
|}<br />
<br />
=== Sony ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_Sailfish_OS_for_i4113 | Sony Xperia 10 Dual (i4113)]]<br />
{{Device_i4113|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://github.com/sailfishos-sony-tama/main Sony Xperia XZ2, XZ2c, XZ3]<br />
{{device_tama|function=Hadktablerow}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [http://images.devaamo.fi/sfe/suzu/ Sony Xperia X (f5121, loire: suzu)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2016<br />
| linux_kernel=3.10.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=N<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=N<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [http://images.devaamo.fi/sfe/suzu/ Sony Xperia X Dual (f5122, loire: suzu)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2016<br />
| linux_kernel=3.10.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=N<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| fingerprint_status=?<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=N<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Sony Xperia X Compact (f5321, loire: kugo)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2016<br />
| linux_kernel=3.10.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=N<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=N<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_yuga|Sony Xperia Z (yuga)]] <br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2013 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.4.0 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- NFC --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- GPS --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Light --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | N <!-- Power --><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Sony Xperia Z1 Compact (amami)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013<br />
| linux_kernel=3.10.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=?<br />
| audio_status=?<br />
| nfc_status=N<br />
| bluetooth_status=?<br />
| sms_status=?<br />
| voice_status=?<br />
| data_status=?<br />
| wlan_status=?<br />
| hotspot_status=?<br />
| gps_status=?<br />
| camera_status=?<br />
| fingerprint_status=NA<br />
| sensor_light_status=?<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=?<br />
| sensor_gyroscope_status=?<br />
| sensor_magnetic_status=?<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=?<br />
| haptics_status=?<br />
| power_status=?<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
|scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/xperia-z2/development/wip-sailfishos-xperia-z2-t3411086 Sony Xperia Z2 (sirius)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/03<br />
| linux_kernel=3.4.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=N<br />
| bluetooth_status=N<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=N<br />
| gps_status=HAL<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=N<br />
| sensor_proximity_status=N<br />
| sensor_accelerometer_status=N<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=N<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=NA<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_z3c | Sony Xperia Z3 compact (aries/z3c) ]]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/10<br />
| linux_kernel=3.4.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=?<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=?<br />
| camera_status=?<br />
| fingerprint_status=NA<br />
| sensor_light_status=?<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=?<br />
| sensor_gyroscope_status=?<br />
| sensor_magnetic_status=?<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=?<br />
| haptics_status=?<br />
| power_status=?<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Sony Xperia L C2105<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2013 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.4.0 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- NFC --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- GPS --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | N <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|- <br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_huashan | Sony Xperia SP (huashan) ]]<br />
| scope="col" rowspan="1" style="background:white" align="middle" | 2013 <!-- Year released --><br />
| scope="col" rowspan="1" style="background:white" align="middle" | 3.4.0 <!-- Kernel version --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- NFC --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Data --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="1" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GPS --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Camera --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="1" style="background:red" align="middle" | y <!-- Light --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Proximity --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Gyro. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Vibra --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- Haptics --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- Power --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_2011_Xperias | Sony Ericsson 2011 Xperias<br />(anzu, coconut, haida, hallon, iyokan,<br />mango, satsuma, smultron, urushi) ]]<br />
{{device_2011xperias|function=Hadktablerow}}<br />
|-<br />
|}<br />
<br />
=== Xiaomi ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" |[https://forum.xda-developers.com/redmi-2/development/cm14-1-sailfish-os-wt88047-t3754843 Xiaomi Redmi 2] [https://forum.xda-developers.com/redmi-2/development/cm14-1-sailfish-os-wt88047-t3754843]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2015/01<br />
| linux_kernel=3.10.107<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_kenzo | Xiaomi Redmi Note 3 (kenzo)]]<br />
{{device_kenzo|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_mido | Xiaomi Redmi Note 4 (mido) piggz]]<br />
{{device_mido|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_gemini | Xiaomi Mi 5 (gemini)]]<br />
{{device_gemini|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" |[https://forum.xda-developers.com/xiaomi-mi-3/orig-development/alpha-sailfishos-2-0-2-51-alpha-cancro-t3462419 Xiaomi Mi 3/Mi 4|cancro] <br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013/11<br />
| linux_kernel=3.4.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=?<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_armani|Xiaomi Redmi 1S (armani)]]<br />
{{device_armani|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_Vince| Xiaomi Redmi 5 Plus (vince)]]<br />
{{device_vince|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_aries| Xiaomi Mi2 / Mi2S (aries)]]<br />
{{device_aries|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_davinci| Xiaomi Redmi K20/Mi 9T (davinci/davinciin)]]<br />
{{device_davinci|function=Hadktablerow}}<br />
|-<br />
|}<br />
<br />
=== Others ===<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_fp2|Fairphone 2 (fp2)]]<br />
{{device_fp2|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://wiki.merproject.org/wiki/Find5_Info Find5 | X909 (find5)]<br />
{{device_find5|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | Find7 | X9076 (find7s)<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/03<br />
| linux_kernel=3.4.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=N<br />
| audio_status=Y<br />
| nfc_status=HAL<br />
| bluetooth_status=Y<br />
| sms_status=?<br />
| voice_status=?<br />
| data_status=?<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=HAL<br />
| camera_status=?<br />
| sensor_light_status=?<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=?<br />
| sensor_gyroscope_status=?<br />
| sensor_magnetic_status=?<br />
| vol_key_status=?<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_idol3| Alcatel Idol 3 5.5" (idol3)]]<br />
{{device_idol3|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_ham|ZUK Z1 (ham)]]<br />
{{device_ham|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" |[https://github.com/ThomasBrixLarsen?tab=repositories Nubia Z11 (nx531j) ]<br />
{{device_nx531j|function=Hadktablerow}}<br />
|-<br />
|}<br />
<br />
==Tablets==<br />
<br />
{{Hadktableheader | sortable = yes | show_device = yes}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://talk.maemo.org/showthread.php?t=96708 Onda V820W (inet_w)]<br />
{{device_Onda_V820W|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_scorpion | Sony Z3 Tablet Compact LTE (scorpion) ]]<br />
{{device_Scorpion|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[ Adaptations/libhybris/Install_SailfishOS_for_scorpion | Sony Z3 Compact Tablet Wifi (scorpion_windy) ]]<br />
{{device_Scorpion_Windy|function=Hadktablerow}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_grouper|Nexus 7 2012 WiFi (grouper)]]<br />
| scope="col" rowspan="2" style="background:white" align="middle" | 2012 <!-- Year released --><br />
| scope="col" rowspan="2" style="background:white" align="middle" | 3.1.10 <!-- Kernel version --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="2" style="background:grey" align="middle" | ? <!--leds --><br />
| scope="col" rowspan="2" style="background:yellow" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="2" style="background:yellow" align="middle" | Y <!-- NFC --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- 2G/3G Text --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- 2G/3G Call --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- 2G/3G Data --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="2" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="2" style="background:yellow" align="middle" | Y <!-- GPS --><br />
| scope="col" rowspan="2" style="background:red" align="middle" | N <!-- Camera --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="2" style="background:gray" align="middle" | ? <!-- Proximity --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Gyro. --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="2" style="background:yellow" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Vibra --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Haptics --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="2" style="background:red" align="middle" | N <!-- RTC alarms --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [[Adaptations/libhybris/Install_SailfishOS_for_tilapia|Nexus 7 2012 GSM (tilapia)]]<br />
| scope="col" rowspan="1" style="background:yellow" align="middle" | Y <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:lightgreen" align="middle" | Y <!-- GSM Data --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/nexus-7-2013/development/sailfish-os-t3605791 Nexus 7 2013 WiFi (flo)]<br />
| scope="col" rowspan="2" style="background:white" align="middle" | 2013 <!-- Year released --><br />
| scope="col" rowspan="2" style="background:white" align="middle" | 3.4.0 <!-- Kernel version --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Display --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Touchscreen --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!--leds --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Audio --><br />
| scope="col" rowspan="2" style="background:grey" align="middle" | ? <!-- NFC --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Bluetooth --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- 2G/3G Text --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- 2G/3G Call --><br />
| scope="col" rowspan="1" style="background:lightblue" align="middle" | N/A <!-- 2G/3G Data --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- WiFi Connection--><br />
| scope="col" rowspan="2" style="background:gray" align="middle" | ? <!-- WiFi Hotspot--><br />
| scope="col" rowspan="2" style="background:red" align="middle" | N <!-- GPS --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Camera --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Fingerprint --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Light --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Proximity --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Accel. --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Gyro. --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Magne. --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Vol+/- --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Home --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Vibra --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- Haptics --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- Power --><br />
| scope="col" rowspan="2" style="background:grey" align="middle" | ? <!-- RTC alarms --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- usb_net --><br />
| scope="col" rowspan="2" style="background:lightgreen" align="middle" | Y <!-- charging --><br />
| scope="col" rowspan="2" style="background:lightblue" align="middle" | N/A <!-- fm radio --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [http://images.devaamo.fi/sfe/deb/ Nexus 7 2013 GSM (deb)]<br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Text --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Call --><br />
| scope="col" rowspan="1" style="background:grey" align="middle" | ? <!-- GSM Data --><br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://wiki.merproject.org/wiki/Adaptations/libhybris/Manta Nexus 10 (manta)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2012<br />
| linux_kernel=3.1.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=N<br />
| nfc_status=HAL<br />
| bluetooth_status=N<br />
| sms_status=NA<br />
| voice_status=NA<br />
| data_status=NA<br />
| wlan_status=Y<br />
| hotspot_status=NA<br />
| gps_status=Y<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=NA<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=N<br />
| haptics_status=N<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=N<br />
| fm_radio_status=NA<br />
}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/hp-touchpad/other/sailfishos-touchpad-t3057476 HP TouchPad (tenderloin)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2011<br />
| linux_kernel=3.0.1<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=NA<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=HAL<br />
| sms_status=NA<br />
| voice_status=NA<br />
| data_status=NA<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=?<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=NA<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=NA<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=NA<br />
| haptics_status=NA<br />
| power_status=?<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" |Samsung Galaxy Tab 4 10.1 Wifi (matissewifi) <br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2014/04<br />
| linux_kernel=3.4.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=NA<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=NA<br />
| voice_status=NA<br />
| data_status=NA<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=?<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=?<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=NA<br />
| vol_key_status=Y<br />
| home_key_status=Y<br />
| vibration_status=NA<br />
| haptics_status=NA<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=?<br />
}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [http://yacuken.me/espresso3g/sfos/ Samsung Galaxy Tab 2 3G (espresso3g)] <br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2012/04<br />
| linux_kernel=3.0.101<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=NA<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=HAL<br />
| camera_status=HAL<br />
| fingerprint_status=NA<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=NA<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=HAL<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/galaxy-tab-2/7-inch-development/sfos-sailfishos-galaxy-tab-2-p3100-v2-0-t3355597 Galaxy Tab 2 Wifi (p3100)]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2012/02<br />
| linux_kernel=3.0.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=?<br />
| audio_status=N<br />
| nfc_status=NA<br />
| bluetooth_status=N<br />
| sms_status=NA<br />
| voice_status=NA<br />
| data_status=NA<br />
| wlan_status=N<br />
| hotspot_status=N<br />
| gps_status=?<br />
| camera_status=?<br />
| fingerprint_status=NA<br />
| sensor_light_status=N<br />
| sensor_proximity_status=?<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=?<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=N<br />
| haptics_status=NA<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/android/development/sailfish-os-a31-freetab-8014-t3844183 Modecom FreeTab 8014]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013<br />
| linux_kernel=3.3.0<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=NA<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=NA<br />
| sms_status=NA<br />
| voice_status=NA<br />
| data_status=NA<br />
| wlan_status=Y<br />
| hotspot_status=?<br />
| gps_status=NA<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=NA<br />
| sensor_proximity_status=NA<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=NA<br />
| vol_key_status=NA<br />
| home_key_status=?<br />
| vibration_status=NA<br />
| haptics_status=NA<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}<br />
|-<br />
| scope="row" style="background-color:#ddd; border:1px solid #ddd; padding:2px 0.5em;" | [https://forum.xda-developers.com/mi-pad/development/sailfishos-xiaomi-mi-pad-2-latte-t3893043 Xiaomi MiPad 2 (latte)] [https://gitlab.com/sailfishos-porters-ci/latte-ci/ CI Images]<br />
{{Hadktablerow <!-- Y / HAL / ? / N / NA --><br />
| device_released=2013<br />
| linux_kernel=3.14.79<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=N<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=NA<br />
| voice_status=NA<br />
| data_status=NA<br />
| wlan_status=Y<br />
| hotspot_status=NA<br />
| gps_status=NA<br />
| camera_status=N<br />
| fingerprint_status=NA<br />
| sensor_light_status=?<br />
| sensor_proximity_status=NA<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=NA<br />
| sensor_magnetic_status=NA<br />
| vol_key_status=Y<br />
| home_key_status=?<br />
| vibration_status=NA<br />
| haptics_status=NA<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=NA<br />
}}<br />
|}</div>Birdzhanghttps://wiki.merproject.org/wiki/File:Sailfish-davinci.jpgFile:Sailfish-davinci.jpg2020-06-16T04:27:39Z<p>Birdzhang: </p>
<hr />
<div></div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_davinciAdaptations/libhybris/Install SailfishOS for davinci2020-06-16T04:25:16Z<p>Birdzhang: Created page with "{{Hardware Adaptation | codename = davinci/davinciin | vendor = Xiaomi | product = Mi 9T/Redmi K20 | screenshot = Sailfish..."</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = davinci/davinciin<br />
| vendor = Xiaomi<br />
| product = Mi 9T/Redmi K20<br />
| screenshot = Sailfish-davinci.jpg<br />
| sailfish_version = 3.3.0.16<br />
| last_update = 2020-06-16<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_davinci|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm SM6150 Snapdragon 730<br />
*CPU 2x2.2 GHz Kryo 470 & 6x1.8 GHz Kryo 470<br />
*GPU Adreno 618<br />
<br />
=== ChangeLog ===<br />
'''2020-06-16'''<br />
* post to wiki<br />
<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* FM<br />
<br />
=== Downloads ===<br />
<br />
Go to XDA https://forum.xda-developers.com/mi-9t/development/sailfishos-redmi-k20-mi-9t-experimental-t4062983</div>Birdzhanghttps://wiki.merproject.org/wiki/Template:Device_davinciTemplate:Device davinci2020-06-16T04:23:15Z<p>Birdzhang: inti for davinci</p>
<hr />
<div>{{{{{function}}} |link_kind={{{link_kind}}} | table_summary={{{table_summary}}} | device_released=2019 | linux_kernel=4.14 | display_status=Y | touch_status=Y | led_status=Y | audio_status=Y | nfc_status=Y | bluetooth_status=Y | sms_status=Y | voice_status=Y | data_status=Y | wlan_status=Y | hotspot_status=Y | gps_status=Y | camera_status=Y | sensor_light_status=Y | sensor_proximity_status=Y | sensor_accelerometer_status=Y | sensor_gyroscope_status=Y | sensor_magnetic_status=Y | vol_key_status=Y | home_key_status=NA | vibration_status=Y | haptics_status=Y | power_status=Y | rtc_status=Y | usb_net_status=Y | usb_charging_status=Y | fm_radio_status=N }}</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2019-11-19T08:29:30Z<p>Birdzhang: /* Steps to install */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.1.0.12<br />
| last_update = 2019-08-09<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2019-11-15'''<br />
* update to 3.2.0.12<br />
<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash firmware<br />
firmware zip can be found from https://androidfilehost.com/?fid=673956719939819128<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-3.1.0.12-devel-20190809.zip<br />
https://gitlab.com/sailfishos-porters-ci/vince-ci/-/jobs/354561211/artifacts/file/sfe-vince-3.2.0.12-devel-20191119/sailfishos-vince-release-3.2.0.12-devel-20191119.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2019-11-18T07:09:58Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.1.0.12<br />
| last_update = 2019-08-09<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2019-11-15'''<br />
* update to 3.2.0.12<br />
<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash firmware<br />
firmware zip can be found from https://androidfilehost.com/?fid=673956719939819128<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-3.1.0.12-devel-20190809.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Nemo/Glacier/InstallingNemo/Glacier/Installing2019-08-27T03:36:44Z<p>Birdzhang: /* Installing */</p>
<hr />
<div>== Device ==<br />
=== Installing ===<br />
You can use both [https://sailfishos.org/develop/sdk-overview Sailfish OS Emulator] and real armv7hl or i486 device running latest Sailfish OS.<br />
<br />
'''Only SFOS 2.1.x.x ! (and later?)'''<br />
<br />
''This same works also for Sailfish Emulator'' <br />
<br />
First as precautionary measure we should change ''Default USB'' mode to be ''Developer mode''. <br />
Allow ''Remote connection'' from ''Developer tools'' and set password for remote connection. <br />
And also backup Jolla's lipstick, just in case: <br />
<br />
pkcon download /home/nemo/ lipstick-jolla-home-qt5<br />
<br />
Next lets add latest (note: this is master branch of lipstick-glacier-home-qt5) Glacier repo:<br />
<br />
for Emulator and i486 devices:<br />
<br />
ssu ar nemo-devel-ux http://repo.merproject.org/obs/nemo:/devel:/ux/sailfish_latest_i486/<br />
<br />
for armv7hl devices:<br />
<br />
ssu ar nemo-devel-ux http://repo.merproject.org/obs/nemo:/devel:/ux/sailfish_latest_armv7hl/<br />
<br />
Then refresh packages:<br />
<br />
pkcon refresh<br />
<br />
Next step is to install Glacier packages:<br />
<br />
pkcon install lipstick-glacier-home-qt5<br />
<br />
If lipstick doesn't restart automatically:<br />
systemctl --user restart lipstick<br />
<br />
Volá !<br />
<br />
If you want to try Glacier components in use:<br />
<br />
pkcon install qt5-qtquickcontrols-nemo-examples<br />
<br />
=== Uninstalling ===<br />
<br />
If you want to uninstall Glacier, I don't see any reason, but here are the instructions:<br />
<br />
ssu dr nemo-devel-ux<br />
pkcon remove lipstick-glacier-home-qt5<br />
pkcon install lipstick-jolla-home-qt5 <br />
<br />
=== In case of panic ===<br />
<br />
If something goes wrong and display stays black after restarting lipstick, you need to install Jolla's lipstick back.<br />
<br />
Plug USB to your SFOS device and to your computer. SSH to your device with compter:<br />
<br />
ssh nemo@192.168.2.15<br />
<br />
''192.168.2.15 is the default address, if you have changed this, insert changed one''<br />
Then lets install backuped lipstick-jolla-home<br />
<br />
pkcon install-local lipstick-jolla-home-qt5-*<br />
<br />
----<br />
<br />
<br />
== VirtualBox Image ==<br />
<br />
=== Installing ===<br />
<br />
First download the SailfishOS Software Development Kit: https://sailfishos.org/wiki/Application_SDK<br />
<br />
''Supported Environments''<br />
<br />
''Our SDK has been verified on the following systems:<br />
* ''Ubuntu 14.04 32/64 bit''<br />
* ''Windows 8 32/64 bit''<br />
* ''OS X 10.9.2''<br />
* ''It should work on other Linux flavours as well, but at this stage, its functionality on other host environments has not been fully verified.''<br />
<br />
''Pre-requisites:''<br />
* ''A host machine running a Linux/Windows/OS X operating system.''<br />
* ''Oracle’s VirtualBox version 4.1.18 or higher pre-installed on the host machine. You should use the VirtualBox that is compatible with your distribution.''<br />
* ''About 5GB of free disk space.''<br />
* ''4GB of RAM or more is recommended.''<br />
<br />
<br />
<br />
Next download the ready made SFOS with Glacier UX vbox image: https://cloud.disroot.org/s/NneoSnjJWbKqXHn<br />
<br />
Extract the tar, for example, to ~/SailfishOS/emulator/ <br />
<br />
Open Oracle VM VirtualBox application and select 'SailfishOS Emulator'. Open the 'Settings' of selected VM and from there select 'Storage'. Then continue to change 'sailfishos.vdi' to our extracted VM image 'SFOSGlacier.vdi'.<br />
<br />
To get latest nemo packages follow https://wiki.merproject.org/wiki/Nemo/Glacier/Installing#Installing.</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2019-08-09T03:06:14Z<p>Birdzhang: </p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.1.0.12<br />
| last_update = 2019-08-09<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash firmware<br />
firmware zip can be found from https://androidfilehost.com/?fid=673956719939819128<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-3.1.0.12-devel-20190809.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2019-08-09T03:05:23Z<p>Birdzhang: /* Steps to install */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.0.0.8<br />
| last_update = 2018-11-10<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash firmware<br />
firmware zip can be found from https://androidfilehost.com/?fid=673956719939819128<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-3.1.0.12-devel-20190809.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2019-08-09T03:02:55Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 3.0.0.8<br />
| last_update = 2018-11-10<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2019-08-09'''<br />
* update to 3.1.0.12<br />
<br />
'''2018-11-10'''<br />
* update to 3.0.0.8<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-11-10T00:04:47Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.1.18<br />
| last_update = 2018-10-09<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-11-10'''<br />
* update to 3.0.0.3<br />
<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-10-09T02:32:20Z<p>Birdzhang: </p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.1.18<br />
| last_update = 2018-10-09<br />
}}<br />
<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-09-29T03:29:28Z<p>Birdzhang: /* What's not */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
* ir<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-09-29T03:28:08Z<p>Birdzhang: /* Report bus */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues<br />
* https://forum.xda-developers.com/redmi-note-5/development/sailfish-os-xiaomi-redmi-note-5-5-plus-t3789021<br />
* https://t.me/jollacn<br />
* freenode irc #jolla-cn or #sailfishos-porters</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-09-29T03:26:22Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-09-28'''<br />
* fix browser video playback<br />
<br />
'''2018-09-17'''<br />
* upgrade to 2.2.1.18<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/faq-hadkAdaptations/faq-hadk2018-09-11T02:14:54Z<p>Birdzhang: /* Waiting for service SurfaceFlinger seen in logcat? then read this (read surfaceflinger-hack below) */</p>
<hr />
<div>= Basics =<br />
== Skip tutorial ==<br />
Congratulations if you have got gui working. During the debugging process you will be building and flashing quite a few times, in which tutorial during the setup screen can be annoying. You can skip that by tapping on the each corner of the screen clockwise, while starting from left-top corner.<br />
<br />
== Updating submodules ==<br />
Submodule locations:<br />
```<br />
rpm/dhd<br />
hybris/droid-configs/droid-configs-device<br />
hybris/droid-hal-version-fp2-sibon/droid-hal-version<br />
```<br />
<br />
In the each folder check remote name using `git remote -v `<br />
<br />
Run (replace remote_name with the name you found out in previous step)<br />
```<br />
git fetch remote_name<br />
git pull remote_name master<br />
<br />
== Updating local build target ==<br />
Change release version in the command if needed<br />
In Platform SDK:<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R ssu release 2.1.4.14<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper ref<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper dup<br />
<br />
= Finishing Your Port =<br />
<br />
== how to bring store to your device ==<br />
Your device adaptation should be on Mer OBS (read "Building things on OBS" below)<br />
<br />
Do `ssu s`, Device UID should show a unique ID that is:<br />
IMEI for devices with modem, note - your GSM modem should provide a valid IMEI even without an inserted SIM! Always a good cross-check <br />
that IMEI matches the one on your phone's box or under battery, and in CM/Android<br />
For devices without modem -- WLAN or BT MAC address.<br />
<br />
Find another port/phone and prove that unique ID there is different than yours, and that all of them persist across reboots.<br />
If unique ID is OK then ping pketo on #sailfishos-porters with "Device model" line from `ssu s` to enable store for you.<br />
<br />
== Building things on OBS: ==<br />
Benefits: automated builds, Jolla Store (see above), OTA (see below); local PC is then only needed for Android, dhd, and droidmedia building (which barely happen when port becomes stable), and mic image creation<br />
<br />
It makes sense to go OBS as soon as you have polished your code, minimised hacks, and pushed it to github (usuall when display+touch+WLAN and maybe cellular are working)<br />
<br />
On IRC ask sledges to create project and get maintainership for your nemo:devel:hw:$VENDOR:$DEVICE (you can try things out in your home repo first)<br />
```<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Then "Add repositories"<br />
Check "SailfishOS latest"<br />
Click "Add selected repositories" at the bottom of the page<br />
Add a hw:devel:common repo to build against (which contains all important backports for all ports:), you'll need to add it as an additional repo:<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Click "Edit repository"<br />
Click Add additional path to this repository<br />
Project: nemo:devel:hw:common<br />
Repository: sailfish_latest_armv7hl<br />
```<br />
Check how other devices are built here e.g. https://build.merproject.org/project/show/nemo:devel:hw:semc:iyokan<br />
<br />
Create droid-hal-$DEVICE package manually and upload RPMs for droid-hal-device and droidmedia (and audioflingerglue if device needs it)<br />
For all other packages create webhooks and trigger builds<br />
<br />
How to create webhooks: https://wiki.merproject.org/wiki/Packaging/webhooks<br />
<br />
Which webhooks will you need for your device: https://webhook.merproject.org/webhook (search for nemo:devel:hw:lge:mako and replicate that structure)<br />
<br />
Add cibot as maintainer, then ask lbt via IRC to "patternise" your nemo:devel:hw:$VENDOR:$DEVICE<br />
<br />
Build an image successfully on your PC by following HADK but, using .ks file from droid-config-$DEVICE-ssu-kickstarts-*.rpm built on OBS (don't forget to sed the repos and add nemo:hw:devel:common as adaptation1, this will help you more: http://images.devaamo.fi/sfe/mako/gamma6/Jolla-2.0.1.11-mako-armv7hl.ks )<br />
<br />
== Over-the-Air updates (OTA): ==<br />
Prerequisities:<br />
<br />
Your port has stabilised and is ready to face the big public (gets our retweets, you create Sailfish OS port thread on e.g. XDA, evangelise it :)<br />
<br />
Good measure is to have bare necessities of a daily-driver for most people: LED, audio, texts, calls, data, WLAN, GPS, camera, light, proximity, accelerometer, vol keys, vibra, power management<br />
<br />
You should be building on OBS (guide above)<br />
<br />
Then add these two files (change contents apropriately)<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/flash-partition/device-info<br />
<br />
Change `PART_REAL_1` to match "boot" partition of your device<br />
Change `CPUCHECK_STRING` to match the Hardware field in `/proc/cpuinfo`<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/platform-updates/flash-bootimg.sh<br />
Don't forget to make it executable<br />
<br />
Port over to your device this line:<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/blob/ca102d255f1b6f274e2768e8cbd4ad9c631890e9/droid-hal-hammerhead.spec#L12<br />
<br />
And this commit (only if MultiROM exists or in-the-works for your device):<br />
https://github.com/mer-hybris/droid-config-hammerhead/commit/cb39670de095b914aea23d6ce0e633d295493016<br />
Don't forget to commit and tag so configs rebuild on OBS :)<br />
Simulate OTA on :devel: https://wiki.merproject.org/wiki/Template:SFOS_OTA , see if all is fine (e.g. you can build devel 1.1.9.28 image and OTA it to 2.0)<br />
Then you can test how an updated kernel package flashes itself automatically with an extra reboot, by making some change in kernel, reuploading RPMs and simulating OTA again<br />
For your users to actually use OTA, you should move it to :testing (on IRC ask sledges to create nemo:testing:hw:$VENDOR:$DEVICE), to still be able to play (i.e. break things) in your :devel<br />
<br />
Get maintainership on that :testing repo<br />
- Add cibot as maintainer, then via IRC ask lbt to "patternise" that repo too<br />
- Click on Repositories tab in your nemo:testing:hw:$VENDOR:$DEVICE<br />
- Then "Add repositories"<br />
- Then "pick one via advanced interface"<br />
- Start typing "sailfishos", then pick the version you want OTA to be available for in format "sailfishos:X.Y.Z.W"<br />
- Choose "latest_$PORT_ARCH" for your architecture<br />
- Make the "Name" to match exactly "sailfishos_X.Y.Z.W"<br />
- Add nemo:testing:hw:common to that as additional repo just like you did with :devel: above<br />
<br />
Ensure NO webhooks point to :testing ! Cross-check with https://webhook.merproject.org/webhook<br />
<br />
Promote by using osc copypac to all your device packages from devel to testing (useful script: http://pastebin.com/GssLRr8e )(How To https://gist.github.com/taaem/53ed3a99893d323d7ab3bd8d07540f50 ) - use this (or simpler "Submit Package" WebUI option) also in future whenever a HW adaptation package needs updating in between sfos releases (PR is being prepared to add device hw version to zip filename, HW Adaptation version is also shown in About Product, and is incremented by 1 each time OBS automatically rebuilds droid-hal-version-$DEVICE whenever any hw package changes ;))<br />
<br />
Make an image with adaptation-community repo pointing to testing, adaptation-community-common pointing to common in your .ks file, and start distributing that to the rest of the world<br />
Don't forget to document everything, create a nice installation wiki article for your device (if not yet already), and add such section: https://wiki.merproject.org/wiki/index.php?title=Adaptations/libhybris/Install_SailfishOS_for_mako&action=edit&section=4<br />
Point your existing users to the OTA section of your device's wiki<br />
<br />
Once the next Sailfish OS release comes out and your port adopts it, you can create a new repository in OBS with that version and your users will OTA to it.<br />
<br />
= Debugging Tips =<br />
== Determine which is the touch event ==<br />
use command "getevent" as super user in adb shell. The event which spams most outputs on the screen when the screen is touched is the touch event.<br />
<br />
== persistent journalctl: ==<br />
modify /etc/systemd/journald.conf :<br />
<br />
Storage=volatile --> Storage=automatic<br />
<br />
Then do:<br />
```<br />
mkdir /var/log/journal<br />
reboot<br />
```<br />
<br />
Systemd suppresses journal, and some valuable info might get hidden. To prevent this, set<br />
<br />
RateLimitInterval=0<br />
<br />
== monitoring udev events ==<br />
udevadm monitor is your friend.<br />
<br />
To get it for cyanogenmod, add this repository https://github.com/chombourger/android-udev/ to your manifest as external/usb and make udevadm<br />
<br />
To monitor boot-time events, compile the kernel with CONFIG_DEBUG_KOBJECT=y and increase the log buffer size by setting the kernel command line option: log_buf_len=21 (or higher)<br />
<br />
== perf :) ==<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
mkdir -p perf/rpm<br />
cd perf<br />
ln -s $ANDROID_ROOT/kernel/$VENDOR/$DEVICE linux<br />
curl -o rpm/perf.spec http://pastebin.com/raw/QiW7FD02<br />
<br />
Replace string <YOUR_KERNEL_VERSION> in rpm/perf.spec with kernel version for which you're building perf (for example: 3.4.0)<br />
<br />
mb2 -s rpm/perf.spec -t $VENDOR-$DEVICE-armv7hl build<br />
mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/<br />
createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE<br />
<br />
"less" package is needed for perf to format its output. You can find it here: <br />
- http://repo.merproject.org/obs/nemo:/testing:/hw:/common/sailfish_latest_armv7hl/ <br />
<br />
= HADK Fixes =<br />
== Issues with pulseaudio module build ==<br />
downgrade hybris/droid-configs/droid-configs-device as described above by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
build_packages.sh --configs<br />
<br />
== Issues with ngfd or ngfd-plugin-droid-vibrator or pulseaudio ==<br />
Update submodules as described above<br />
Downgrade hybris/droid-configs/droid-configs-device by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
<br />
Replace `%define have_vibrator 1` in droid-hal-version-@DEVICE@.spec with `%define have_vibrator_native 1`<br />
Change package names in droid-configs patterns as described in templates https://github.com/mer-hybris/droid-hal-configs/commit/aac652aae840a15629c0f4e070275ea128fe088f<br />
Downgrade ngfd plugin:<br />
Go to hybris/mw/ngfd-plugin-droid-vibrator and run:<br />
<br />
git reset --hard 3e2b4fb5b03a6d3db9ca5a41c7091e771f99cc4f<br />
<br />
IN PLATFORM_SDK:<br />
<br />
$PLAFORM_SDK<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator -s rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm ngfd-plugin-droid-vibrator<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator --spec=rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
when you run the whole build_packages.sh after this skip the ngfd-plugin-native-vibrator build<br />
<br />
== libminisf.so not found ==<br />
Add libminisf to droidmedia make command like this in HABUILD_SDK:<br />
<br />
make -jXX libdroidmedia minimediaservice minisfservice libminisf<br />
<br />
Also update rpm/dhd submodule in case you have an older version<br />
<br />
<br />
== No installroot directory after droid-configs build when preparing .ks file ==<br />
<br />
rpm2cpio droid-local-repo/$DEVICE/droid-configs/droid-config-$DEVICE-ssu-kickstarts-1-1.armv7hl.rpm | cpio -idmv<br />
<br />
in the sed command use `$ANDROID_ROOT/usr/share/kickstarts/$KS` instead of `$ANDROID_ROOT/hybris/droid-configs/installroot/usr/share/kickstarts/$KS`<br />
<br />
== Building droid-config fails with: Segmentation fault (core dumped) /usr/lib/qt5/bin/kmap2qmap ......... ==<br />
<br />
try updating the packages in the target with <br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper ref<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper dup<br />
<br />
or<br />
<br />
add the file /system/build.prop to the target with the contents <br />
<br />
<br />
== mic fails during the run ==<br />
<br />
If you get error like this<br />
Warning: repo problem: pattern:jolla-hw-adaptation-$DEVICE1-1.noarch requires droid-config-$DEVICE-policy-settings, but this requirement cannot be provided, uninstallable providers: droid-config-$DEVICE-policy-settings-1-1.armv7hl[adaptation0-$DEVICE-2.0.1.7]<br />
<br />
Or for example<br />
No provider of 'pkgconfig(qofonoext)' found.<br />
<br />
In these cases the missing dependencies can be added with the command:<br />
<br />
MER_SDK $<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -m sdk-install ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
<br />
Also add the same repo to .ks file before building the installation package with mic<br />
Run the following commands before chapter 8.3 of HADK pdf<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
MOBS_URI="http://repo.merproject.org/obs"<br />
HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@"<br />
HA_REPO1="repo --name=common --baseurl=$MOBS_URI/nemo:/devel:/hw:/common/sailfish_latest_@ARCH@/"<br />
sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
If MIC fails with <br />
RuntimeError: Invalid runmode: native <br />
remove `--runtime=native` from mic command args<br />
<br />
If the error message ends with <br />
CreatorError: <creator>Unable to find pattern: Jolla Configuration $DEVICE<br />
then make sure that you executed 8.4 in the hadk pdf (as of v1.9.9). If it still does not work, try executing it again, then process patterns and build again.<br />
If the ks file generated in $ANDROID_ROOT does not contain the local repo, then add it manually. To the top of the list of repos, add<br />
"repo --name=adaptation-community-$DEVICE-@RELEASE@ --baseurl=file:$ANDROID_ROOT/droid-local-repo/$DEVICE/" <br />
substitute $DEVICE and $ANDROID_ROOT appropriately. <br />
Process patterns and build again.<br />
<br />
== sudo: effective uid is not 0, is sudo installed setuid root? ==<br />
Just after chroot is entered through the `sdk` command, sudo fails to execute and fails with the previous message<br />
check for suid mount flag in the bind-mounted root: if your home (not chroot home) is mounted with nosuid you need to remount it before chroot<br />
<br />
$HOST<br />
sudo mount -o remount,suid $HOME<br />
<br />
If you're running an encrypted home partition with ecryptfs, you need to remount home anyway, even if nosuid flag is not set<br />
<br />
$HOST<br />
sudo mount -i -o remount,suid $HOME) <br />
<br />
repo init -u git://github.com/mer-hybris/android.git -b hybris-11.0 fails because of gpg<br />
In sdk chroot gpg command is gpg2<br />
<br />
$MERSDK<br />
git config --global gpg.program gpg2<br />
<br />
== existence_error (yes, you read that right) when locally building policy-settings-common: ==<br />
You get:<br />
ERROR: error(existence_error(procedure, qsave_program/2), context(precompile/0, _G669))<br />
Solution:<br />
```<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -msdk-install<br />
cd /usr/lib/swipl-5.6.50/library<br />
rm INDEX.pl<br />
zypper in fakeroot<br />
fakeroot swipl -g true -t 'make_library_index(.)'<br />
```<br />
then rebuild the package again with mb2<br />
<br />
== Nothing provides /system/bin/sh: ==<br />
Add this to your .spec<br />
<br />
%define __provides_exclude_from ^/system/.*$<br />
%define __requires_exclude ^/system/bin/.*$<br />
%define __find_provides %{nil}<br />
%define __find_requires %{nil}<br />
<br />
== rpm/dhd/helpers/build_packages.sh fails building libhybris, ... ==<br />
<br />
HOST$<br />
cd $HOME<br />
sudo mkdir -p $MER_ROOT/devel<br />
sudo chown -R $USER mer/devel<br />
run the script again <br />
<br />
== Error During end of kernel build ==<br />
``` <br />
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider<br />
at java.lang.Class.getDeclaredMethods0(Native Method)<br />
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)<br />
at java.lang.Class.getMethod0(Class.java:2774)<br />
at java.lang.Class.getMethod(Class.java:1663)<br />
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)<br />
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)<br />
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br />
at java.security.AccessController.doPrivileged(Native Method)<br />
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)<br />
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)<br />
... 6 more<br />
```<br />
<br />
Ensure that unzip is installed as its required for BouncyCastle compile<br />
<br />
run something like this in $ANDROID_ROOT outside HABUILD_SDK<br />
<br />
java -jar \<br />
/home/$USER/mer/android/droid/out/host/linux-x86/framework/dumpkey.jar \<br />
build/target/product/security/testkey.x509.pem \<br />
build/target/product/security/cm.x509.pem \<br />
build/target/product/security/cm-devkey.x509.pem > /home/$USER/mer/android/droid/out/target/product/$DEVICE/obj/PACKAGING/ota_keys_intermediates/keys<br />
<br />
== qemu gives segmentation fault error in Ubuntu 16.10 ==<br />
<br />
instead, use Ubuntu 16.04.1 LTS, or earlier versions<br />
<br />
== qt5-qpa-hwcomposer-plugin fails ==<br />
when building for 2.1 with the error "pkgconfig(Qt5PlatformSupport)" <br />
update dhd submodule<br />
<br />
== Building geoclue-providers-hybris fails ==<br />
<br />
Building geoclue-providers-hybris fails with the error locationsettings.h for local builds update dhd submodule and in case of OBS build change the branch to jb36857<br />
<br />
= Adaptation Guides =<br />
<br />
== ff-memless haptics ==<br />
<br />
To use memless haptics driver instead of droid-vibrator, you need a kernel haptics driver that supports a memless interface (evdev). This is briefly explained in HADK pdf chapter 13.1.<br />
Reference kernel driver implementation for qpnp vibrator is here;<br />
https://github.com/kimmoli/android_kernel_oneplus_msm8974/pull/1<br />
<br />
It needs also vibrator configuration files if defaults are not ok; (this is also in HADK)<br />
https://github.com/kimmoli/droid-config-onyx/commit/dac479716a6b4300be3c5875982265f6914bb498<br />
<br />
And depends which evdev index the new ffmemless gets, one might need to change lipstick config;<br />
https://github.com/kimmoli/droid-config-onyx/pull/4/commits/73bb85fcdc5e2627a8cb0cea0fb5fc2ca9d8e814<br />
<br />
in droid-hal-version-$DEVICE.spec comment `%define have_vibrator 0` out and add `%define have_ffmemless 1`<br />
<br />
add build of qt5-feedback-haptics-ffmemless in build_packages.sh, and comment out other vibrator packages;<br />
<br />
buildmw "https://git.merproject.org/mer-core/qt-mobility-haptics-ffmemless.git" rpm/qt5-feedback-haptics-ffmemless.spec || die<br />
<br />
== FM Radio support ==<br />
<br />
Needs a device with suitable FM radio hardware and a kernel defconfig containing `CONFIG_RADIO_IRIS=y` and `CONFIG_RADIO_IRIS_TRANSPORT=m (or =y)`<br />
<br />
If your `CONFIG_RADIO_IRIS_TRANSPORT` is built-in then this is not needed, however if you have problems try building `CONFIG_RADIO_IRIS_TRANSPORT` as a module: add (adapt to fit your device if needed) <br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/droid-fm-up.service<br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-fm-up.service<br />
<br />
Sometimes device permissions are wrong (root owner), in this case:<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/udev/rules.d/999-droid-fm.rules to your droid-configs repo (or directly to device for testing)<br />
- Add qt5-qtmultimedia-plugin-mediaservice-irisradio to patterns (or install directly to device for testing)<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/pulse/xpolicy.conf.d/fmradio.conf to your droid-configs repo (or directly to device for testing)<br />
<br />
(pre-2.0.2) Update packages from http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/ (for building new images add this to your .ks file as described elsewhere in FAQ)<br />
<br />
Starting from Sailfish OS 2.0.2 FM radio Media app plugin jolla-mediaplayer-radio can be added to patterns.<br />
<br />
(pre-2.0.2) For FM radio testing harbour-piratefm can be obtained from <br />
- http://repo.merproject.org/obs/home:/kimmoli/sailfish_latest_armv7hl/<br />
<br />
== Flashlight shortcut ==<br />
<br />
Starting from Sailfish 2.0.2 it's possible to have flashlight shortcut in eventsview. If your device supports flash torch mode add jolla-settings-system-flashlight package to patterns in your droid-configs repo. The shortcut can be enabled in the eventsview settings.<br />
<br />
== Notes on LOS14.1 Porting ==<br />
XXX: remove the word "exec" from the last line of /usr/bin/droid/droid-hal-startup.sh, to make this permanent add a modified copy of the file to $ANDROID_ROOT/hybris/droid-configs/sparse/usr/bin/droid/droid-hal-startup.sh (this has to be fixed properly at some point)<br />
<br />
On mixed 32/64bit devices, LD_LIBRARY_PATH could be wrong. If logcat shows services aborting with SIG 6 due to wrong arch, try removing the LD_LIBRARY_PATH from /init.environ.rc<br />
<br />
Run this script in $ANDROID_ROOT http://paste.opensuse.org/40869869<br />
<br />
Details of what the script does:<br />
Symlinks for services:<br />
<br />
sh-3.2# ls -lh /usr/libexec/droid-hybris/system/etc/init/ <br />
total 4.0K <br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 atrace.rc -> /system/etc/init/atrace.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 bootstat.rc -> /system/etc/init/bootstat.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 debuggerd.rc -> /system/etc/init/debuggerd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 drmserver.rc -> /system/etc/init/drmserver.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 dumpstate.rc -> /system/etc/init/dumpstate.rc <br />
lrwxrwxrwx 1 root root 31 Oct 6 20:52 gatekeeperd.rc -> /system/etc/init/gatekeeperd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 init-debug.rc -> /system/etc/init/init-debug.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 installd.rc -> /system/etc/init/installd.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 logcatd.rc -> /system/etc/init/logcatd.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 logd.rc -> /system/etc/init/logd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 mediacodec.rc -> /system/etc/init/mediacodec.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediadrmserver.rc -> /system/etc/init/mediadrmserver.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediaextractor.rc -> /system/etc/init/mediaextractor.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 mtpd.rc -> /system/etc/init/mtpd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 perfprofd.rc -> /system/etc/init/perfprofd.rc<br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 racoon.rc -> /system/etc/init/racoon.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 rild.rc -> /system/etc/init/rild.rc<br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 superuser.rc -> /system/etc/init/superuser.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 uncrypt.rc -> /system/etc/init/uncrypt.rc <br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vdc.rc -> /system/etc/init/vdc.rc<br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vold.rc -> /system/etc/init/vold.rc<br />
<br />
NOTE, no audioserver and mediaserver links!<br />
NOTE, bootanim was removed in the updated script, also vold was added<br />
<br />
if NINJA builds are not working, export USE_NINJA=false<br />
<br />
For actdead charging animation, see changes here https://github.com/kimmoli/sfos-onyx-issues/issues/29 but also add 'trigger late-start' to 'on charging' in init.rc<br />
<br />
== Anbox Information ==<br />
https://public.etherpad-mozilla.org/p/anbox-sailfishos<br />
<br />
== Graphics performance improvements ==<br />
Test framerate display (can be enabled in Settings->Developer mode) when using some apps like gallery<br />
If the top view is mostly red try to set QPA_HWC_IDLE_TIME=5 in /var/lib/environment/compositor/droid-hal-device.conf<br />
Run <br />
```systemctl restart user@100000 using devel-su```<br />
<br />
Test framerate display again and if you see more green than before you should use the value<br />
<br />
Different values can be tested but value 5 has been found to be helping on some devices<br />
<br />
On some devices also setting `QPA_HWC_BUFFER_COUNT=3` in `/var/lib/environment/compositor/droid-hal-device.conf` helps with graphics performance<br />
<br />
== Using backported Bluetooth drivers in 3.4 kernel for devices with Qualcomm bluetooth chip using hci_smd driver ==<br />
Generic guide: https://bluez-android.github.io/#building-own-kernel<br />
<br />
Sailfish specific guide:<br />
<br />
Build your kernel with patches from https://github.com/bluez-android/misc/tree/master/patches-kernel and with following flags defined in defconfig<br />
<br />
CONFIG_BT=m<br />
CONFIG_CRYPTO_CMAC=y<br />
CONFIG_CRYPTO_USER_API=y<br />
CONFIG_CRYPTO_USER_API_HASH=y<br />
CONFIG_CRYPTO_USER_API_SKCIPHER=y<br />
<br />
NOTE: Patches may not be required for >= 3.18<br />
In your local_manifest, add <br />
```<project name="mlehtima/backports-bluetooth" path="external/backports-bluetooth" revision="master" />```<br />
run repo sync in HABUILD_SDK<br />
<br />
Build backported drivers by running make backports in HABUILD_SDK while in $ANDROID_ROOT folder<br />
if you get `"external/backports-bluetooth/drivers/bluetooth/hci_smd.c:35:26: fatal error: mach/msm_smd.h: No such file or directory" `error change <br />
`#include <mach/msm_smd.h> to #include <soc/qcom/smd.h|>` in that file<br />
<br />
IMPORTANT: if you rerun make hybris-hal at any time you will always have to rerun make backports after that<br />
Package droid-hal as usual<br />
<br />
Change your config repo to use bluez5 https://github.com/mlehtima/droid-config-fp2-sibon/commit/1cba868fdcfebaffc14a084c5d82fbf2e4339173<br />
Rebuild config rpms and image<br />
<br />
== EA Scratchbox Targets ==<br />
<br />
Lately Jolla offers two sb2 targets so the HADK instructions create some strange behaviour when downloading the sb2 target<br />
<br />
You have two options now to replace this line<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4)<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | tail -n1)<br />
will give you the sb2 for the latest Early Access <br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | head -n1)<br />
<br />
will give you the sb2 for latest non EA SFOS Version <br />
<br />
== to change pixel ratio on a running device, as user: ==<br />
```<br />
devel-su dconf update<br />
# PIXEL_RATIO should be close to the value of horizontal_display_resolution/540<br />
# e.g. Nexus 7 (800 x 1280) displays the pixel ratio is 800/540~=1.48<br />
# always round the value up with two decimal precision<br />
PIXEL_RATIO=1.48<br />
<br />
# UPDATE! Please test the new formula for pixel ratio calculation:<br />
# diagonal_display_size_inches/4.5 * horizontal_display_resolution/540<br />
# and feedback the outcome to sledges via IRC (better/worse/closer via own trial&error picks?)<br />
# Yet another formula: YourDevicePPI/sbjPPI (245), e.g. OnePlusX PPI 441/245 = 1.8<br />
# Available ICON_RES values are 1.0, 1.25, 1.5, 1.75, and 2.0. Choose the closest one to PIXEL_RATIO:<br />
ICON_RES=1.5<br />
devel-su zypper in jolla-ambient-z$ICON_RES ambient-icons-closed-z$ICON_RES<br />
dconf write /desktop/sailfish/silica/theme_pixel_ratio $PIXEL_RATIO<br />
dconf write /desktop/sailfish/silica/theme_icon_subdir $<br />
# check that everything worked:<br />
dconf read /desktop/sailfish/silica/theme_pixel_ratio<br />
devel-su reboot<br />
# PIXEL_RATIO and ICON_RES are subjects to fine tuning: https://bugs.nemomobile.org/show_bug.cgi?id=814#c1<br />
```<br />
Script to scale your icons https://pastebin.com/mxKRkt7Z<br />
<br />
make[3]: *** [security/commoncap.o] Error 1...<br />
Those errors appears because ANDROID_CONFIG_PARANOID_NETWORK is disabled in your kernel and with it enabled, you can't access internet with Sailfish OS. ( Since hybris-12.1, rild does not work without ANDROID_CONFIG_PARANOID_NETWORK. Add nemo to group inet if it is enabled.)<br />
Check http://forum.xda-developers.com/showpost.php?p=42880275&postcount=104<br />
To resolve this replace in <path of your kernel>/security/commoncap.c :<br />
``` <br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
``` <br />
With this:<br />
``` <br />
#ifdef CONFIG_ANDROID_PARANOID_NETWORK<br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
#endif<br />
```<br />
<br />
Save the file and recompile the kernel<br />
<br />
== Build Wlan Driver as Module ==<br />
<br />
Most devices require the wlan driver to be built and loaded as a module during startup<br />
Ensure you have CONFIG_MODULES=y in your kernel config<br />
<br />
Find your wifi driver in your kernel config, it should already be set to `y` and have something like WLAN in the name.<br />
Set it to m<br />
eg.<br />
CONFIG_BCMDHD=m<br />
CONFIG_PRIMA_WLAN=m<br />
CONFIG_PRONTO_WLAN=m<br />
<br />
Add the wlan-module-load.service to your droid-configs sparse directory<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/wlan-module-load.service<br />
<br />
and add a symlink to enable to service on startup:<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/multi-user.target.wants/wlan-module-load.service<br />
<br />
== Bluetooth for Qualcomm devices ==<br />
<br />
Enable `CONFIG_BT_HCISMD` in the kernel defconfig. If it is not present in your kernel, then make these changes:<br />
- https://github.com/adeen-s/android_kernel_cyanogen_msm8916/commit/4627f4f6f5d886433ff1f9639dc18fe8a006fd00 <br />
<br />
Add these files to sparse (or directly to device) and modify them as needed for your device --><br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/usr/bin/droid/droid-hcismd-up.sh<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/droid-hcismd-up.service<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-hcismd-up.service<br />
<br />
Bluetooth Should now work. If it doesn't then make sure the permissions are set correctly and all paths mentioned in above files point to valid locations.<br />
<br />
If you are still having trouble, check to see if there is a service that configures bluetooth and disable/comment it. Eg, config_bluetooth in init.qcom.rc<br />
<br />
<br />
<br />
== Bluetooth for Broadcomm devices ==<br />
Enable `CONFIG_BT_HCIUART_H4` in the kernel defconfig. These devices typically are attached on high speed uart to something like /dev/ttyHS0<br />
<br />
- Symlink your firmware file to /etc/firmware. <br />
eg. https://github.com/r0kk3rz/droid-config-scorpion_windy/blob/master/sparse/etc/firmware/BCM4350C0.hcd<br />
<br />
- You need to make sure the firmware symlink filename matches your bluetooth device name, which can be found by stracing hciattach<br />
Build rfkill middleware and add to patterns:<br />
```<br />
rpm/dhd/helpers/build_packages.sh --mw=https://github.com/mer-hybris/bluetooth-rfkill-event --spec=rpm/bluetooth-rfkill-event-hciattach.spec<br />
```<br />
- add configs: https://github.com/mer-hybris/droid-config-f5121/commit/afa01bdf4bdb8a0d16bbd34996ec7cac34bbbc55<br />
<br />
== Ofono problems ==<br />
RILD is running but ofono does not work<br />
If ofono is not working properly and shows "ERROR! Can't connect to RILD: No such file or directory" in logs, edit /etc/ofono/ril_subscription.conf to contain<br />
<br />
[ril_0]<br />
name=RIL1<br />
socket=/dev/socket/rild<br />
if your device is dual SIM, add also these lines (don't add them otherwise!):<br />
<br />
[ril_1]<br />
name=RIL2<br />
socket=/dev/socket/rild2<br />
<br />
If it works add your ril_subscription.conf to the droid-config-$DEVICE like done here https://github.com/Nokius/droid-config-find5/commit/3e3e636e7e3973f9102ebca9dea79794c00c9174<br />
Also add the jolla-settings-networking-multisim to patterns like done here https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/patterns/jolla-configuration-fp2-sibon.yaml#L15<br />
Fix remembering manual access point configurations across reboots run the following command before building the image<br />
sed -i "/begin 60_ssu/a chown -R radio:radio /var/lib/ofono" Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
Devices without modem<br />
File /etc/ofono/ril_subscription.conf should contain<br />
<br />
[Settings]<br />
EmptyConfig=true<br />
<br />
= Device Fixes =<br />
<br />
== Problems with tfa9890 ==<br />
Copy `/system/etc/firmware` to `/etc/firmware`. Symlink or mount doesn't work! (But why?)<br />
<br />
== So you booted your Sailfish OS? Congrats! No GUI? Oh dear :) ==<br />
<br />
<br />
both usb0 and rndis0 interfaces might be up, remove usb0 from init-script and rebuild kernel image with make hybris-boot or make hybris-recovery<br />
<br />
<br />
== lipstick segfaults/no display ==<br />
As you follow steps below, strace any of the binaries that would fail for non-obvious reasons. You'll need to install strace to do so: zypper in strace<br />
test simple hwc as root:<br />
<br />
EGL_PLATFORM=hwcomposer test_hwcomposer<br />
<br />
^^ strace if segfaults<br />
if strace dies after open("/sys/kernel/debug/tracing/trace_marker..., perform<br />
<br />
systemctl mask sys-kernel-debug.mount<br />
<br />
test_hwcomposer should not be used as reliable hwc test!! if fails, then try minimer:<br />
<br />
curl -O https://qtl.me/minimer3.tar.gz<br />
zypper in qt5-qtdeclarative-qmlscene<br />
tar -xf minimer3.tar.gz; cd minimer<br />
EGL_PLATFORM=hwcomposer /usr/lib/qt5/bin/qmlscene -platform hwcomposer main.qml<br />
<br />
if fails as user, try as root<br />
/system/bin/surfaceflinger<br />
for more info: zypper in gdb<br />
if you get test_hwcomposer, minimer or lipstick segfault, or test_hwcomposer or minimer running but doing nothing (as on m7)<br />
Check if your device uses qcom_display-caf or display-legacy<br />
Look in any of the BoardConfig.mk or BoardConfigCommon.mk in any of the device repos for the device for the variable TARGET_QCOM_DISPLAY_VARIANT. It should be set to either caf or legacy.<br />
The repos included can be determined by looking at the -include device/$VENDOR/*/BoardConfig.mk or device/$VENDOR/*/BoardConfigCommon.mk lines at beginning the .mk files starting from the primary BoardConfig.mk<br />
If you're on display-legacy or display-caf(repo sync before 2015.06.04) patch hwcomposer withhttp://pastebin.com/AfRXPKVA<br />
From HABUILD_SDK recompile android hwcomposer*.so for your device<br />
Find the name of the hwcomposer*.so module: run make modules | grep hwcomposer<br />
If this command complains about missing column command run sudo apt-get install bsdmainutils)<br />
Run `make hwcomposer.module_name` from results above<br />
Once rebuilt, hwcomposer.*.so will be picked up and used by droid hal rebuild, and reside under /usr/libexec/droid-hybris/system/lib/hw<br />
If your apps are crashing (like on flo): Repeat the same for gralloc and copybit<br />
Scream on the IRC if this worked for you<br />
If strace indicates something like:<br />
<br />
"Waiting for service display.qservice..."<br />
This error is known only on cm-10.1 base, and will be upstreamed to mer-hybris soon, but we need more tests: applyhttps://github.com/mer-hybris/android_frameworks_native/commit/6ed4a6e834f6c71b2b6bd8ae1134f50b060e70be to this line https://github.com/CyanogenMod/android_frameworks_base/blob/cm-10.1/cmds/servicemanager/service_manager.c#L88 and also apply https://github.com/mer-hybris/android_system_core/commit/34ea48fd3ad7bf47ec0d0524d76bd20e62717773<br />
open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY|O_LARGEFILE) = <br />
disable debugfs by: https://github.com/mer-hybris/droid-hal-device/commit/8d437fc6f215081d4e1d2baaa6ac23bb94f73154<br />
if it still crashes on gralloc or other gpu related bits, refer to WIP: https://wiki.merproject.org/wiki/Adaptations/libhybris/gpu<br />
<br />
Devices with Mali GPU<br />
Add this to $ANDROID_ROOT/rpm/droid-hal-$DEVICE.spec before the last line (do not change the last line, ever)<br />
%define android_config \<br />
#define MALI_QUIRKS 1\<br />
%{nil}<br />
Rebuild droid-hal and libhybris packages<br />
<br />
<br />
== SIM card not detected ==<br />
This often causes a bootloop<br />
Cellular Modem bringup is now in HADK v1.1.1 section 13.3<br />
<br />
Additional checks:<br />
- Replicate /dev/block structure from Android as closely as possible (for rild to be able to access the modem partition)<br />
- Run ls -lR /dev/block in CM<br />
- Run ls -lR /dev/block in Sailfish OS<br />
<br />
diff the two outputs (this is WIP - android's toolbox ls might need more parameters to produce a comparable output)<br />
If you see differences you need to add custom udev rules to create the correct /dev/block structure<br />
(added automatically since 2016-12-10) For devices with /dev/block/platform/msm_sdcc.1/by-name/ paths (msm_sdcc.1 can be different) add to $ANDROID_ROOT/rpm/ these paths and files with contents, and it most probably will help (but still paste your diff to the IRC channel):<br />
<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/platform-device<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/rules.d/998-droid-system.rules<br />
<br />
(added automatically since 2017-06-03) Some devices (at least all hybris-13.0 based ports) have /dev/block/bootdevice/by-name/ as /dev/block structure in CM in which case you need to add the following line to the end of the 998-droid-system.rules file in the last link:<br />
<br />
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", IMPORT{program}="/bin/sh /lib/udev/platform-device $env{DEVPATH}", SYMLINK+="block/bootdevice/by-name/$env{ID_PART_ENTRY_NAME}"<br />
<br />
If you have logcat and journal error messages suggesting that RIL/ofono can't power the modem on and you have a qcom chipset, have a look in your init.qcom.rc for lines that power it on when the boot animation (bootanim) stops. If you have those, try this (paths may need correcting): https://github.com/stephgosling/android_device_htc_m7-common/commit/9f4abdca65356090e6dd6f0356c5cf4a1870aa5f (note the typo there in the chown line!)<br />
<br />
If you have `pil-q6v5-mss fc880000.qcom,mss: modem: Failed to locate modem.mdt` in your `dmesg` then try this steps:<br />
<br />
- Mask firmware.mount<br />
- add this service to /lib/systemd/system/ https://pastebin.com/9tbUtVnC<br />
- create symlink to that service in /lib/systemd/system/local-fs.target.wants/ <br />
- add /usr/bin/droid/extract_firmware.sh with this content https://pastebin.com/bgphKn4z<br />
<br />
<br />
== Waiting for service SurfaceFlinger seen in logcat? then read this (read surfaceflinger-hack below) ==<br />
If you are using a service like lipstick-hack which loads surfaceflinger for a few seconds to init the hardware, then this stops servicemanager seeing minisfservice as SurfaceFlinger becuase it uses the same service name, then dies.<br />
Disable/mask lipstick-hack from being started by systemd<br />
Add lipstickhack to /init.rc and start in the the core class<br />
<br />
service lipstickhack /usr/bin/droid/lipstick-hack.sh<br />
class core<br />
user system<br />
oneshot<br />
group graphics drmrpc<br />
<br />
== Alternative to lipstick-hack (aka surfaceflinger-hack) ==<br />
<br />
For devices that need the so called lipstick-hack to start surfaceflinger for a few seconds to init the hardware we developed an alternative as the lipstick-hack has proven to be rather unstable during system boots.<br />
<br />
This alternative uses a modified version of libsurfaceflinger itself to init the display and then exits it's main run loop and afterwards behaves like minisfservice. This eliminates the timing issues of lipstick-hack.<br />
<br />
Implementation:<br />
1. BoardConfig.mk<br />
- in the BoardCommon.mk of your device add the following lines:<br />
<br />
# SurfaceFlinger init<br />
BOARD_USE_MOTO_SF = true<br />
<br />
2. libsurfaceflinger<br />
- apply the patches from https://github.com/guhl/android_frameworks_native/commit/ead91374111114fded280abe56484523355ee2cc to $ANDROID_ROOT/frameworks/native/services/surfaceflinger<br />
- in HABUILD_SDK build libsurfaceflinger by doing:<br />
<br />
source build/envsetup.sh<br />
breakfast $DEVICE<br />
make libsurfaceflinger<br />
<br />
<br />
3. <br />
- apply the patches from https://github.com/guhl/droidmedia/commit/cf176cd1bec2c0e5b633b8d728528edc6133ed7d to $ANDROID_ROOT/external/droidmedia<br />
- build droidmedia as described in HADK v2.0.1 - chapter 13.2<br />
<br />
4. init.rc<br />
- add minisfservice as a service to your $ANDROID_ROOT/system/core/rootdir/init.rc like this:<br />
<br />
service minisf /usr/libexec/droid-hybris/system/bin/minisfservice<br />
setenv LD_PRELOAD /usr/libexec/droid-hybris/system/lib/libsurfaceflinger.so<br />
class main<br />
user system<br />
group graphics<br />
<br />
<br />
5. rebuild hybris-hal<br />
as described in HADK v2.0.0 - chapter 5.4 and afterwards package Droid HAL and build the Root Filesystem<br />
<br />
== hls streams and other codecs ==<br />
<br />
devel-su<br />
#not needed anymore: ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
#not needed anymore: zypper ref common<br />
#not needed anymore: zypper dup --from common # safe to do full upgrade/downgrade there<br />
ssu ar experimental http://repo.merproject.org/obs/nemo:/devel:/hw:/experimental/sailfish_latest_armv7hl/<br />
zypper ref experimental<br />
zypper dup --from experimental<br />
<br />
== Failed at step OOM_ADJUST spawning /usr/libexec/mapplauncherd/booster-qt5: Permission denied ==<br />
Causes for example the failure of startup wizard on first boot:<br />
- try to revert kernel change in fs/proc/base.c<br />
- https://github.com/mer-hybris/android_kernel_oneplus_msm8974/commit/0ed87d7f3cf7d3388f09bd264a856ad9efc564a3<br />
<br />
ping on the IRC if this worked for you :)<br />
<br />
<br />
== UI is shown in tablet mode ==<br />
<br />
needed anymore<br />
<br />
(this fix will not work when the display has a super high resolution)<br />
Symptoms: event view has two columns, very large icons in app grid<br />
Check if the screen size is recognised correctly<br />
<br />
journalctl --no-pager | grep QSizeF<br />
<br />
If the values are not realistic set the screen size in your droid-hal-device.conf<br />
(only works since Sailfish OS 2.0.1)<br />
<br />
QT_QPA_EGLFS_PHYSICAL_WIDTH=<in mm><br />
QT_QPA_EGLFS_PHYSICAL_HEIGHT=<in mm><br />
<br />
<br />
== Access Android's virtual SD card (needs more massaging) ==<br />
<br />
Has received mixed feedback of working/not-working. Replicate onto your device accordingly:<br />
<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/commit/ca102d255f1b6f274e2768e8cbd4ad9c631890e9<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/usr/bin/droid/android-links.sh<br />
- https://github.com/mer-hybris/droid-config-hammerhead/commit/e15591b98380c95e5be96bf9f386278b9825b5f3<br />
<br />
<br />
== Fix remembering Bluetooth state on reboot ==<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/commit/265310c24e254ba102211b6ea398f9ef2b68d523<br />
<br />
== pm-service complains about no permissions ==<br />
<br />
its because PARANOID_NETWORK is required for your kernel config<br />
<br />
<br />
== Kernel changes needed for updated systemd in Sailfish 2.1.1.X ==<br />
<br />
Apply this to all devices with 3.4 kernel https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0640113be25d283e0ff77a9f041e1242182387f0<br />
<br />
<br />
== libdsyscalls is cause of segfault after r or minimer ==<br />
<br />
Usually means that in your device repo, its enabling clang somewhere, do a grep and disable clang and rebuild :)<br />
<br />
<br />
== Audio not routed to headphones ==<br />
<br />
run evdev_trace from mce-tools package and find /dev/input/eventX that detects headphones connection. It will be the one with SW_HEADPHONE_INSERT* and SW_MICROPHONE_INSERT* like here:<br />
<br />
<br />
----====( /dev/input/event0 )====----<br />
Name: "sensorprocessor"<br />
ID: bus 0x0, vendor, 0x0, product 0x0, version 0x0<br />
Type 0x00 (EV_SYN)<br />
Type 0x01 (EV_KEY)<br />
KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_POWER KEY_CAMERA KEY_MEDIA KEY_VOICECOMMAND<br />
Type 0x05 (EV_SW)<br />
SW_LID SW_HEADPHONE_INSERT* SW_MICROPHONE_INSERT*<br />
<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/ohm/plugins.d/accessories.ini file and replace jack-match and jack-device with values from evdev_trace:<br />
jack-match matches Name: field and<br />
ack-device matches /dev/input/eventX<br />
where X is your device input number<br />
<br />
Optional way for devices without headphone connector event device:<br />
<br />
If your device doesn't have event device for the headphone jack then it might have a switch in /sys/class/switch/h2w/ or similar path<br />
If the state file in the /sys/class/switch/h2w/ or similar path reacts to headphone connection by changing the value it can be used for headphone detection<br />
Add file /etc/ohm/plugins.d/accessories.ini with the following content (replace switch name with the name found in the path on your device)<br />
<br />
model = uevent<br />
switch = h2w<br />
<br />
If the headphone detection works then add the file to your config repo sparse for future builds<br />
<br />
== hwcomposer fails to run with `atomic commit failed ret:-22` in dmesg ==<br />
You may need to add the following commits<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/ab8e2349bae3a0971b237b744465089d6f22f8a1<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/c48eee07ace04204cf6c670ddfcf8c694fd88db4<br />
<br />
<br />
== qseccomd crashing ==<br />
Devices that have qseecomd usually have issues getting to UI so its best to disable it in the init.$DEVICE.rc<br />
<br />
<br />
== Black gallery pictures and no browser content/browser crash ==<br />
Add this to droid-hal .spec file and rebuild droid-hal and libhybris packages (remove the sources from hybris/mw/libhybris to make sure a clean rebuild is done):<br />
<br />
%define android_config \<br />
#define WANT_ADRENO_QUIRKS 1\<br />
%{nil}<br />
<br />
== make[1]: *** No rule to make target `XXX_defconfig'. Stop. ==<br />
This was seen as an error while making hybris-hal on wingray<br />
Open hadk/device/*/*/BoardConfig.mk and comment out the line "TARGET_KERNEL_SOURCE=XXX"<br />
Re-run source build/envsetup.sh and breakfast $DEVICE<br />
Re-run make -jXX hybris-hal<br />
Kernel should build properly at this point but you may get an error later along the lines of "svn: command not found"<br />
"sudo apt-get install subversion" should fix it<br />
if that doesn't work try un-commenting the"TARGET_KERNEL_SOURCE=XXX" line for what you are doing and then if you have to rebuild kernel again re-comment it</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/faq-hadkAdaptations/faq-hadk2018-09-11T02:13:49Z<p>Birdzhang: /* hls streams and other codecs */</p>
<hr />
<div>= Basics =<br />
== Skip tutorial ==<br />
Congratulations if you have got gui working. During the debugging process you will be building and flashing quite a few times, in which tutorial during the setup screen can be annoying. You can skip that by tapping on the each corner of the screen clockwise, while starting from left-top corner.<br />
<br />
== Updating submodules ==<br />
Submodule locations:<br />
```<br />
rpm/dhd<br />
hybris/droid-configs/droid-configs-device<br />
hybris/droid-hal-version-fp2-sibon/droid-hal-version<br />
```<br />
<br />
In the each folder check remote name using `git remote -v `<br />
<br />
Run (replace remote_name with the name you found out in previous step)<br />
```<br />
git fetch remote_name<br />
git pull remote_name master<br />
<br />
== Updating local build target ==<br />
Change release version in the command if needed<br />
In Platform SDK:<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R ssu release 2.1.4.14<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper ref<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper dup<br />
<br />
= Finishing Your Port =<br />
<br />
== how to bring store to your device ==<br />
Your device adaptation should be on Mer OBS (read "Building things on OBS" below)<br />
<br />
Do `ssu s`, Device UID should show a unique ID that is:<br />
IMEI for devices with modem, note - your GSM modem should provide a valid IMEI even without an inserted SIM! Always a good cross-check <br />
that IMEI matches the one on your phone's box or under battery, and in CM/Android<br />
For devices without modem -- WLAN or BT MAC address.<br />
<br />
Find another port/phone and prove that unique ID there is different than yours, and that all of them persist across reboots.<br />
If unique ID is OK then ping pketo on #sailfishos-porters with "Device model" line from `ssu s` to enable store for you.<br />
<br />
== Building things on OBS: ==<br />
Benefits: automated builds, Jolla Store (see above), OTA (see below); local PC is then only needed for Android, dhd, and droidmedia building (which barely happen when port becomes stable), and mic image creation<br />
<br />
It makes sense to go OBS as soon as you have polished your code, minimised hacks, and pushed it to github (usuall when display+touch+WLAN and maybe cellular are working)<br />
<br />
On IRC ask sledges to create project and get maintainership for your nemo:devel:hw:$VENDOR:$DEVICE (you can try things out in your home repo first)<br />
```<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Then "Add repositories"<br />
Check "SailfishOS latest"<br />
Click "Add selected repositories" at the bottom of the page<br />
Add a hw:devel:common repo to build against (which contains all important backports for all ports:), you'll need to add it as an additional repo:<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Click "Edit repository"<br />
Click Add additional path to this repository<br />
Project: nemo:devel:hw:common<br />
Repository: sailfish_latest_armv7hl<br />
```<br />
Check how other devices are built here e.g. https://build.merproject.org/project/show/nemo:devel:hw:semc:iyokan<br />
<br />
Create droid-hal-$DEVICE package manually and upload RPMs for droid-hal-device and droidmedia (and audioflingerglue if device needs it)<br />
For all other packages create webhooks and trigger builds<br />
<br />
How to create webhooks: https://wiki.merproject.org/wiki/Packaging/webhooks<br />
<br />
Which webhooks will you need for your device: https://webhook.merproject.org/webhook (search for nemo:devel:hw:lge:mako and replicate that structure)<br />
<br />
Add cibot as maintainer, then ask lbt via IRC to "patternise" your nemo:devel:hw:$VENDOR:$DEVICE<br />
<br />
Build an image successfully on your PC by following HADK but, using .ks file from droid-config-$DEVICE-ssu-kickstarts-*.rpm built on OBS (don't forget to sed the repos and add nemo:hw:devel:common as adaptation1, this will help you more: http://images.devaamo.fi/sfe/mako/gamma6/Jolla-2.0.1.11-mako-armv7hl.ks )<br />
<br />
== Over-the-Air updates (OTA): ==<br />
Prerequisities:<br />
<br />
Your port has stabilised and is ready to face the big public (gets our retweets, you create Sailfish OS port thread on e.g. XDA, evangelise it :)<br />
<br />
Good measure is to have bare necessities of a daily-driver for most people: LED, audio, texts, calls, data, WLAN, GPS, camera, light, proximity, accelerometer, vol keys, vibra, power management<br />
<br />
You should be building on OBS (guide above)<br />
<br />
Then add these two files (change contents apropriately)<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/flash-partition/device-info<br />
<br />
Change `PART_REAL_1` to match "boot" partition of your device<br />
Change `CPUCHECK_STRING` to match the Hardware field in `/proc/cpuinfo`<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/platform-updates/flash-bootimg.sh<br />
Don't forget to make it executable<br />
<br />
Port over to your device this line:<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/blob/ca102d255f1b6f274e2768e8cbd4ad9c631890e9/droid-hal-hammerhead.spec#L12<br />
<br />
And this commit (only if MultiROM exists or in-the-works for your device):<br />
https://github.com/mer-hybris/droid-config-hammerhead/commit/cb39670de095b914aea23d6ce0e633d295493016<br />
Don't forget to commit and tag so configs rebuild on OBS :)<br />
Simulate OTA on :devel: https://wiki.merproject.org/wiki/Template:SFOS_OTA , see if all is fine (e.g. you can build devel 1.1.9.28 image and OTA it to 2.0)<br />
Then you can test how an updated kernel package flashes itself automatically with an extra reboot, by making some change in kernel, reuploading RPMs and simulating OTA again<br />
For your users to actually use OTA, you should move it to :testing (on IRC ask sledges to create nemo:testing:hw:$VENDOR:$DEVICE), to still be able to play (i.e. break things) in your :devel<br />
<br />
Get maintainership on that :testing repo<br />
- Add cibot as maintainer, then via IRC ask lbt to "patternise" that repo too<br />
- Click on Repositories tab in your nemo:testing:hw:$VENDOR:$DEVICE<br />
- Then "Add repositories"<br />
- Then "pick one via advanced interface"<br />
- Start typing "sailfishos", then pick the version you want OTA to be available for in format "sailfishos:X.Y.Z.W"<br />
- Choose "latest_$PORT_ARCH" for your architecture<br />
- Make the "Name" to match exactly "sailfishos_X.Y.Z.W"<br />
- Add nemo:testing:hw:common to that as additional repo just like you did with :devel: above<br />
<br />
Ensure NO webhooks point to :testing ! Cross-check with https://webhook.merproject.org/webhook<br />
<br />
Promote by using osc copypac to all your device packages from devel to testing (useful script: http://pastebin.com/GssLRr8e )(How To https://gist.github.com/taaem/53ed3a99893d323d7ab3bd8d07540f50 ) - use this (or simpler "Submit Package" WebUI option) also in future whenever a HW adaptation package needs updating in between sfos releases (PR is being prepared to add device hw version to zip filename, HW Adaptation version is also shown in About Product, and is incremented by 1 each time OBS automatically rebuilds droid-hal-version-$DEVICE whenever any hw package changes ;))<br />
<br />
Make an image with adaptation-community repo pointing to testing, adaptation-community-common pointing to common in your .ks file, and start distributing that to the rest of the world<br />
Don't forget to document everything, create a nice installation wiki article for your device (if not yet already), and add such section: https://wiki.merproject.org/wiki/index.php?title=Adaptations/libhybris/Install_SailfishOS_for_mako&action=edit&section=4<br />
Point your existing users to the OTA section of your device's wiki<br />
<br />
Once the next Sailfish OS release comes out and your port adopts it, you can create a new repository in OBS with that version and your users will OTA to it.<br />
<br />
= Debugging Tips =<br />
== Determine which is the touch event ==<br />
use command "getevent" as super user in adb shell. The event which spams most outputs on the screen when the screen is touched is the touch event.<br />
<br />
== persistent journalctl: ==<br />
modify /etc/systemd/journald.conf :<br />
<br />
Storage=volatile --> Storage=automatic<br />
<br />
Then do:<br />
```<br />
mkdir /var/log/journal<br />
reboot<br />
```<br />
<br />
Systemd suppresses journal, and some valuable info might get hidden. To prevent this, set<br />
<br />
RateLimitInterval=0<br />
<br />
== monitoring udev events ==<br />
udevadm monitor is your friend.<br />
<br />
To get it for cyanogenmod, add this repository https://github.com/chombourger/android-udev/ to your manifest as external/usb and make udevadm<br />
<br />
To monitor boot-time events, compile the kernel with CONFIG_DEBUG_KOBJECT=y and increase the log buffer size by setting the kernel command line option: log_buf_len=21 (or higher)<br />
<br />
== perf :) ==<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
mkdir -p perf/rpm<br />
cd perf<br />
ln -s $ANDROID_ROOT/kernel/$VENDOR/$DEVICE linux<br />
curl -o rpm/perf.spec http://pastebin.com/raw/QiW7FD02<br />
<br />
Replace string <YOUR_KERNEL_VERSION> in rpm/perf.spec with kernel version for which you're building perf (for example: 3.4.0)<br />
<br />
mb2 -s rpm/perf.spec -t $VENDOR-$DEVICE-armv7hl build<br />
mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/<br />
createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE<br />
<br />
"less" package is needed for perf to format its output. You can find it here: <br />
- http://repo.merproject.org/obs/nemo:/testing:/hw:/common/sailfish_latest_armv7hl/ <br />
<br />
= HADK Fixes =<br />
== Issues with pulseaudio module build ==<br />
downgrade hybris/droid-configs/droid-configs-device as described above by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
build_packages.sh --configs<br />
<br />
== Issues with ngfd or ngfd-plugin-droid-vibrator or pulseaudio ==<br />
Update submodules as described above<br />
Downgrade hybris/droid-configs/droid-configs-device by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
<br />
Replace `%define have_vibrator 1` in droid-hal-version-@DEVICE@.spec with `%define have_vibrator_native 1`<br />
Change package names in droid-configs patterns as described in templates https://github.com/mer-hybris/droid-hal-configs/commit/aac652aae840a15629c0f4e070275ea128fe088f<br />
Downgrade ngfd plugin:<br />
Go to hybris/mw/ngfd-plugin-droid-vibrator and run:<br />
<br />
git reset --hard 3e2b4fb5b03a6d3db9ca5a41c7091e771f99cc4f<br />
<br />
IN PLATFORM_SDK:<br />
<br />
$PLAFORM_SDK<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator -s rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm ngfd-plugin-droid-vibrator<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator --spec=rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
when you run the whole build_packages.sh after this skip the ngfd-plugin-native-vibrator build<br />
<br />
== libminisf.so not found ==<br />
Add libminisf to droidmedia make command like this in HABUILD_SDK:<br />
<br />
make -jXX libdroidmedia minimediaservice minisfservice libminisf<br />
<br />
Also update rpm/dhd submodule in case you have an older version<br />
<br />
<br />
== No installroot directory after droid-configs build when preparing .ks file ==<br />
<br />
rpm2cpio droid-local-repo/$DEVICE/droid-configs/droid-config-$DEVICE-ssu-kickstarts-1-1.armv7hl.rpm | cpio -idmv<br />
<br />
in the sed command use `$ANDROID_ROOT/usr/share/kickstarts/$KS` instead of `$ANDROID_ROOT/hybris/droid-configs/installroot/usr/share/kickstarts/$KS`<br />
<br />
== Building droid-config fails with: Segmentation fault (core dumped) /usr/lib/qt5/bin/kmap2qmap ......... ==<br />
<br />
try updating the packages in the target with <br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper ref<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper dup<br />
<br />
or<br />
<br />
add the file /system/build.prop to the target with the contents <br />
<br />
<br />
== mic fails during the run ==<br />
<br />
If you get error like this<br />
Warning: repo problem: pattern:jolla-hw-adaptation-$DEVICE1-1.noarch requires droid-config-$DEVICE-policy-settings, but this requirement cannot be provided, uninstallable providers: droid-config-$DEVICE-policy-settings-1-1.armv7hl[adaptation0-$DEVICE-2.0.1.7]<br />
<br />
Or for example<br />
No provider of 'pkgconfig(qofonoext)' found.<br />
<br />
In these cases the missing dependencies can be added with the command:<br />
<br />
MER_SDK $<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -m sdk-install ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
<br />
Also add the same repo to .ks file before building the installation package with mic<br />
Run the following commands before chapter 8.3 of HADK pdf<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
MOBS_URI="http://repo.merproject.org/obs"<br />
HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@"<br />
HA_REPO1="repo --name=common --baseurl=$MOBS_URI/nemo:/devel:/hw:/common/sailfish_latest_@ARCH@/"<br />
sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
If MIC fails with <br />
RuntimeError: Invalid runmode: native <br />
remove `--runtime=native` from mic command args<br />
<br />
If the error message ends with <br />
CreatorError: <creator>Unable to find pattern: Jolla Configuration $DEVICE<br />
then make sure that you executed 8.4 in the hadk pdf (as of v1.9.9). If it still does not work, try executing it again, then process patterns and build again.<br />
If the ks file generated in $ANDROID_ROOT does not contain the local repo, then add it manually. To the top of the list of repos, add<br />
"repo --name=adaptation-community-$DEVICE-@RELEASE@ --baseurl=file:$ANDROID_ROOT/droid-local-repo/$DEVICE/" <br />
substitute $DEVICE and $ANDROID_ROOT appropriately. <br />
Process patterns and build again.<br />
<br />
== sudo: effective uid is not 0, is sudo installed setuid root? ==<br />
Just after chroot is entered through the `sdk` command, sudo fails to execute and fails with the previous message<br />
check for suid mount flag in the bind-mounted root: if your home (not chroot home) is mounted with nosuid you need to remount it before chroot<br />
<br />
$HOST<br />
sudo mount -o remount,suid $HOME<br />
<br />
If you're running an encrypted home partition with ecryptfs, you need to remount home anyway, even if nosuid flag is not set<br />
<br />
$HOST<br />
sudo mount -i -o remount,suid $HOME) <br />
<br />
repo init -u git://github.com/mer-hybris/android.git -b hybris-11.0 fails because of gpg<br />
In sdk chroot gpg command is gpg2<br />
<br />
$MERSDK<br />
git config --global gpg.program gpg2<br />
<br />
== existence_error (yes, you read that right) when locally building policy-settings-common: ==<br />
You get:<br />
ERROR: error(existence_error(procedure, qsave_program/2), context(precompile/0, _G669))<br />
Solution:<br />
```<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -msdk-install<br />
cd /usr/lib/swipl-5.6.50/library<br />
rm INDEX.pl<br />
zypper in fakeroot<br />
fakeroot swipl -g true -t 'make_library_index(.)'<br />
```<br />
then rebuild the package again with mb2<br />
<br />
== Nothing provides /system/bin/sh: ==<br />
Add this to your .spec<br />
<br />
%define __provides_exclude_from ^/system/.*$<br />
%define __requires_exclude ^/system/bin/.*$<br />
%define __find_provides %{nil}<br />
%define __find_requires %{nil}<br />
<br />
== rpm/dhd/helpers/build_packages.sh fails building libhybris, ... ==<br />
<br />
HOST$<br />
cd $HOME<br />
sudo mkdir -p $MER_ROOT/devel<br />
sudo chown -R $USER mer/devel<br />
run the script again <br />
<br />
== Error During end of kernel build ==<br />
``` <br />
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider<br />
at java.lang.Class.getDeclaredMethods0(Native Method)<br />
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)<br />
at java.lang.Class.getMethod0(Class.java:2774)<br />
at java.lang.Class.getMethod(Class.java:1663)<br />
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)<br />
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)<br />
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br />
at java.security.AccessController.doPrivileged(Native Method)<br />
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)<br />
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)<br />
... 6 more<br />
```<br />
<br />
Ensure that unzip is installed as its required for BouncyCastle compile<br />
<br />
run something like this in $ANDROID_ROOT outside HABUILD_SDK<br />
<br />
java -jar \<br />
/home/$USER/mer/android/droid/out/host/linux-x86/framework/dumpkey.jar \<br />
build/target/product/security/testkey.x509.pem \<br />
build/target/product/security/cm.x509.pem \<br />
build/target/product/security/cm-devkey.x509.pem > /home/$USER/mer/android/droid/out/target/product/$DEVICE/obj/PACKAGING/ota_keys_intermediates/keys<br />
<br />
== qemu gives segmentation fault error in Ubuntu 16.10 ==<br />
<br />
instead, use Ubuntu 16.04.1 LTS, or earlier versions<br />
<br />
== qt5-qpa-hwcomposer-plugin fails ==<br />
when building for 2.1 with the error "pkgconfig(Qt5PlatformSupport)" <br />
update dhd submodule<br />
<br />
== Building geoclue-providers-hybris fails ==<br />
<br />
Building geoclue-providers-hybris fails with the error locationsettings.h for local builds update dhd submodule and in case of OBS build change the branch to jb36857<br />
<br />
= Adaptation Guides =<br />
<br />
== ff-memless haptics ==<br />
<br />
To use memless haptics driver instead of droid-vibrator, you need a kernel haptics driver that supports a memless interface (evdev). This is briefly explained in HADK pdf chapter 13.1.<br />
Reference kernel driver implementation for qpnp vibrator is here;<br />
https://github.com/kimmoli/android_kernel_oneplus_msm8974/pull/1<br />
<br />
It needs also vibrator configuration files if defaults are not ok; (this is also in HADK)<br />
https://github.com/kimmoli/droid-config-onyx/commit/dac479716a6b4300be3c5875982265f6914bb498<br />
<br />
And depends which evdev index the new ffmemless gets, one might need to change lipstick config;<br />
https://github.com/kimmoli/droid-config-onyx/pull/4/commits/73bb85fcdc5e2627a8cb0cea0fb5fc2ca9d8e814<br />
<br />
in droid-hal-version-$DEVICE.spec comment `%define have_vibrator 0` out and add `%define have_ffmemless 1`<br />
<br />
add build of qt5-feedback-haptics-ffmemless in build_packages.sh, and comment out other vibrator packages;<br />
<br />
buildmw "https://git.merproject.org/mer-core/qt-mobility-haptics-ffmemless.git" rpm/qt5-feedback-haptics-ffmemless.spec || die<br />
<br />
== FM Radio support ==<br />
<br />
Needs a device with suitable FM radio hardware and a kernel defconfig containing `CONFIG_RADIO_IRIS=y` and `CONFIG_RADIO_IRIS_TRANSPORT=m (or =y)`<br />
<br />
If your `CONFIG_RADIO_IRIS_TRANSPORT` is built-in then this is not needed, however if you have problems try building `CONFIG_RADIO_IRIS_TRANSPORT` as a module: add (adapt to fit your device if needed) <br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/droid-fm-up.service<br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-fm-up.service<br />
<br />
Sometimes device permissions are wrong (root owner), in this case:<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/udev/rules.d/999-droid-fm.rules to your droid-configs repo (or directly to device for testing)<br />
- Add qt5-qtmultimedia-plugin-mediaservice-irisradio to patterns (or install directly to device for testing)<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/pulse/xpolicy.conf.d/fmradio.conf to your droid-configs repo (or directly to device for testing)<br />
<br />
(pre-2.0.2) Update packages from http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/ (for building new images add this to your .ks file as described elsewhere in FAQ)<br />
<br />
Starting from Sailfish OS 2.0.2 FM radio Media app plugin jolla-mediaplayer-radio can be added to patterns.<br />
<br />
(pre-2.0.2) For FM radio testing harbour-piratefm can be obtained from <br />
- http://repo.merproject.org/obs/home:/kimmoli/sailfish_latest_armv7hl/<br />
<br />
== Flashlight shortcut ==<br />
<br />
Starting from Sailfish 2.0.2 it's possible to have flashlight shortcut in eventsview. If your device supports flash torch mode add jolla-settings-system-flashlight package to patterns in your droid-configs repo. The shortcut can be enabled in the eventsview settings.<br />
<br />
== Notes on LOS14.1 Porting ==<br />
XXX: remove the word "exec" from the last line of /usr/bin/droid/droid-hal-startup.sh, to make this permanent add a modified copy of the file to $ANDROID_ROOT/hybris/droid-configs/sparse/usr/bin/droid/droid-hal-startup.sh (this has to be fixed properly at some point)<br />
<br />
On mixed 32/64bit devices, LD_LIBRARY_PATH could be wrong. If logcat shows services aborting with SIG 6 due to wrong arch, try removing the LD_LIBRARY_PATH from /init.environ.rc<br />
<br />
Run this script in $ANDROID_ROOT http://paste.opensuse.org/40869869<br />
<br />
Details of what the script does:<br />
Symlinks for services:<br />
<br />
sh-3.2# ls -lh /usr/libexec/droid-hybris/system/etc/init/ <br />
total 4.0K <br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 atrace.rc -> /system/etc/init/atrace.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 bootstat.rc -> /system/etc/init/bootstat.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 debuggerd.rc -> /system/etc/init/debuggerd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 drmserver.rc -> /system/etc/init/drmserver.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 dumpstate.rc -> /system/etc/init/dumpstate.rc <br />
lrwxrwxrwx 1 root root 31 Oct 6 20:52 gatekeeperd.rc -> /system/etc/init/gatekeeperd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 init-debug.rc -> /system/etc/init/init-debug.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 installd.rc -> /system/etc/init/installd.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 logcatd.rc -> /system/etc/init/logcatd.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 logd.rc -> /system/etc/init/logd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 mediacodec.rc -> /system/etc/init/mediacodec.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediadrmserver.rc -> /system/etc/init/mediadrmserver.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediaextractor.rc -> /system/etc/init/mediaextractor.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 mtpd.rc -> /system/etc/init/mtpd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 perfprofd.rc -> /system/etc/init/perfprofd.rc<br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 racoon.rc -> /system/etc/init/racoon.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 rild.rc -> /system/etc/init/rild.rc<br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 superuser.rc -> /system/etc/init/superuser.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 uncrypt.rc -> /system/etc/init/uncrypt.rc <br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vdc.rc -> /system/etc/init/vdc.rc<br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vold.rc -> /system/etc/init/vold.rc<br />
<br />
NOTE, no audioserver and mediaserver links!<br />
NOTE, bootanim was removed in the updated script, also vold was added<br />
<br />
if NINJA builds are not working, export USE_NINJA=false<br />
<br />
For actdead charging animation, see changes here https://github.com/kimmoli/sfos-onyx-issues/issues/29 but also add 'trigger late-start' to 'on charging' in init.rc<br />
<br />
== Anbox Information ==<br />
https://public.etherpad-mozilla.org/p/anbox-sailfishos<br />
<br />
== Graphics performance improvements ==<br />
Test framerate display (can be enabled in Settings->Developer mode) when using some apps like gallery<br />
If the top view is mostly red try to set QPA_HWC_IDLE_TIME=5 in /var/lib/environment/compositor/droid-hal-device.conf<br />
Run <br />
```systemctl restart user@100000 using devel-su```<br />
<br />
Test framerate display again and if you see more green than before you should use the value<br />
<br />
Different values can be tested but value 5 has been found to be helping on some devices<br />
<br />
On some devices also setting `QPA_HWC_BUFFER_COUNT=3` in `/var/lib/environment/compositor/droid-hal-device.conf` helps with graphics performance<br />
<br />
== Using backported Bluetooth drivers in 3.4 kernel for devices with Qualcomm bluetooth chip using hci_smd driver ==<br />
Generic guide: https://bluez-android.github.io/#building-own-kernel<br />
<br />
Sailfish specific guide:<br />
<br />
Build your kernel with patches from https://github.com/bluez-android/misc/tree/master/patches-kernel and with following flags defined in defconfig<br />
<br />
CONFIG_BT=m<br />
CONFIG_CRYPTO_CMAC=y<br />
CONFIG_CRYPTO_USER_API=y<br />
CONFIG_CRYPTO_USER_API_HASH=y<br />
CONFIG_CRYPTO_USER_API_SKCIPHER=y<br />
<br />
NOTE: Patches may not be required for >= 3.18<br />
In your local_manifest, add <br />
```<project name="mlehtima/backports-bluetooth" path="external/backports-bluetooth" revision="master" />```<br />
run repo sync in HABUILD_SDK<br />
<br />
Build backported drivers by running make backports in HABUILD_SDK while in $ANDROID_ROOT folder<br />
if you get `"external/backports-bluetooth/drivers/bluetooth/hci_smd.c:35:26: fatal error: mach/msm_smd.h: No such file or directory" `error change <br />
`#include <mach/msm_smd.h> to #include <soc/qcom/smd.h|>` in that file<br />
<br />
IMPORTANT: if you rerun make hybris-hal at any time you will always have to rerun make backports after that<br />
Package droid-hal as usual<br />
<br />
Change your config repo to use bluez5 https://github.com/mlehtima/droid-config-fp2-sibon/commit/1cba868fdcfebaffc14a084c5d82fbf2e4339173<br />
Rebuild config rpms and image<br />
<br />
== EA Scratchbox Targets ==<br />
<br />
Lately Jolla offers two sb2 targets so the HADK instructions create some strange behaviour when downloading the sb2 target<br />
<br />
You have two options now to replace this line<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4)<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | tail -n1)<br />
will give you the sb2 for the latest Early Access <br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | head -n1)<br />
<br />
will give you the sb2 for latest non EA SFOS Version <br />
<br />
== to change pixel ratio on a running device, as user: ==<br />
```<br />
devel-su dconf update<br />
# PIXEL_RATIO should be close to the value of horizontal_display_resolution/540<br />
# e.g. Nexus 7 (800 x 1280) displays the pixel ratio is 800/540~=1.48<br />
# always round the value up with two decimal precision<br />
PIXEL_RATIO=1.48<br />
<br />
# UPDATE! Please test the new formula for pixel ratio calculation:<br />
# diagonal_display_size_inches/4.5 * horizontal_display_resolution/540<br />
# and feedback the outcome to sledges via IRC (better/worse/closer via own trial&error picks?)<br />
# Yet another formula: YourDevicePPI/sbjPPI (245), e.g. OnePlusX PPI 441/245 = 1.8<br />
# Available ICON_RES values are 1.0, 1.25, 1.5, 1.75, and 2.0. Choose the closest one to PIXEL_RATIO:<br />
ICON_RES=1.5<br />
devel-su zypper in jolla-ambient-z$ICON_RES ambient-icons-closed-z$ICON_RES<br />
dconf write /desktop/sailfish/silica/theme_pixel_ratio $PIXEL_RATIO<br />
dconf write /desktop/sailfish/silica/theme_icon_subdir $<br />
# check that everything worked:<br />
dconf read /desktop/sailfish/silica/theme_pixel_ratio<br />
devel-su reboot<br />
# PIXEL_RATIO and ICON_RES are subjects to fine tuning: https://bugs.nemomobile.org/show_bug.cgi?id=814#c1<br />
```<br />
Script to scale your icons https://pastebin.com/mxKRkt7Z<br />
<br />
make[3]: *** [security/commoncap.o] Error 1...<br />
Those errors appears because ANDROID_CONFIG_PARANOID_NETWORK is disabled in your kernel and with it enabled, you can't access internet with Sailfish OS. ( Since hybris-12.1, rild does not work without ANDROID_CONFIG_PARANOID_NETWORK. Add nemo to group inet if it is enabled.)<br />
Check http://forum.xda-developers.com/showpost.php?p=42880275&postcount=104<br />
To resolve this replace in <path of your kernel>/security/commoncap.c :<br />
``` <br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
``` <br />
With this:<br />
``` <br />
#ifdef CONFIG_ANDROID_PARANOID_NETWORK<br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
#endif<br />
```<br />
<br />
Save the file and recompile the kernel<br />
<br />
== Build Wlan Driver as Module ==<br />
<br />
Most devices require the wlan driver to be built and loaded as a module during startup<br />
Ensure you have CONFIG_MODULES=y in your kernel config<br />
<br />
Find your wifi driver in your kernel config, it should already be set to `y` and have something like WLAN in the name.<br />
Set it to m<br />
eg.<br />
CONFIG_BCMDHD=m<br />
CONFIG_PRIMA_WLAN=m<br />
CONFIG_PRONTO_WLAN=m<br />
<br />
Add the wlan-module-load.service to your droid-configs sparse directory<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/wlan-module-load.service<br />
<br />
and add a symlink to enable to service on startup:<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/multi-user.target.wants/wlan-module-load.service<br />
<br />
== Bluetooth for Qualcomm devices ==<br />
<br />
Enable `CONFIG_BT_HCISMD` in the kernel defconfig. If it is not present in your kernel, then make these changes:<br />
- https://github.com/adeen-s/android_kernel_cyanogen_msm8916/commit/4627f4f6f5d886433ff1f9639dc18fe8a006fd00 <br />
<br />
Add these files to sparse (or directly to device) and modify them as needed for your device --><br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/usr/bin/droid/droid-hcismd-up.sh<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/droid-hcismd-up.service<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-hcismd-up.service<br />
<br />
Bluetooth Should now work. If it doesn't then make sure the permissions are set correctly and all paths mentioned in above files point to valid locations.<br />
<br />
If you are still having trouble, check to see if there is a service that configures bluetooth and disable/comment it. Eg, config_bluetooth in init.qcom.rc<br />
<br />
<br />
<br />
== Bluetooth for Broadcomm devices ==<br />
Enable `CONFIG_BT_HCIUART_H4` in the kernel defconfig. These devices typically are attached on high speed uart to something like /dev/ttyHS0<br />
<br />
- Symlink your firmware file to /etc/firmware. <br />
eg. https://github.com/r0kk3rz/droid-config-scorpion_windy/blob/master/sparse/etc/firmware/BCM4350C0.hcd<br />
<br />
- You need to make sure the firmware symlink filename matches your bluetooth device name, which can be found by stracing hciattach<br />
Build rfkill middleware and add to patterns:<br />
```<br />
rpm/dhd/helpers/build_packages.sh --mw=https://github.com/mer-hybris/bluetooth-rfkill-event --spec=rpm/bluetooth-rfkill-event-hciattach.spec<br />
```<br />
- add configs: https://github.com/mer-hybris/droid-config-f5121/commit/afa01bdf4bdb8a0d16bbd34996ec7cac34bbbc55<br />
<br />
== Ofono problems ==<br />
RILD is running but ofono does not work<br />
If ofono is not working properly and shows "ERROR! Can't connect to RILD: No such file or directory" in logs, edit /etc/ofono/ril_subscription.conf to contain<br />
<br />
[ril_0]<br />
name=RIL1<br />
socket=/dev/socket/rild<br />
if your device is dual SIM, add also these lines (don't add them otherwise!):<br />
<br />
[ril_1]<br />
name=RIL2<br />
socket=/dev/socket/rild2<br />
<br />
If it works add your ril_subscription.conf to the droid-config-$DEVICE like done here https://github.com/Nokius/droid-config-find5/commit/3e3e636e7e3973f9102ebca9dea79794c00c9174<br />
Also add the jolla-settings-networking-multisim to patterns like done here https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/patterns/jolla-configuration-fp2-sibon.yaml#L15<br />
Fix remembering manual access point configurations across reboots run the following command before building the image<br />
sed -i "/begin 60_ssu/a chown -R radio:radio /var/lib/ofono" Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
Devices without modem<br />
File /etc/ofono/ril_subscription.conf should contain<br />
<br />
[Settings]<br />
EmptyConfig=true<br />
<br />
= Device Fixes =<br />
<br />
== Problems with tfa9890 ==<br />
Copy `/system/etc/firmware` to `/etc/firmware`. Symlink or mount doesn't work! (But why?)<br />
<br />
== So you booted your Sailfish OS? Congrats! No GUI? Oh dear :) ==<br />
<br />
<br />
both usb0 and rndis0 interfaces might be up, remove usb0 from init-script and rebuild kernel image with make hybris-boot or make hybris-recovery<br />
<br />
<br />
== lipstick segfaults/no display ==<br />
As you follow steps below, strace any of the binaries that would fail for non-obvious reasons. You'll need to install strace to do so: zypper in strace<br />
test simple hwc as root:<br />
<br />
EGL_PLATFORM=hwcomposer test_hwcomposer<br />
<br />
^^ strace if segfaults<br />
if strace dies after open("/sys/kernel/debug/tracing/trace_marker..., perform<br />
<br />
systemctl mask sys-kernel-debug.mount<br />
<br />
test_hwcomposer should not be used as reliable hwc test!! if fails, then try minimer:<br />
<br />
curl -O https://qtl.me/minimer3.tar.gz<br />
zypper in qt5-qtdeclarative-qmlscene<br />
tar -xf minimer3.tar.gz; cd minimer<br />
EGL_PLATFORM=hwcomposer /usr/lib/qt5/bin/qmlscene -platform hwcomposer main.qml<br />
<br />
if fails as user, try as root<br />
/system/bin/surfaceflinger<br />
for more info: zypper in gdb<br />
if you get test_hwcomposer, minimer or lipstick segfault, or test_hwcomposer or minimer running but doing nothing (as on m7)<br />
Check if your device uses qcom_display-caf or display-legacy<br />
Look in any of the BoardConfig.mk or BoardConfigCommon.mk in any of the device repos for the device for the variable TARGET_QCOM_DISPLAY_VARIANT. It should be set to either caf or legacy.<br />
The repos included can be determined by looking at the -include device/$VENDOR/*/BoardConfig.mk or device/$VENDOR/*/BoardConfigCommon.mk lines at beginning the .mk files starting from the primary BoardConfig.mk<br />
If you're on display-legacy or display-caf(repo sync before 2015.06.04) patch hwcomposer withhttp://pastebin.com/AfRXPKVA<br />
From HABUILD_SDK recompile android hwcomposer*.so for your device<br />
Find the name of the hwcomposer*.so module: run make modules | grep hwcomposer<br />
If this command complains about missing column command run sudo apt-get install bsdmainutils)<br />
Run `make hwcomposer.module_name` from results above<br />
Once rebuilt, hwcomposer.*.so will be picked up and used by droid hal rebuild, and reside under /usr/libexec/droid-hybris/system/lib/hw<br />
If your apps are crashing (like on flo): Repeat the same for gralloc and copybit<br />
Scream on the IRC if this worked for you<br />
If strace indicates something like:<br />
<br />
"Waiting for service display.qservice..."<br />
This error is known only on cm-10.1 base, and will be upstreamed to mer-hybris soon, but we need more tests: applyhttps://github.com/mer-hybris/android_frameworks_native/commit/6ed4a6e834f6c71b2b6bd8ae1134f50b060e70be to this line https://github.com/CyanogenMod/android_frameworks_base/blob/cm-10.1/cmds/servicemanager/service_manager.c#L88 and also apply https://github.com/mer-hybris/android_system_core/commit/34ea48fd3ad7bf47ec0d0524d76bd20e62717773<br />
open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY|O_LARGEFILE) = <br />
disable debugfs by: https://github.com/mer-hybris/droid-hal-device/commit/8d437fc6f215081d4e1d2baaa6ac23bb94f73154<br />
if it still crashes on gralloc or other gpu related bits, refer to WIP: https://wiki.merproject.org/wiki/Adaptations/libhybris/gpu<br />
<br />
Devices with Mali GPU<br />
Add this to $ANDROID_ROOT/rpm/droid-hal-$DEVICE.spec before the last line (do not change the last line, ever)<br />
%define android_config \<br />
#define MALI_QUIRKS 1\<br />
%{nil}<br />
Rebuild droid-hal and libhybris packages<br />
<br />
<br />
== SIM card not detected ==<br />
This often causes a bootloop<br />
Cellular Modem bringup is now in HADK v1.1.1 section 13.3<br />
<br />
Additional checks:<br />
- Replicate /dev/block structure from Android as closely as possible (for rild to be able to access the modem partition)<br />
- Run ls -lR /dev/block in CM<br />
- Run ls -lR /dev/block in Sailfish OS<br />
<br />
diff the two outputs (this is WIP - android's toolbox ls might need more parameters to produce a comparable output)<br />
If you see differences you need to add custom udev rules to create the correct /dev/block structure<br />
(added automatically since 2016-12-10) For devices with /dev/block/platform/msm_sdcc.1/by-name/ paths (msm_sdcc.1 can be different) add to $ANDROID_ROOT/rpm/ these paths and files with contents, and it most probably will help (but still paste your diff to the IRC channel):<br />
<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/platform-device<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/rules.d/998-droid-system.rules<br />
<br />
(added automatically since 2017-06-03) Some devices (at least all hybris-13.0 based ports) have /dev/block/bootdevice/by-name/ as /dev/block structure in CM in which case you need to add the following line to the end of the 998-droid-system.rules file in the last link:<br />
<br />
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", IMPORT{program}="/bin/sh /lib/udev/platform-device $env{DEVPATH}", SYMLINK+="block/bootdevice/by-name/$env{ID_PART_ENTRY_NAME}"<br />
<br />
If you have logcat and journal error messages suggesting that RIL/ofono can't power the modem on and you have a qcom chipset, have a look in your init.qcom.rc for lines that power it on when the boot animation (bootanim) stops. If you have those, try this (paths may need correcting): https://github.com/stephgosling/android_device_htc_m7-common/commit/9f4abdca65356090e6dd6f0356c5cf4a1870aa5f (note the typo there in the chown line!)<br />
<br />
If you have `pil-q6v5-mss fc880000.qcom,mss: modem: Failed to locate modem.mdt` in your `dmesg` then try this steps:<br />
<br />
- Mask firmware.mount<br />
- add this service to /lib/systemd/system/ https://pastebin.com/9tbUtVnC<br />
- create symlink to that service in /lib/systemd/system/local-fs.target.wants/ <br />
- add /usr/bin/droid/extract_firmware.sh with this content https://pastebin.com/bgphKn4z<br />
<br />
<br />
== Waiting for service SurfaceFlinger seen in logcat? then read this (read surfaceflinger-hack below) ==<br />
If you are using a service like lipstick-hack which loads surfaceflinger for a few seconds to init the hardware, then this stops servicemanager seeing minisfservice as SurfaceFlinger becuase it uses the same service name, then dies.<br />
Disable/mask lipstick-hack from being started by systemd<br />
Add lipstickhack to /init.rc and start in the the core class<br />
```<br />
service lipstickhack /usr/bin/droid/lipstick-hack.sh<br />
class core<br />
user system<br />
oneshot<br />
group graphics drmrpc<br />
```<br />
<br />
== Alternative to lipstick-hack (aka surfaceflinger-hack) ==<br />
<br />
For devices that need the so called lipstick-hack to start surfaceflinger for a few seconds to init the hardware we developed an alternative as the lipstick-hack has proven to be rather unstable during system boots.<br />
<br />
This alternative uses a modified version of libsurfaceflinger itself to init the display and then exits it's main run loop and afterwards behaves like minisfservice. This eliminates the timing issues of lipstick-hack.<br />
<br />
Implementation:<br />
1. BoardConfig.mk<br />
- in the BoardCommon.mk of your device add the following lines:<br />
<br />
# SurfaceFlinger init<br />
BOARD_USE_MOTO_SF = true<br />
<br />
2. libsurfaceflinger<br />
- apply the patches from https://github.com/guhl/android_frameworks_native/commit/ead91374111114fded280abe56484523355ee2cc to $ANDROID_ROOT/frameworks/native/services/surfaceflinger<br />
- in HABUILD_SDK build libsurfaceflinger by doing:<br />
<br />
source build/envsetup.sh<br />
breakfast $DEVICE<br />
make libsurfaceflinger<br />
<br />
<br />
3. <br />
- apply the patches from https://github.com/guhl/droidmedia/commit/cf176cd1bec2c0e5b633b8d728528edc6133ed7d to $ANDROID_ROOT/external/droidmedia<br />
- build droidmedia as described in HADK v2.0.1 - chapter 13.2<br />
<br />
4. init.rc<br />
- add minisfservice as a service to your $ANDROID_ROOT/system/core/rootdir/init.rc like this:<br />
<br />
service minisf /usr/libexec/droid-hybris/system/bin/minisfservice<br />
setenv LD_PRELOAD /usr/libexec/droid-hybris/system/lib/libsurfaceflinger.so<br />
class main<br />
user system<br />
group graphics<br />
<br />
<br />
5. rebuild hybris-hal<br />
as described in HADK v2.0.0 - chapter 5.4 and afterwards package Droid HAL and build the Root Filesystem<br />
<br />
== hls streams and other codecs ==<br />
<br />
devel-su<br />
#not needed anymore: ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
#not needed anymore: zypper ref common<br />
#not needed anymore: zypper dup --from common # safe to do full upgrade/downgrade there<br />
ssu ar experimental http://repo.merproject.org/obs/nemo:/devel:/hw:/experimental/sailfish_latest_armv7hl/<br />
zypper ref experimental<br />
zypper dup --from experimental<br />
<br />
== Failed at step OOM_ADJUST spawning /usr/libexec/mapplauncherd/booster-qt5: Permission denied ==<br />
Causes for example the failure of startup wizard on first boot:<br />
- try to revert kernel change in fs/proc/base.c<br />
- https://github.com/mer-hybris/android_kernel_oneplus_msm8974/commit/0ed87d7f3cf7d3388f09bd264a856ad9efc564a3<br />
<br />
ping on the IRC if this worked for you :)<br />
<br />
<br />
== UI is shown in tablet mode ==<br />
<br />
needed anymore<br />
<br />
(this fix will not work when the display has a super high resolution)<br />
Symptoms: event view has two columns, very large icons in app grid<br />
Check if the screen size is recognised correctly<br />
<br />
journalctl --no-pager | grep QSizeF<br />
<br />
If the values are not realistic set the screen size in your droid-hal-device.conf<br />
(only works since Sailfish OS 2.0.1)<br />
<br />
QT_QPA_EGLFS_PHYSICAL_WIDTH=<in mm><br />
QT_QPA_EGLFS_PHYSICAL_HEIGHT=<in mm><br />
<br />
<br />
== Access Android's virtual SD card (needs more massaging) ==<br />
<br />
Has received mixed feedback of working/not-working. Replicate onto your device accordingly:<br />
<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/commit/ca102d255f1b6f274e2768e8cbd4ad9c631890e9<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/usr/bin/droid/android-links.sh<br />
- https://github.com/mer-hybris/droid-config-hammerhead/commit/e15591b98380c95e5be96bf9f386278b9825b5f3<br />
<br />
<br />
== Fix remembering Bluetooth state on reboot ==<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/commit/265310c24e254ba102211b6ea398f9ef2b68d523<br />
<br />
== pm-service complains about no permissions ==<br />
<br />
its because PARANOID_NETWORK is required for your kernel config<br />
<br />
<br />
== Kernel changes needed for updated systemd in Sailfish 2.1.1.X ==<br />
<br />
Apply this to all devices with 3.4 kernel https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0640113be25d283e0ff77a9f041e1242182387f0<br />
<br />
<br />
== libdsyscalls is cause of segfault after r or minimer ==<br />
<br />
Usually means that in your device repo, its enabling clang somewhere, do a grep and disable clang and rebuild :)<br />
<br />
<br />
== Audio not routed to headphones ==<br />
<br />
run evdev_trace from mce-tools package and find /dev/input/eventX that detects headphones connection. It will be the one with SW_HEADPHONE_INSERT* and SW_MICROPHONE_INSERT* like here:<br />
<br />
<br />
----====( /dev/input/event0 )====----<br />
Name: "sensorprocessor"<br />
ID: bus 0x0, vendor, 0x0, product 0x0, version 0x0<br />
Type 0x00 (EV_SYN)<br />
Type 0x01 (EV_KEY)<br />
KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_POWER KEY_CAMERA KEY_MEDIA KEY_VOICECOMMAND<br />
Type 0x05 (EV_SW)<br />
SW_LID SW_HEADPHONE_INSERT* SW_MICROPHONE_INSERT*<br />
<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/ohm/plugins.d/accessories.ini file and replace jack-match and jack-device with values from evdev_trace:<br />
jack-match matches Name: field and<br />
ack-device matches /dev/input/eventX<br />
where X is your device input number<br />
<br />
Optional way for devices without headphone connector event device:<br />
<br />
If your device doesn't have event device for the headphone jack then it might have a switch in /sys/class/switch/h2w/ or similar path<br />
If the state file in the /sys/class/switch/h2w/ or similar path reacts to headphone connection by changing the value it can be used for headphone detection<br />
Add file /etc/ohm/plugins.d/accessories.ini with the following content (replace switch name with the name found in the path on your device)<br />
<br />
model = uevent<br />
switch = h2w<br />
<br />
If the headphone detection works then add the file to your config repo sparse for future builds<br />
<br />
== hwcomposer fails to run with `atomic commit failed ret:-22` in dmesg ==<br />
You may need to add the following commits<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/ab8e2349bae3a0971b237b744465089d6f22f8a1<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/c48eee07ace04204cf6c670ddfcf8c694fd88db4<br />
<br />
<br />
== qseccomd crashing ==<br />
Devices that have qseecomd usually have issues getting to UI so its best to disable it in the init.$DEVICE.rc<br />
<br />
<br />
== Black gallery pictures and no browser content/browser crash ==<br />
Add this to droid-hal .spec file and rebuild droid-hal and libhybris packages (remove the sources from hybris/mw/libhybris to make sure a clean rebuild is done):<br />
<br />
%define android_config \<br />
#define WANT_ADRENO_QUIRKS 1\<br />
%{nil}<br />
<br />
== make[1]: *** No rule to make target `XXX_defconfig'. Stop. ==<br />
This was seen as an error while making hybris-hal on wingray<br />
Open hadk/device/*/*/BoardConfig.mk and comment out the line "TARGET_KERNEL_SOURCE=XXX"<br />
Re-run source build/envsetup.sh and breakfast $DEVICE<br />
Re-run make -jXX hybris-hal<br />
Kernel should build properly at this point but you may get an error later along the lines of "svn: command not found"<br />
"sudo apt-get install subversion" should fix it<br />
if that doesn't work try un-commenting the"TARGET_KERNEL_SOURCE=XXX" line for what you are doing and then if you have to rebuild kernel again re-comment it</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-08-27T07:03:06Z<p>Birdzhang: /* What's not */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-08-27T07:02:55Z<p>Birdzhang: /* What works */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
* FM<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
* FM (on 2.1.4 it works)<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-08-27T06:29:17Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
<br />
'''2018-08-27'''<br />
* fix Dual SIM card support<br />
* fix IR support<br />
<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
* FM (on 2.1.4 it works)<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-07-23T01:36:20Z<p>Birdzhang: /* Downloads */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
* FM (on 2.1.4 it works)<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfa/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-07-23T01:36:03Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-07-22'''<br />
* fix FM radio and wakeup delay<br />
<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
* FM (on 2.1.4 it works)<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-06-16T03:24:21Z<p>Birdzhang: /* What's not */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
* FM (on 2.1.4 it works)<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-06-15T14:13:52Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-06-15'''<br />
* fix video record freeze bug with kimmoli's patch<br />
<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-06-13T13:27:33Z<p>Birdzhang: </p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-13<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-06-13T13:27:00Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-10<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-06-13'''<br />
* fix video thumbnails in Gallery, if you use OTA, you need to remove ffmpeg and install libav, and rm -rf /home/nemo/.cache/org.nemomobile/thumbnails/*<br />
<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-06-10T00:08:47Z<p>Birdzhang: </p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.2.0.29<br />
| last_update = 2018-06-10<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-06-10T00:07:53Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-06-10'''<br />
* Update to 2.2.0.29<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-18'''<br />
* Init<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/faq-hadkAdaptations/faq-hadk2018-06-04T14:07:40Z<p>Birdzhang: /* Issues with pulseaudio module build */</p>
<hr />
<div>= Basics =<br />
== Skip tutorial ==<br />
Congratulations if you have got gui working. During the debugging process you will be building and flashing quite a few times, in which tutorial during the setup screen can be annoying. You can skip that by tapping on the each corner of the screen clockwise, while starting from left-top corner.<br />
<br />
== Updating submodules ==<br />
Submodule locations:<br />
```<br />
rpm/dhd<br />
hybris/droid-configs/droid-configs-device<br />
hybris/droid-hal-version-fp2-sibon/droid-hal-version<br />
```<br />
<br />
In the each folder check remote name using `git remote -v `<br />
<br />
Run (replace remote_name with the name you found out in previous step)<br />
```<br />
git fetch remote_name<br />
git pull remote_name master<br />
<br />
== Updating local build target ==<br />
Change release version in the command if needed<br />
In Platform SDK:<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R ssu release 2.1.4.14<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper ref<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper dup<br />
<br />
= Finishing Your Port =<br />
<br />
== how to bring store to your device ==<br />
Your device adaptation should be on Mer OBS (read "Building things on OBS" below)<br />
<br />
Do `ssu s`, Device UID should show a unique ID that is:<br />
IMEI for devices with modem, note - your GSM modem should provide a valid IMEI even without an inserted SIM! Always a good cross-check <br />
that IMEI matches the one on your phone's box or under battery, and in CM/Android<br />
For devices without modem -- WLAN or BT MAC address.<br />
<br />
Find another port/phone and prove that unique ID there is different than yours, and that all of them persist across reboots.<br />
If unique ID is OK then ping pketo on #sailfishos-porters with "Device model" line from `ssu s` to enable store for you.<br />
<br />
== Building things on OBS: ==<br />
Benefits: automated builds, Jolla Store (see above), OTA (see below); local PC is then only needed for Android, dhd, and droidmedia building (which barely happen when port becomes stable), and mic image creation<br />
<br />
It makes sense to go OBS as soon as you have polished your code, minimised hacks, and pushed it to github (usuall when display+touch+WLAN and maybe cellular are working)<br />
<br />
On IRC ask sledges to create project and get maintainership for your nemo:devel:hw:$VENDOR:$DEVICE (you can try things out in your home repo first)<br />
```<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Then "Add repositories"<br />
Check "SailfishOS latest"<br />
Click "Add selected repositories" at the bottom of the page<br />
Add a hw:devel:common repo to build against (which contains all important backports for all ports:), you'll need to add it as an additional repo:<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Click "Edit repository"<br />
Click Add additional path to this repository<br />
Project: nemo:devel:hw:common<br />
Repository: sailfish_latest_armv7hl<br />
```<br />
Check how other devices are built here e.g. https://build.merproject.org/project/show/nemo:devel:hw:semc:iyokan<br />
<br />
Create droid-hal-$DEVICE package manually and upload RPMs for droid-hal-device and droidmedia (and audioflingerglue if device needs it)<br />
For all other packages create webhooks and trigger builds<br />
<br />
How to create webhooks: https://wiki.merproject.org/wiki/Packaging/webhooks<br />
<br />
Which webhooks will you need for your device: https://webhook.merproject.org/webhook (search for nemo:devel:hw:lge:mako and replicate that structure)<br />
<br />
Add cibot as maintainer, then ask lbt via IRC to "patternise" your nemo:devel:hw:$VENDOR:$DEVICE<br />
<br />
Build an image successfully on your PC by following HADK but, using .ks file from droid-config-$DEVICE-ssu-kickstarts-*.rpm built on OBS (don't forget to sed the repos and add nemo:hw:devel:common as adaptation1, this will help you more: http://images.devaamo.fi/sfe/mako/gamma6/Jolla-2.0.1.11-mako-armv7hl.ks )<br />
<br />
== Over-the-Air updates (OTA): ==<br />
Prerequisities:<br />
<br />
Your port has stabilised and is ready to face the big public (gets our retweets, you create Sailfish OS port thread on e.g. XDA, evangelise it :)<br />
<br />
Good measure is to have bare necessities of a daily-driver for most people: LED, audio, texts, calls, data, WLAN, GPS, camera, light, proximity, accelerometer, vol keys, vibra, power management<br />
<br />
You should be building on OBS (guide above)<br />
<br />
Then add these two files (change contents apropriately)<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/flash-partition/device-info<br />
<br />
Change `PART_REAL_1` to match "boot" partition of your device<br />
Change `CPUCHECK_STRING` to match the Hardware field in `/proc/cpuinfo`<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/platform-updates/flash-bootimg.sh<br />
Don't forget to make it executable<br />
<br />
Port over to your device this line:<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/blob/ca102d255f1b6f274e2768e8cbd4ad9c631890e9/droid-hal-hammerhead.spec#L12<br />
<br />
And this commit (only if MultiROM exists or in-the-works for your device):<br />
https://github.com/mer-hybris/droid-config-hammerhead/commit/cb39670de095b914aea23d6ce0e633d295493016<br />
Don't forget to commit and tag so configs rebuild on OBS :)<br />
Simulate OTA on :devel: https://wiki.merproject.org/wiki/Template:SFOS_OTA , see if all is fine (e.g. you can build devel 1.1.9.28 image and OTA it to 2.0)<br />
Then you can test how an updated kernel package flashes itself automatically with an extra reboot, by making some change in kernel, reuploading RPMs and simulating OTA again<br />
For your users to actually use OTA, you should move it to :testing (on IRC ask sledges to create nemo:testing:hw:$VENDOR:$DEVICE), to still be able to play (i.e. break things) in your :devel<br />
<br />
Get maintainership on that :testing repo<br />
- Add cibot as maintainer, then via IRC ask lbt to "patternise" that repo too<br />
- Click on Repositories tab in your nemo:testing:hw:$VENDOR:$DEVICE<br />
- Then "Add repositories"<br />
- Then "pick one via advanced interface"<br />
- Start typing "sailfishos", then pick the version you want OTA to be available for in format "sailfishos:X.Y.Z.W"<br />
- Choose "latest_$PORT_ARCH" for your architecture<br />
- Make the "Name" to match exactly "sailfishos_X.Y.Z.W"<br />
- Add nemo:testing:hw:common to that as additional repo just like you did with :devel: above<br />
<br />
Ensure NO webhooks point to :testing ! Cross-check with https://webhook.merproject.org/webhook<br />
<br />
Promote by using osc copypac to all your device packages from devel to testing (useful script: http://pastebin.com/GssLRr8e )(How To https://gist.github.com/taaem/53ed3a99893d323d7ab3bd8d07540f50 ) - use this (or simpler "Submit Package" WebUI option) also in future whenever a HW adaptation package needs updating in between sfos releases (PR is being prepared to add device hw version to zip filename, HW Adaptation version is also shown in About Product, and is incremented by 1 each time OBS automatically rebuilds droid-hal-version-$DEVICE whenever any hw package changes ;))<br />
<br />
Make an image with adaptation-community repo pointing to testing, adaptation-community-common pointing to common in your .ks file, and start distributing that to the rest of the world<br />
Don't forget to document everything, create a nice installation wiki article for your device (if not yet already), and add such section: https://wiki.merproject.org/wiki/index.php?title=Adaptations/libhybris/Install_SailfishOS_for_mako&action=edit&section=4<br />
Point your existing users to the OTA section of your device's wiki<br />
<br />
Once the next Sailfish OS release comes out and your port adopts it, you can create a new repository in OBS with that version and your users will OTA to it.<br />
<br />
= Debugging Tips =<br />
== Determine which is the touch event ==<br />
use command "getevent" as super user in adb shell. The event which spams most outputs on the screen when the screen is touched is the touch event.<br />
<br />
== persistent journalctl: ==<br />
modify /etc/systemd/journald.conf :<br />
<br />
Storage=volatile --> Storage=automatic<br />
<br />
Then do:<br />
```<br />
mkdir /var/log/journal<br />
reboot<br />
```<br />
<br />
Systemd suppresses journal, and some valuable info might get hidden. To prevent this, set<br />
<br />
RateLimitInterval=0<br />
<br />
== monitoring udev events ==<br />
udevadm monitor is your friend.<br />
<br />
To get it for cyanogenmod, add this repository https://github.com/chombourger/android-udev/ to your manifest as external/usb and make udevadm<br />
<br />
To monitor boot-time events, compile the kernel with CONFIG_DEBUG_KOBJECT=y and increase the log buffer size by setting the kernel command line option: log_buf_len=21 (or higher)<br />
<br />
== perf :) ==<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
mkdir -p perf/rpm<br />
cd perf<br />
ln -s $ANDROID_ROOT/kernel/$VENDOR/$DEVICE linux<br />
curl -o rpm/perf.spec http://pastebin.com/raw/QiW7FD02<br />
<br />
Replace string <YOUR_KERNEL_VERSION> in rpm/perf.spec with kernel version for which you're building perf (for example: 3.4.0)<br />
<br />
mb2 -s rpm/perf.spec -t $VENDOR-$DEVICE-armv7hl build<br />
mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/<br />
createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE<br />
<br />
"less" package is needed for perf to format its output. You can find it here: <br />
- http://repo.merproject.org/obs/nemo:/testing:/hw:/common/sailfish_latest_armv7hl/ <br />
<br />
= HADK Fixes =<br />
== Issues with pulseaudio module build ==<br />
downgrade hybris/droid-configs/droid-configs-device as described above by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
build_packages.sh --configs<br />
<br />
== Issues with ngfd or ngfd-plugin-droid-vibrator or pulseaudio ==<br />
Update submodules as described above<br />
Downgrade hybris/droid-configs/droid-configs-device by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
<br />
Replace `%define have_vibrator 1` in droid-hal-version-@DEVICE@.spec with `%define have_vibrator_native 1`<br />
Change package names in droid-configs patterns as described in templates https://github.com/mer-hybris/droid-hal-configs/commit/aac652aae840a15629c0f4e070275ea128fe088f<br />
Downgrade ngfd plugin:<br />
Go to hybris/mw/ngfd-plugin-droid-vibrator and run:<br />
<br />
git reset --hard 3e2b4fb5b03a6d3db9ca5a41c7091e771f99cc4f<br />
<br />
IN PLATFORM_SDK:<br />
<br />
$PLAFORM_SDK<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator -s rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm ngfd-plugin-droid-vibrator<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator --spec=rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
when you run the whole build_packages.sh after this skip the ngfd-plugin-native-vibrator build<br />
<br />
== libminisf.so not found ==<br />
Add libminisf to droidmedia make command like this in HABUILD_SDK:<br />
<br />
make -jXX libdroidmedia minimediaservice minisfservice libminisf<br />
<br />
Also update rpm/dhd submodule in case you have an older version<br />
<br />
<br />
== No installroot directory after droid-configs build when preparing .ks file ==<br />
<br />
rpm2cpio droid-local-repo/$DEVICE/droid-configs/droid-config-$DEVICE-ssu-kickstarts-1-1.armv7hl.rpm | cpio -idmv<br />
<br />
in the sed command use `$ANDROID_ROOT/usr/share/kickstarts/$KS` instead of `$ANDROID_ROOT/hybris/droid-configs/installroot/usr/share/kickstarts/$KS`<br />
<br />
== Building droid-config fails with: Segmentation fault (core dumped) /usr/lib/qt5/bin/kmap2qmap ......... ==<br />
<br />
try updating the packages in the target with <br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper ref<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper dup<br />
<br />
or<br />
<br />
add the file /system/build.prop to the target with the contents <br />
<br />
<br />
== mic fails during the run ==<br />
<br />
If you get error like this<br />
Warning: repo problem: pattern:jolla-hw-adaptation-$DEVICE1-1.noarch requires droid-config-$DEVICE-policy-settings, but this requirement cannot be provided, uninstallable providers: droid-config-$DEVICE-policy-settings-1-1.armv7hl[adaptation0-$DEVICE-2.0.1.7]<br />
<br />
Or for example<br />
No provider of 'pkgconfig(qofonoext)' found.<br />
<br />
In these cases the missing dependencies can be added with the command:<br />
<br />
MER_SDK $<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -m sdk-install ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
<br />
Also add the same repo to .ks file before building the installation package with mic<br />
Run the following commands before chapter 8.3 of HADK pdf<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
MOBS_URI="http://repo.merproject.org/obs"<br />
HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@"<br />
HA_REPO1="repo --name=common --baseurl=$MOBS_URI/nemo:/devel:/hw:/common/sailfish_latest_@ARCH@/"<br />
sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
If MIC fails with <br />
RuntimeError: Invalid runmode: native <br />
remove `--runtime=native` from mic command args<br />
<br />
If the error message ends with <br />
CreatorError: <creator>Unable to find pattern: Jolla Configuration $DEVICE<br />
then make sure that you executed 8.4 in the hadk pdf (as of v1.9.9). If it still does not work, try executing it again, then process patterns and build again.<br />
If the ks file generated in $ANDROID_ROOT does not contain the local repo, then add it manually. To the top of the list of repos, add<br />
"repo --name=adaptation-community-$DEVICE-@RELEASE@ --baseurl=file:$ANDROID_ROOT/droid-local-repo/$DEVICE/" <br />
substitute $DEVICE and $ANDROID_ROOT appropriately. <br />
Process patterns and build again.<br />
<br />
== sudo: effective uid is not 0, is sudo installed setuid root? ==<br />
Just after chroot is entered through the `sdk` command, sudo fails to execute and fails with the previous message<br />
check for suid mount flag in the bind-mounted root: if your home (not chroot home) is mounted with nosuid you need to remount it before chroot<br />
<br />
$HOST<br />
sudo mount -o remount,suid $HOME<br />
<br />
If you're running an encrypted home partition with ecryptfs, you need to remount home anyway, even if nosuid flag is not set<br />
<br />
$HOST<br />
sudo mount -i -o remount,suid $HOME) <br />
<br />
repo init -u git://github.com/mer-hybris/android.git -b hybris-11.0 fails because of gpg<br />
In sdk chroot gpg command is gpg2<br />
<br />
$MERSDK<br />
git config --global gpg.program gpg2<br />
<br />
== existence_error (yes, you read that right) when locally building policy-settings-common: ==<br />
You get:<br />
ERROR: error(existence_error(procedure, qsave_program/2), context(precompile/0, _G669))<br />
Solution:<br />
```<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -msdk-install<br />
cd /usr/lib/swipl-5.6.50/library<br />
rm INDEX.pl<br />
zypper in fakeroot<br />
fakeroot swipl -g true -t 'make_library_index(.)'<br />
```<br />
then rebuild the package again with mb2<br />
<br />
== Nothing provides /system/bin/sh: ==<br />
Add this to your .spec<br />
<br />
%define __provides_exclude_from ^/system/.*$<br />
%define __requires_exclude ^/system/bin/.*$<br />
%define __find_provides %{nil}<br />
%define __find_requires %{nil}<br />
<br />
== rpm/dhd/helpers/build_packages.sh fails building libhybris, ... ==<br />
<br />
HOST$<br />
cd $HOME<br />
sudo mkdir -p $MER_ROOT/devel<br />
sudo chown -R $USER mer/devel<br />
run the script again <br />
<br />
== Error During end of kernel build ==<br />
``` <br />
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider<br />
at java.lang.Class.getDeclaredMethods0(Native Method)<br />
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)<br />
at java.lang.Class.getMethod0(Class.java:2774)<br />
at java.lang.Class.getMethod(Class.java:1663)<br />
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)<br />
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)<br />
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br />
at java.security.AccessController.doPrivileged(Native Method)<br />
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)<br />
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)<br />
... 6 more<br />
```<br />
<br />
Ensure that unzip is installed as its required for BouncyCastle compile<br />
<br />
run something like this in $ANDROID_ROOT outside HABUILD_SDK<br />
<br />
java -jar \<br />
/home/$USER/mer/android/droid/out/host/linux-x86/framework/dumpkey.jar \<br />
build/target/product/security/testkey.x509.pem \<br />
build/target/product/security/cm.x509.pem \<br />
build/target/product/security/cm-devkey.x509.pem > /home/$USER/mer/android/droid/out/target/product/$DEVICE/obj/PACKAGING/ota_keys_intermediates/keys<br />
<br />
== qemu gives segmentation fault error in Ubuntu 16.10 ==<br />
<br />
instead, use Ubuntu 16.04.1 LTS, or earlier versions<br />
<br />
== qt5-qpa-hwcomposer-plugin fails ==<br />
when building for 2.1 with the error "pkgconfig(Qt5PlatformSupport)" <br />
update dhd submodule<br />
<br />
== Building geoclue-providers-hybris fails ==<br />
<br />
Building geoclue-providers-hybris fails with the error locationsettings.h for local builds update dhd submodule and in case of OBS build change the branch to jb36857<br />
<br />
= Adaptation Guides =<br />
<br />
== ff-memless haptics ==<br />
<br />
To use memless haptics driver instead of droid-vibrator, you need a kernel haptics driver that supports a memless interface (evdev). This is briefly explained in HADK pdf chapter 13.1.<br />
Reference kernel driver implementation for qpnp vibrator is here;<br />
https://github.com/kimmoli/android_kernel_oneplus_msm8974/pull/1<br />
<br />
It needs also vibrator configuration files if defaults are not ok; (this is also in HADK)<br />
https://github.com/kimmoli/droid-config-onyx/commit/dac479716a6b4300be3c5875982265f6914bb498<br />
<br />
And depends which evdev index the new ffmemless gets, one might need to change lipstick config;<br />
https://github.com/kimmoli/droid-config-onyx/pull/4/commits/73bb85fcdc5e2627a8cb0cea0fb5fc2ca9d8e814<br />
<br />
in droid-hal-version-$DEVICE.spec comment `%define have_vibrator 0` out and add `%define have_ffmemless 1`<br />
<br />
add build of qt5-feedback-haptics-ffmemless in build_packages.sh, and comment out other vibrator packages;<br />
<br />
buildmw "https://git.merproject.org/mer-core/qt-mobility-haptics-ffmemless.git" rpm/qt5-feedback-haptics-ffmemless.spec || die<br />
<br />
== FM Radio support ==<br />
<br />
Needs a device with suitable FM radio hardware and a kernel defconfig containing `CONFIG_RADIO_IRIS=y` and `CONFIG_RADIO_IRIS_TRANSPORT=m (or =y)`<br />
<br />
If your `CONFIG_RADIO_IRIS_TRANSPORT` is built-in then this is not needed, however if you have problems try building `CONFIG_RADIO_IRIS_TRANSPORT` as a module: add (adapt to fit your device if needed) <br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/droid-fm-up.service<br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-fm-up.service<br />
<br />
Sometimes device permissions are wrong (root owner), in this case:<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/udev/rules.d/999-droid-fm.rules to your droid-configs repo (or directly to device for testing)<br />
- Add qt5-qtmultimedia-plugin-mediaservice-irisradio to patterns (or install directly to device for testing)<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/pulse/xpolicy.conf.d/fmradio.conf to your droid-configs repo (or directly to device for testing)<br />
<br />
(pre-2.0.2) Update packages from http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/ (for building new images add this to your .ks file as described elsewhere in FAQ)<br />
<br />
Starting from Sailfish OS 2.0.2 FM radio Media app plugin jolla-mediaplayer-radio can be added to patterns.<br />
<br />
(pre-2.0.2) For FM radio testing harbour-piratefm can be obtained from <br />
- http://repo.merproject.org/obs/home:/kimmoli/sailfish_latest_armv7hl/<br />
<br />
== Flashlight shortcut ==<br />
<br />
Starting from Sailfish 2.0.2 it's possible to have flashlight shortcut in eventsview. If your device supports flash torch mode add jolla-settings-system-flashlight package to patterns in your droid-configs repo. The shortcut can be enabled in the eventsview settings.<br />
<br />
== Notes on LOS14.1 Porting ==<br />
XXX: remove the word "exec" from the last line of /usr/bin/droid/droid-hal-startup.sh, to make this permanent add a modified copy of the file to $ANDROID_ROOT/hybris/droid-configs/sparse/usr/bin/droid/droid-hal-startup.sh (this has to be fixed properly at some point)<br />
<br />
On mixed 32/64bit devices, LD_LIBRARY_PATH could be wrong. If logcat shows services aborting with SIG 6 due to wrong arch, try removing the LD_LIBRARY_PATH from /init.environ.rc<br />
<br />
Run this script in $ANDROID_ROOT http://paste.opensuse.org/40869869<br />
<br />
Details of what the script does:<br />
Symlinks for services:<br />
<br />
sh-3.2# ls -lh /usr/libexec/droid-hybris/system/etc/init/ <br />
total 4.0K <br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 atrace.rc -> /system/etc/init/atrace.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 bootstat.rc -> /system/etc/init/bootstat.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 debuggerd.rc -> /system/etc/init/debuggerd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 drmserver.rc -> /system/etc/init/drmserver.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 dumpstate.rc -> /system/etc/init/dumpstate.rc <br />
lrwxrwxrwx 1 root root 31 Oct 6 20:52 gatekeeperd.rc -> /system/etc/init/gatekeeperd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 init-debug.rc -> /system/etc/init/init-debug.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 installd.rc -> /system/etc/init/installd.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 logcatd.rc -> /system/etc/init/logcatd.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 logd.rc -> /system/etc/init/logd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 mediacodec.rc -> /system/etc/init/mediacodec.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediadrmserver.rc -> /system/etc/init/mediadrmserver.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediaextractor.rc -> /system/etc/init/mediaextractor.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 mtpd.rc -> /system/etc/init/mtpd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 perfprofd.rc -> /system/etc/init/perfprofd.rc<br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 racoon.rc -> /system/etc/init/racoon.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 rild.rc -> /system/etc/init/rild.rc<br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 superuser.rc -> /system/etc/init/superuser.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 uncrypt.rc -> /system/etc/init/uncrypt.rc <br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vdc.rc -> /system/etc/init/vdc.rc<br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vold.rc -> /system/etc/init/vold.rc<br />
<br />
NOTE, no audioserver and mediaserver links!<br />
NOTE, bootanim was removed in the updated script, also vold was added<br />
<br />
if NINJA builds are not working, export USE_NINJA=false<br />
<br />
For actdead charging animation, see changes here https://github.com/kimmoli/sfos-onyx-issues/issues/29 but also add 'trigger late-start' to 'on charging' in init.rc<br />
<br />
== Anbox Information ==<br />
https://public.etherpad-mozilla.org/p/anbox-sailfishos<br />
<br />
== Graphics performance improvements ==<br />
Test framerate display (can be enabled in Settings->Developer mode) when using some apps like gallery<br />
If the top view is mostly red try to set QPA_HWC_IDLE_TIME=5 in /var/lib/environment/compositor/droid-hal-device.conf<br />
Run <br />
```systemctl restart user@100000 using devel-su```<br />
<br />
Test framerate display again and if you see more green than before you should use the value<br />
<br />
Different values can be tested but value 5 has been found to be helping on some devices<br />
<br />
On some devices also setting `QPA_HWC_BUFFER_COUNT=3` in `/var/lib/environment/compositor/droid-hal-device.conf` helps with graphics performance<br />
<br />
== Using backported Bluetooth drivers in 3.4 kernel for devices with Qualcomm bluetooth chip using hci_smd driver ==<br />
Generic guide: https://bluez-android.github.io/#building-own-kernel<br />
<br />
Sailfish specific guide:<br />
<br />
Build your kernel with patches from https://github.com/bluez-android/misc/tree/master/patches-kernel and with following flags defined in defconfig<br />
<br />
CONFIG_BT=m<br />
CONFIG_CRYPTO_CMAC=y<br />
CONFIG_CRYPTO_USER_API=y<br />
CONFIG_CRYPTO_USER_API_HASH=y<br />
CONFIG_CRYPTO_USER_API_SKCIPHER=y<br />
<br />
NOTE: Patches may not be required for >= 3.18<br />
In your local_manifest, add <br />
```<project name="mlehtima/backports-bluetooth" path="external/backports-bluetooth" revision="master" />```<br />
run repo sync in HABUILD_SDK<br />
<br />
Build backported drivers by running make backports in HABUILD_SDK while in $ANDROID_ROOT folder<br />
if you get `"external/backports-bluetooth/drivers/bluetooth/hci_smd.c:35:26: fatal error: mach/msm_smd.h: No such file or directory" `error change <br />
`#include <mach/msm_smd.h> to #include <soc/qcom/smd.h|>` in that file<br />
<br />
IMPORTANT: if you rerun make hybris-hal at any time you will always have to rerun make backports after that<br />
Package droid-hal as usual<br />
<br />
Change your config repo to use bluez5 https://github.com/mlehtima/droid-config-fp2-sibon/commit/1cba868fdcfebaffc14a084c5d82fbf2e4339173<br />
Rebuild config rpms and image<br />
<br />
== EA Scratchbox Targets ==<br />
<br />
Lately Jolla offers two sb2 targets so the HADK instructions create some strange behaviour when downloading the sb2 target<br />
<br />
You have two options now to replace this line<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4)<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | tail -n1)<br />
will give you the sb2 for the latest Early Access <br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | head -n1)<br />
<br />
will give you the sb2 for latest non EA SFOS Version <br />
<br />
== to change pixel ratio on a running device, as user: ==<br />
```<br />
devel-su dconf update<br />
# PIXEL_RATIO should be close to the value of horizontal_display_resolution/540<br />
# e.g. Nexus 7 (800 x 1280) displays the pixel ratio is 800/540~=1.48<br />
# always round the value up with two decimal precision<br />
PIXEL_RATIO=1.48<br />
<br />
# UPDATE! Please test the new formula for pixel ratio calculation:<br />
# diagonal_display_size_inches/4.5 * horizontal_display_resolution/540<br />
# and feedback the outcome to sledges via IRC (better/worse/closer via own trial&error picks?)<br />
# Yet another formula: YourDevicePPI/sbjPPI (245), e.g. OnePlusX PPI 441/245 = 1.8<br />
# Available ICON_RES values are 1.0, 1.25, 1.5, 1.75, and 2.0. Choose the closest one to PIXEL_RATIO:<br />
ICON_RES=1.5<br />
devel-su zypper in jolla-ambient-z$ICON_RES ambient-icons-closed-z$ICON_RES<br />
dconf write /desktop/sailfish/silica/theme_pixel_ratio $PIXEL_RATIO<br />
dconf write /desktop/sailfish/silica/theme_icon_subdir $<br />
# check that everything worked:<br />
dconf read /desktop/sailfish/silica/theme_pixel_ratio<br />
devel-su reboot<br />
# PIXEL_RATIO and ICON_RES are subjects to fine tuning: https://bugs.nemomobile.org/show_bug.cgi?id=814#c1<br />
```<br />
Script to scale your icons https://pastebin.com/mxKRkt7Z<br />
<br />
make[3]: *** [security/commoncap.o] Error 1...<br />
Those errors appears because ANDROID_CONFIG_PARANOID_NETWORK is disabled in your kernel and with it enabled, you can't access internet with Sailfish OS. ( Since hybris-12.1, rild does not work without ANDROID_CONFIG_PARANOID_NETWORK. Add nemo to group inet if it is enabled.)<br />
Check http://forum.xda-developers.com/showpost.php?p=42880275&postcount=104<br />
To resolve this replace in <path of your kernel>/security/commoncap.c :<br />
``` <br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
``` <br />
With this:<br />
``` <br />
#ifdef CONFIG_ANDROID_PARANOID_NETWORK<br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
#endif<br />
```<br />
<br />
Save the file and recompile the kernel<br />
<br />
== Build Wlan Driver as Module ==<br />
<br />
Most devices require the wlan driver to be built and loaded as a module during startup<br />
Ensure you have CONFIG_MODULES=y in your kernel config<br />
<br />
Find your wifi driver in your kernel config, it should already be set to `y` and have something like WLAN in the name.<br />
Set it to m<br />
eg.<br />
CONFIG_BCMDHD=m<br />
CONFIG_PRIMA_WLAN=m<br />
CONFIG_PRONTO_WLAN=m<br />
<br />
Add the wlan-module-load.service to your droid-configs sparse directory<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/wlan-module-load.service<br />
<br />
and add a symlink to enable to service on startup:<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/multi-user.target.wants/wlan-module-load.service<br />
<br />
== Bluetooth for Qualcomm devices ==<br />
<br />
Enable `CONFIG_BT_HCISMD` in the kernel defconfig. If it is not present in your kernel, then make these changes:<br />
- https://github.com/adeen-s/android_kernel_cyanogen_msm8916/commit/4627f4f6f5d886433ff1f9639dc18fe8a006fd00 <br />
<br />
Add these files to sparse (or directly to device) and modify them as needed for your device --><br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/usr/bin/droid/droid-hcismd-up.sh<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/droid-hcismd-up.service<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-hcismd-up.service<br />
<br />
Bluetooth Should now work. If it doesn't then make sure the permissions are set correctly and all paths mentioned in above files point to valid locations.<br />
<br />
If you are still having trouble, check to see if there is a service that configures bluetooth and disable/comment it. Eg, config_bluetooth in init.qcom.rc<br />
<br />
<br />
<br />
== Bluetooth for Broadcomm devices ==<br />
Enable `CONFIG_BT_HCIUART_H4` in the kernel defconfig. These devices typically are attached on high speed uart to something like /dev/ttyHS0<br />
<br />
- Symlink your firmware file to /etc/firmware. <br />
eg. https://github.com/r0kk3rz/droid-config-scorpion_windy/blob/master/sparse/etc/firmware/BCM4350C0.hcd<br />
<br />
- You need to make sure the firmware symlink filename matches your bluetooth device name, which can be found by stracing hciattach<br />
Build rfkill middleware and add to patterns:<br />
```<br />
rpm/dhd/helpers/build_packages.sh --mw=https://github.com/mer-hybris/bluetooth-rfkill-event --spec=rpm/bluetooth-rfkill-event-hciattach.spec<br />
```<br />
- add configs: https://github.com/mer-hybris/droid-config-f5121/commit/afa01bdf4bdb8a0d16bbd34996ec7cac34bbbc55<br />
<br />
== Ofono problems ==<br />
RILD is running but ofono does not work<br />
If ofono is not working properly and shows "ERROR! Can't connect to RILD: No such file or directory" in logs, edit /etc/ofono/ril_subscription.conf to contain<br />
<br />
[ril_0]<br />
name=RIL1<br />
socket=/dev/socket/rild<br />
if your device is dual SIM, add also these lines (don't add them otherwise!):<br />
<br />
[ril_1]<br />
name=RIL2<br />
socket=/dev/socket/rild2<br />
<br />
If it works add your ril_subscription.conf to the droid-config-$DEVICE like done here https://github.com/Nokius/droid-config-find5/commit/3e3e636e7e3973f9102ebca9dea79794c00c9174<br />
Also add the jolla-settings-networking-multisim to patterns like done here https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/patterns/jolla-configuration-fp2-sibon.yaml#L15<br />
Fix remembering manual access point configurations across reboots run the following command before building the image<br />
sed -i "/begin 60_ssu/a chown -R radio:radio /var/lib/ofono" Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
Devices without modem<br />
File /etc/ofono/ril_subscription.conf should contain<br />
<br />
[Settings]<br />
EmptyConfig=true<br />
<br />
= Device Fixes =<br />
<br />
== Problems with tfa9890 ==<br />
Copy `/system/etc/firmware` to `/etc/firmware`. Symlink or mount doesn't work! (But why?)<br />
<br />
== So you booted your Sailfish OS? Congrats! No GUI? Oh dear :) ==<br />
<br />
<br />
both usb0 and rndis0 interfaces might be up, remove usb0 from init-script and rebuild kernel image with make hybris-boot or make hybris-recovery<br />
<br />
<br />
== lipstick segfaults/no display ==<br />
As you follow steps below, strace any of the binaries that would fail for non-obvious reasons. You'll need to install strace to do so: zypper in strace<br />
test simple hwc as root:<br />
<br />
EGL_PLATFORM=hwcomposer test_hwcomposer<br />
<br />
^^ strace if segfaults<br />
if strace dies after open("/sys/kernel/debug/tracing/trace_marker..., perform<br />
<br />
systemctl mask sys-kernel-debug.mount<br />
<br />
test_hwcomposer should not be used as reliable hwc test!! if fails, then try minimer:<br />
<br />
curl -O https://qtl.me/minimer3.tar.gz<br />
zypper in qt5-qtdeclarative-qmlscene<br />
tar -xf minimer3.tar.gz; cd minimer<br />
EGL_PLATFORM=hwcomposer /usr/lib/qt5/bin/qmlscene -platform hwcomposer main.qml<br />
<br />
if fails as user, try as root<br />
/system/bin/surfaceflinger<br />
for more info: zypper in gdb<br />
if you get test_hwcomposer, minimer or lipstick segfault, or test_hwcomposer or minimer running but doing nothing (as on m7)<br />
Check if your device uses qcom_display-caf or display-legacy<br />
Look in any of the BoardConfig.mk or BoardConfigCommon.mk in any of the device repos for the device for the variable TARGET_QCOM_DISPLAY_VARIANT. It should be set to either caf or legacy.<br />
The repos included can be determined by looking at the -include device/$VENDOR/*/BoardConfig.mk or device/$VENDOR/*/BoardConfigCommon.mk lines at beginning the .mk files starting from the primary BoardConfig.mk<br />
If you're on display-legacy or display-caf(repo sync before 2015.06.04) patch hwcomposer withhttp://pastebin.com/AfRXPKVA<br />
From HABUILD_SDK recompile android hwcomposer*.so for your device<br />
Find the name of the hwcomposer*.so module: run make modules | grep hwcomposer<br />
If this command complains about missing column command run sudo apt-get install bsdmainutils)<br />
Run `make hwcomposer.module_name` from results above<br />
Once rebuilt, hwcomposer.*.so will be picked up and used by droid hal rebuild, and reside under /usr/libexec/droid-hybris/system/lib/hw<br />
If your apps are crashing (like on flo): Repeat the same for gralloc and copybit<br />
Scream on the IRC if this worked for you<br />
If strace indicates something like:<br />
<br />
"Waiting for service display.qservice..."<br />
This error is known only on cm-10.1 base, and will be upstreamed to mer-hybris soon, but we need more tests: applyhttps://github.com/mer-hybris/android_frameworks_native/commit/6ed4a6e834f6c71b2b6bd8ae1134f50b060e70be to this line https://github.com/CyanogenMod/android_frameworks_base/blob/cm-10.1/cmds/servicemanager/service_manager.c#L88 and also apply https://github.com/mer-hybris/android_system_core/commit/34ea48fd3ad7bf47ec0d0524d76bd20e62717773<br />
open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY|O_LARGEFILE) = <br />
disable debugfs by: https://github.com/mer-hybris/droid-hal-device/commit/8d437fc6f215081d4e1d2baaa6ac23bb94f73154<br />
if it still crashes on gralloc or other gpu related bits, refer to WIP: https://wiki.merproject.org/wiki/Adaptations/libhybris/gpu<br />
<br />
Devices with Mali GPU<br />
Add this to $ANDROID_ROOT/rpm/droid-hal-$DEVICE.spec before the last line (do not change the last line, ever)<br />
%define android_config \<br />
#define MALI_QUIRKS 1\<br />
%{nil}<br />
Rebuild droid-hal and libhybris packages<br />
<br />
<br />
== SIM card not detected ==<br />
This often causes a bootloop<br />
Cellular Modem bringup is now in HADK v1.1.1 section 13.3<br />
<br />
Additional checks:<br />
- Replicate /dev/block structure from Android as closely as possible (for rild to be able to access the modem partition)<br />
- Run ls -lR /dev/block in CM<br />
- Run ls -lR /dev/block in Sailfish OS<br />
<br />
diff the two outputs (this is WIP - android's toolbox ls might need more parameters to produce a comparable output)<br />
If you see differences you need to add custom udev rules to create the correct /dev/block structure<br />
(added automatically since 2016-12-10) For devices with /dev/block/platform/msm_sdcc.1/by-name/ paths (msm_sdcc.1 can be different) add to $ANDROID_ROOT/rpm/ these paths and files with contents, and it most probably will help (but still paste your diff to the IRC channel):<br />
<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/platform-device<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/rules.d/998-droid-system.rules<br />
<br />
(added automatically since 2017-06-03) Some devices (at least all hybris-13.0 based ports) have /dev/block/bootdevice/by-name/ as /dev/block structure in CM in which case you need to add the following line to the end of the 998-droid-system.rules file in the last link:<br />
<br />
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", IMPORT{program}="/bin/sh /lib/udev/platform-device $env{DEVPATH}", SYMLINK+="block/bootdevice/by-name/$env{ID_PART_ENTRY_NAME}"<br />
<br />
If you have logcat and journal error messages suggesting that RIL/ofono can't power the modem on and you have a qcom chipset, have a look in your init.qcom.rc for lines that power it on when the boot animation (bootanim) stops. If you have those, try this (paths may need correcting): https://github.com/stephgosling/android_device_htc_m7-common/commit/9f4abdca65356090e6dd6f0356c5cf4a1870aa5f (note the typo there in the chown line!)<br />
<br />
If you have `pil-q6v5-mss fc880000.qcom,mss: modem: Failed to locate modem.mdt` in your `dmesg` then try this steps:<br />
<br />
- Mask firmware.mount<br />
- add this service to /lib/systemd/system/ https://pastebin.com/9tbUtVnC<br />
- create symlink to that service in /lib/systemd/system/local-fs.target.wants/ <br />
- add /usr/bin/droid/extract_firmware.sh with this content https://pastebin.com/bgphKn4z<br />
<br />
<br />
== Waiting for service SurfaceFlinger seen in logcat? then read this (read surfaceflinger-hack below) ==<br />
If you are using a service like lipstick-hack which loads surfaceflinger for a few seconds to init the hardware, then this stops servicemanager seeing minisfservice as SurfaceFlinger becuase it uses the same service name, then dies.<br />
Disable/mask lipstick-hack from being started by systemd<br />
Add lipstickhack to /init.rc and start in the the core class<br />
```<br />
service lipstickhack /usr/bin/droid/lipstick-hack.sh<br />
class core<br />
user system<br />
oneshot<br />
group graphics drmrpc<br />
```<br />
<br />
== Alternative to lipstick-hack (aka surfaceflinger-hack) ==<br />
<br />
For devices that need the so called lipstick-hack to start surfaceflinger for a few seconds to init the hardware we developed an alternative as the lipstick-hack has proven to be rather unstable during system boots.<br />
<br />
This alternative uses a modified version of libsurfaceflinger itself to init the display and then exits it's main run loop and afterwards behaves like minisfservice. This eliminates the timing issues of lipstick-hack.<br />
<br />
Implementation:<br />
1. BoardConfig.mk<br />
- in the BoardCommon.mk of your device add the following lines:<br />
<br />
# SurfaceFlinger init<br />
BOARD_USE_MOTO_SF = true<br />
<br />
2. libsurfaceflinger<br />
- apply the patches from https://github.com/guhl/android_frameworks_native/commit/ead91374111114fded280abe56484523355ee2cc to $ANDROID_ROOT/frameworks/native/services/surfaceflinger<br />
- in HABUILD_SDK build libsurfaceflinger by doing:<br />
<br />
source build/envsetup.sh<br />
breakfast $DEVICE<br />
make libsurfaceflinger<br />
<br />
<br />
3. <br />
- apply the patches from https://github.com/guhl/droidmedia/commit/cf176cd1bec2c0e5b633b8d728528edc6133ed7d to $ANDROID_ROOT/external/droidmedia<br />
- build droidmedia as described in HADK v2.0.1 - chapter 13.2<br />
<br />
4. init.rc<br />
- add minisfservice as a service to your $ANDROID_ROOT/system/core/rootdir/init.rc like this:<br />
<br />
service minisf /usr/libexec/droid-hybris/system/bin/minisfservice<br />
setenv LD_PRELOAD /usr/libexec/droid-hybris/system/lib/libsurfaceflinger.so<br />
class main<br />
user system<br />
group graphics<br />
<br />
<br />
5. rebuild hybris-hal<br />
as described in HADK v2.0.0 - chapter 5.4 and afterwards package Droid HAL and build the Root Filesystem<br />
<br />
== hls streams and other codecs ==<br />
```<br />
devel-su<br />
#not needed anymore: ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
#not needed anymore: zypper ref common<br />
#not needed anymore: zypper dup --from common # safe to do full upgrade/downgrade there<br />
ssu ar experimental http://repo.merproject.org/obs/nemo:/devel:/hw:/experimental/sailfish_latest_armv7hl/<br />
zypper ref experimental<br />
zypper dup --from experimental<br />
```<br />
<br />
<br />
== Failed at step OOM_ADJUST spawning /usr/libexec/mapplauncherd/booster-qt5: Permission denied ==<br />
Causes for example the failure of startup wizard on first boot:<br />
- try to revert kernel change in fs/proc/base.c<br />
- https://github.com/mer-hybris/android_kernel_oneplus_msm8974/commit/0ed87d7f3cf7d3388f09bd264a856ad9efc564a3<br />
<br />
ping on the IRC if this worked for you :)<br />
<br />
<br />
== UI is shown in tablet mode ==<br />
<br />
needed anymore<br />
<br />
(this fix will not work when the display has a super high resolution)<br />
Symptoms: event view has two columns, very large icons in app grid<br />
Check if the screen size is recognised correctly<br />
<br />
journalctl --no-pager | grep QSizeF<br />
<br />
If the values are not realistic set the screen size in your droid-hal-device.conf<br />
(only works since Sailfish OS 2.0.1)<br />
<br />
QT_QPA_EGLFS_PHYSICAL_WIDTH=<in mm><br />
QT_QPA_EGLFS_PHYSICAL_HEIGHT=<in mm><br />
<br />
<br />
== Access Android's virtual SD card (needs more massaging) ==<br />
<br />
Has received mixed feedback of working/not-working. Replicate onto your device accordingly:<br />
<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/commit/ca102d255f1b6f274e2768e8cbd4ad9c631890e9<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/usr/bin/droid/android-links.sh<br />
- https://github.com/mer-hybris/droid-config-hammerhead/commit/e15591b98380c95e5be96bf9f386278b9825b5f3<br />
<br />
<br />
== Fix remembering Bluetooth state on reboot ==<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/commit/265310c24e254ba102211b6ea398f9ef2b68d523<br />
<br />
== pm-service complains about no permissions ==<br />
<br />
its because PARANOID_NETWORK is required for your kernel config<br />
<br />
<br />
== Kernel changes needed for updated systemd in Sailfish 2.1.1.X ==<br />
<br />
Apply this to all devices with 3.4 kernel https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0640113be25d283e0ff77a9f041e1242182387f0<br />
<br />
<br />
== libdsyscalls is cause of segfault after r or minimer ==<br />
<br />
Usually means that in your device repo, its enabling clang somewhere, do a grep and disable clang and rebuild :)<br />
<br />
<br />
== Audio not routed to headphones ==<br />
<br />
run evdev_trace from mce-tools package and find /dev/input/eventX that detects headphones connection. It will be the one with SW_HEADPHONE_INSERT* and SW_MICROPHONE_INSERT* like here:<br />
<br />
<br />
----====( /dev/input/event0 )====----<br />
Name: "sensorprocessor"<br />
ID: bus 0x0, vendor, 0x0, product 0x0, version 0x0<br />
Type 0x00 (EV_SYN)<br />
Type 0x01 (EV_KEY)<br />
KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_POWER KEY_CAMERA KEY_MEDIA KEY_VOICECOMMAND<br />
Type 0x05 (EV_SW)<br />
SW_LID SW_HEADPHONE_INSERT* SW_MICROPHONE_INSERT*<br />
<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/ohm/plugins.d/accessories.ini file and replace jack-match and jack-device with values from evdev_trace:<br />
jack-match matches Name: field and<br />
ack-device matches /dev/input/eventX<br />
where X is your device input number<br />
<br />
Optional way for devices without headphone connector event device:<br />
<br />
If your device doesn't have event device for the headphone jack then it might have a switch in /sys/class/switch/h2w/ or similar path<br />
If the state file in the /sys/class/switch/h2w/ or similar path reacts to headphone connection by changing the value it can be used for headphone detection<br />
Add file /etc/ohm/plugins.d/accessories.ini with the following content (replace switch name with the name found in the path on your device)<br />
<br />
model = uevent<br />
switch = h2w<br />
<br />
If the headphone detection works then add the file to your config repo sparse for future builds<br />
<br />
== hwcomposer fails to run with `atomic commit failed ret:-22` in dmesg ==<br />
You may need to add the following commits<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/ab8e2349bae3a0971b237b744465089d6f22f8a1<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/c48eee07ace04204cf6c670ddfcf8c694fd88db4<br />
<br />
<br />
== qseccomd crashing ==<br />
Devices that have qseecomd usually have issues getting to UI so its best to disable it in the init.$DEVICE.rc<br />
<br />
<br />
== Black gallery pictures and no browser content/browser crash ==<br />
Add this to droid-hal .spec file and rebuild droid-hal and libhybris packages (remove the sources from hybris/mw/libhybris to make sure a clean rebuild is done):<br />
<br />
%define android_config \<br />
#define WANT_ADRENO_QUIRKS 1\<br />
%{nil}<br />
<br />
== make[1]: *** No rule to make target `XXX_defconfig'. Stop. ==<br />
This was seen as an error while making hybris-hal on wingray<br />
Open hadk/device/*/*/BoardConfig.mk and comment out the line "TARGET_KERNEL_SOURCE=XXX"<br />
Re-run source build/envsetup.sh and breakfast $DEVICE<br />
Re-run make -jXX hybris-hal<br />
Kernel should build properly at this point but you may get an error later along the lines of "svn: command not found"<br />
"sudo apt-get install subversion" should fix it<br />
if that doesn't work try un-commenting the"TARGET_KERNEL_SOURCE=XXX" line for what you are doing and then if you have to rebuild kernel again re-comment it</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/faq-hadkAdaptations/faq-hadk2018-06-04T09:32:16Z<p>Birdzhang: /* Alternative to lipstick-hack (aka surfaceflinger-hack) */</p>
<hr />
<div>= Basics =<br />
== Skip tutorial ==<br />
Congratulations if you have got gui working. During the debugging process you will be building and flashing quite a few times, in which tutorial during the setup screen can be annoying. You can skip that by tapping on the each corner of the screen clockwise, while starting from left-top corner.<br />
<br />
== Updating submodules ==<br />
Submodule locations:<br />
```<br />
rpm/dhd<br />
hybris/droid-configs/droid-configs-device<br />
hybris/droid-hal-version-fp2-sibon/droid-hal-version<br />
```<br />
<br />
In the each folder check remote name using `git remote -v `<br />
<br />
Run (replace remote_name with the name you found out in previous step)<br />
```<br />
git fetch remote_name<br />
git pull remote_name master<br />
<br />
== Updating local build target ==<br />
Change release version in the command if needed<br />
In Platform SDK:<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R ssu release 2.1.4.14<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper ref<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper dup<br />
<br />
= Finishing Your Port =<br />
<br />
== how to bring store to your device ==<br />
Your device adaptation should be on Mer OBS (read "Building things on OBS" below)<br />
<br />
Do `ssu s`, Device UID should show a unique ID that is:<br />
IMEI for devices with modem, note - your GSM modem should provide a valid IMEI even without an inserted SIM! Always a good cross-check <br />
that IMEI matches the one on your phone's box or under battery, and in CM/Android<br />
For devices without modem -- WLAN or BT MAC address.<br />
<br />
Find another port/phone and prove that unique ID there is different than yours, and that all of them persist across reboots.<br />
If unique ID is OK then ping pketo on #sailfishos-porters with "Device model" line from `ssu s` to enable store for you.<br />
<br />
== Building things on OBS: ==<br />
Benefits: automated builds, Jolla Store (see above), OTA (see below); local PC is then only needed for Android, dhd, and droidmedia building (which barely happen when port becomes stable), and mic image creation<br />
<br />
It makes sense to go OBS as soon as you have polished your code, minimised hacks, and pushed it to github (usuall when display+touch+WLAN and maybe cellular are working)<br />
<br />
On IRC ask sledges to create project and get maintainership for your nemo:devel:hw:$VENDOR:$DEVICE (you can try things out in your home repo first)<br />
```<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Then "Add repositories"<br />
Check "SailfishOS latest"<br />
Click "Add selected repositories" at the bottom of the page<br />
Add a hw:devel:common repo to build against (which contains all important backports for all ports:), you'll need to add it as an additional repo:<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Click "Edit repository"<br />
Click Add additional path to this repository<br />
Project: nemo:devel:hw:common<br />
Repository: sailfish_latest_armv7hl<br />
```<br />
Check how other devices are built here e.g. https://build.merproject.org/project/show/nemo:devel:hw:semc:iyokan<br />
<br />
Create droid-hal-$DEVICE package manually and upload RPMs for droid-hal-device and droidmedia (and audioflingerglue if device needs it)<br />
For all other packages create webhooks and trigger builds<br />
<br />
How to create webhooks: https://wiki.merproject.org/wiki/Packaging/webhooks<br />
<br />
Which webhooks will you need for your device: https://webhook.merproject.org/webhook (search for nemo:devel:hw:lge:mako and replicate that structure)<br />
<br />
Add cibot as maintainer, then ask lbt via IRC to "patternise" your nemo:devel:hw:$VENDOR:$DEVICE<br />
<br />
Build an image successfully on your PC by following HADK but, using .ks file from droid-config-$DEVICE-ssu-kickstarts-*.rpm built on OBS (don't forget to sed the repos and add nemo:hw:devel:common as adaptation1, this will help you more: http://images.devaamo.fi/sfe/mako/gamma6/Jolla-2.0.1.11-mako-armv7hl.ks )<br />
<br />
== Over-the-Air updates (OTA): ==<br />
Prerequisities:<br />
<br />
Your port has stabilised and is ready to face the big public (gets our retweets, you create Sailfish OS port thread on e.g. XDA, evangelise it :)<br />
<br />
Good measure is to have bare necessities of a daily-driver for most people: LED, audio, texts, calls, data, WLAN, GPS, camera, light, proximity, accelerometer, vol keys, vibra, power management<br />
<br />
You should be building on OBS (guide above)<br />
<br />
Then add these two files (change contents apropriately)<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/flash-partition/device-info<br />
<br />
Change `PART_REAL_1` to match "boot" partition of your device<br />
Change `CPUCHECK_STRING` to match the Hardware field in `/proc/cpuinfo`<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/platform-updates/flash-bootimg.sh<br />
Don't forget to make it executable<br />
<br />
Port over to your device this line:<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/blob/ca102d255f1b6f274e2768e8cbd4ad9c631890e9/droid-hal-hammerhead.spec#L12<br />
<br />
And this commit (only if MultiROM exists or in-the-works for your device):<br />
https://github.com/mer-hybris/droid-config-hammerhead/commit/cb39670de095b914aea23d6ce0e633d295493016<br />
Don't forget to commit and tag so configs rebuild on OBS :)<br />
Simulate OTA on :devel: https://wiki.merproject.org/wiki/Template:SFOS_OTA , see if all is fine (e.g. you can build devel 1.1.9.28 image and OTA it to 2.0)<br />
Then you can test how an updated kernel package flashes itself automatically with an extra reboot, by making some change in kernel, reuploading RPMs and simulating OTA again<br />
For your users to actually use OTA, you should move it to :testing (on IRC ask sledges to create nemo:testing:hw:$VENDOR:$DEVICE), to still be able to play (i.e. break things) in your :devel<br />
<br />
Get maintainership on that :testing repo<br />
- Add cibot as maintainer, then via IRC ask lbt to "patternise" that repo too<br />
- Click on Repositories tab in your nemo:testing:hw:$VENDOR:$DEVICE<br />
- Then "Add repositories"<br />
- Then "pick one via advanced interface"<br />
- Start typing "sailfishos", then pick the version you want OTA to be available for in format "sailfishos:X.Y.Z.W"<br />
- Choose "latest_$PORT_ARCH" for your architecture<br />
- Make the "Name" to match exactly "sailfishos_X.Y.Z.W"<br />
- Add nemo:testing:hw:common to that as additional repo just like you did with :devel: above<br />
<br />
Ensure NO webhooks point to :testing ! Cross-check with https://webhook.merproject.org/webhook<br />
<br />
Promote by using osc copypac to all your device packages from devel to testing (useful script: http://pastebin.com/GssLRr8e )(How To https://gist.github.com/taaem/53ed3a99893d323d7ab3bd8d07540f50 ) - use this (or simpler "Submit Package" WebUI option) also in future whenever a HW adaptation package needs updating in between sfos releases (PR is being prepared to add device hw version to zip filename, HW Adaptation version is also shown in About Product, and is incremented by 1 each time OBS automatically rebuilds droid-hal-version-$DEVICE whenever any hw package changes ;))<br />
<br />
Make an image with adaptation-community repo pointing to testing, adaptation-community-common pointing to common in your .ks file, and start distributing that to the rest of the world<br />
Don't forget to document everything, create a nice installation wiki article for your device (if not yet already), and add such section: https://wiki.merproject.org/wiki/index.php?title=Adaptations/libhybris/Install_SailfishOS_for_mako&action=edit&section=4<br />
Point your existing users to the OTA section of your device's wiki<br />
<br />
Once the next Sailfish OS release comes out and your port adopts it, you can create a new repository in OBS with that version and your users will OTA to it.<br />
<br />
= Debugging Tips =<br />
== Determine which is the touch event ==<br />
use command "getevent" as super user in adb shell. The event which spams most outputs on the screen when the screen is touched is the touch event.<br />
<br />
== persistent journalctl: ==<br />
modify /etc/systemd/journald.conf :<br />
<br />
Storage=volatile --> Storage=automatic<br />
<br />
Then do:<br />
```<br />
mkdir /var/log/journal<br />
reboot<br />
```<br />
<br />
Systemd suppresses journal, and some valuable info might get hidden. To prevent this, set<br />
<br />
RateLimitInterval=0<br />
<br />
== monitoring udev events ==<br />
udevadm monitor is your friend.<br />
<br />
To get it for cyanogenmod, add this repository https://github.com/chombourger/android-udev/ to your manifest as external/usb and make udevadm<br />
<br />
To monitor boot-time events, compile the kernel with CONFIG_DEBUG_KOBJECT=y and increase the log buffer size by setting the kernel command line option: log_buf_len=21 (or higher)<br />
<br />
== perf :) ==<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
mkdir -p perf/rpm<br />
cd perf<br />
ln -s $ANDROID_ROOT/kernel/$VENDOR/$DEVICE linux<br />
curl -o rpm/perf.spec http://pastebin.com/raw/QiW7FD02<br />
<br />
Replace string <YOUR_KERNEL_VERSION> in rpm/perf.spec with kernel version for which you're building perf (for example: 3.4.0)<br />
<br />
mb2 -s rpm/perf.spec -t $VENDOR-$DEVICE-armv7hl build<br />
mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/<br />
createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE<br />
<br />
"less" package is needed for perf to format its output. You can find it here: <br />
- http://repo.merproject.org/obs/nemo:/testing:/hw:/common/sailfish_latest_armv7hl/ <br />
<br />
= HADK Fixes =<br />
== Issues with pulseaudio module build ==<br />
downgrade hybris/droid-configs/droid-configs-device as described above by going to the folder and running <br />
```<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
build_packages.sh --configs<br />
```<br />
<br />
== Issues with ngfd or ngfd-plugin-droid-vibrator or pulseaudio ==<br />
Update submodules as described above<br />
Downgrade hybris/droid-configs/droid-configs-device by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
<br />
Replace `%define have_vibrator 1` in droid-hal-version-@DEVICE@.spec with `%define have_vibrator_native 1`<br />
Change package names in droid-configs patterns as described in templates https://github.com/mer-hybris/droid-hal-configs/commit/aac652aae840a15629c0f4e070275ea128fe088f<br />
Downgrade ngfd plugin:<br />
Go to hybris/mw/ngfd-plugin-droid-vibrator and run:<br />
<br />
git reset --hard 3e2b4fb5b03a6d3db9ca5a41c7091e771f99cc4f<br />
<br />
IN PLATFORM_SDK:<br />
<br />
$PLAFORM_SDK<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator -s rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm ngfd-plugin-droid-vibrator<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator --spec=rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
when you run the whole build_packages.sh after this skip the ngfd-plugin-native-vibrator build<br />
<br />
== libminisf.so not found ==<br />
Add libminisf to droidmedia make command like this in HABUILD_SDK:<br />
<br />
make -jXX libdroidmedia minimediaservice minisfservice libminisf<br />
<br />
Also update rpm/dhd submodule in case you have an older version<br />
<br />
<br />
== No installroot directory after droid-configs build when preparing .ks file ==<br />
<br />
rpm2cpio droid-local-repo/$DEVICE/droid-configs/droid-config-$DEVICE-ssu-kickstarts-1-1.armv7hl.rpm | cpio -idmv<br />
<br />
in the sed command use `$ANDROID_ROOT/usr/share/kickstarts/$KS` instead of `$ANDROID_ROOT/hybris/droid-configs/installroot/usr/share/kickstarts/$KS`<br />
<br />
== Building droid-config fails with: Segmentation fault (core dumped) /usr/lib/qt5/bin/kmap2qmap ......... ==<br />
<br />
try updating the packages in the target with <br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper ref<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper dup<br />
<br />
or<br />
<br />
add the file /system/build.prop to the target with the contents <br />
<br />
<br />
== mic fails during the run ==<br />
<br />
If you get error like this<br />
Warning: repo problem: pattern:jolla-hw-adaptation-$DEVICE1-1.noarch requires droid-config-$DEVICE-policy-settings, but this requirement cannot be provided, uninstallable providers: droid-config-$DEVICE-policy-settings-1-1.armv7hl[adaptation0-$DEVICE-2.0.1.7]<br />
<br />
Or for example<br />
No provider of 'pkgconfig(qofonoext)' found.<br />
<br />
In these cases the missing dependencies can be added with the command:<br />
<br />
MER_SDK $<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -m sdk-install ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
<br />
Also add the same repo to .ks file before building the installation package with mic<br />
Run the following commands before chapter 8.3 of HADK pdf<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
MOBS_URI="http://repo.merproject.org/obs"<br />
HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@"<br />
HA_REPO1="repo --name=common --baseurl=$MOBS_URI/nemo:/devel:/hw:/common/sailfish_latest_@ARCH@/"<br />
sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
If MIC fails with <br />
RuntimeError: Invalid runmode: native <br />
remove `--runtime=native` from mic command args<br />
<br />
If the error message ends with <br />
CreatorError: <creator>Unable to find pattern: Jolla Configuration $DEVICE<br />
then make sure that you executed 8.4 in the hadk pdf (as of v1.9.9). If it still does not work, try executing it again, then process patterns and build again.<br />
If the ks file generated in $ANDROID_ROOT does not contain the local repo, then add it manually. To the top of the list of repos, add<br />
"repo --name=adaptation-community-$DEVICE-@RELEASE@ --baseurl=file:$ANDROID_ROOT/droid-local-repo/$DEVICE/" <br />
substitute $DEVICE and $ANDROID_ROOT appropriately. <br />
Process patterns and build again.<br />
<br />
== sudo: effective uid is not 0, is sudo installed setuid root? ==<br />
Just after chroot is entered through the `sdk` command, sudo fails to execute and fails with the previous message<br />
check for suid mount flag in the bind-mounted root: if your home (not chroot home) is mounted with nosuid you need to remount it before chroot<br />
<br />
$HOST<br />
sudo mount -o remount,suid $HOME<br />
<br />
If you're running an encrypted home partition with ecryptfs, you need to remount home anyway, even if nosuid flag is not set<br />
<br />
$HOST<br />
sudo mount -i -o remount,suid $HOME) <br />
<br />
repo init -u git://github.com/mer-hybris/android.git -b hybris-11.0 fails because of gpg<br />
In sdk chroot gpg command is gpg2<br />
<br />
$MERSDK<br />
git config --global gpg.program gpg2<br />
<br />
== existence_error (yes, you read that right) when locally building policy-settings-common: ==<br />
You get:<br />
ERROR: error(existence_error(procedure, qsave_program/2), context(precompile/0, _G669))<br />
Solution:<br />
```<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -msdk-install<br />
cd /usr/lib/swipl-5.6.50/library<br />
rm INDEX.pl<br />
zypper in fakeroot<br />
fakeroot swipl -g true -t 'make_library_index(.)'<br />
```<br />
then rebuild the package again with mb2<br />
<br />
== Nothing provides /system/bin/sh: ==<br />
Add this to your .spec<br />
<br />
%define __provides_exclude_from ^/system/.*$<br />
%define __requires_exclude ^/system/bin/.*$<br />
%define __find_provides %{nil}<br />
%define __find_requires %{nil}<br />
<br />
== rpm/dhd/helpers/build_packages.sh fails building libhybris, ... ==<br />
<br />
HOST$<br />
cd $HOME<br />
sudo mkdir -p $MER_ROOT/devel<br />
sudo chown -R $USER mer/devel<br />
run the script again <br />
<br />
== Error During end of kernel build ==<br />
``` <br />
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider<br />
at java.lang.Class.getDeclaredMethods0(Native Method)<br />
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)<br />
at java.lang.Class.getMethod0(Class.java:2774)<br />
at java.lang.Class.getMethod(Class.java:1663)<br />
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)<br />
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)<br />
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br />
at java.security.AccessController.doPrivileged(Native Method)<br />
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)<br />
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)<br />
... 6 more<br />
```<br />
<br />
Ensure that unzip is installed as its required for BouncyCastle compile<br />
<br />
run something like this in $ANDROID_ROOT outside HABUILD_SDK<br />
<br />
java -jar \<br />
/home/$USER/mer/android/droid/out/host/linux-x86/framework/dumpkey.jar \<br />
build/target/product/security/testkey.x509.pem \<br />
build/target/product/security/cm.x509.pem \<br />
build/target/product/security/cm-devkey.x509.pem > /home/$USER/mer/android/droid/out/target/product/$DEVICE/obj/PACKAGING/ota_keys_intermediates/keys<br />
<br />
== qemu gives segmentation fault error in Ubuntu 16.10 ==<br />
<br />
instead, use Ubuntu 16.04.1 LTS, or earlier versions<br />
<br />
== qt5-qpa-hwcomposer-plugin fails ==<br />
when building for 2.1 with the error "pkgconfig(Qt5PlatformSupport)" <br />
update dhd submodule<br />
<br />
== Building geoclue-providers-hybris fails ==<br />
<br />
Building geoclue-providers-hybris fails with the error locationsettings.h for local builds update dhd submodule and in case of OBS build change the branch to jb36857<br />
<br />
= Adaptation Guides =<br />
<br />
== ff-memless haptics ==<br />
<br />
To use memless haptics driver instead of droid-vibrator, you need a kernel haptics driver that supports a memless interface (evdev). This is briefly explained in HADK pdf chapter 13.1.<br />
Reference kernel driver implementation for qpnp vibrator is here;<br />
https://github.com/kimmoli/android_kernel_oneplus_msm8974/pull/1<br />
<br />
It needs also vibrator configuration files if defaults are not ok; (this is also in HADK)<br />
https://github.com/kimmoli/droid-config-onyx/commit/dac479716a6b4300be3c5875982265f6914bb498<br />
<br />
And depends which evdev index the new ffmemless gets, one might need to change lipstick config;<br />
https://github.com/kimmoli/droid-config-onyx/pull/4/commits/73bb85fcdc5e2627a8cb0cea0fb5fc2ca9d8e814<br />
<br />
in droid-hal-version-$DEVICE.spec comment `%define have_vibrator 0` out and add `%define have_ffmemless 1`<br />
<br />
add build of qt5-feedback-haptics-ffmemless in build_packages.sh, and comment out other vibrator packages;<br />
<br />
buildmw "https://git.merproject.org/mer-core/qt-mobility-haptics-ffmemless.git" rpm/qt5-feedback-haptics-ffmemless.spec || die<br />
<br />
== FM Radio support ==<br />
<br />
Needs a device with suitable FM radio hardware and a kernel defconfig containing `CONFIG_RADIO_IRIS=y` and `CONFIG_RADIO_IRIS_TRANSPORT=m (or =y)`<br />
<br />
If your `CONFIG_RADIO_IRIS_TRANSPORT` is built-in then this is not needed, however if you have problems try building `CONFIG_RADIO_IRIS_TRANSPORT` as a module: add (adapt to fit your device if needed) <br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/droid-fm-up.service<br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-fm-up.service<br />
<br />
Sometimes device permissions are wrong (root owner), in this case:<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/udev/rules.d/999-droid-fm.rules to your droid-configs repo (or directly to device for testing)<br />
- Add qt5-qtmultimedia-plugin-mediaservice-irisradio to patterns (or install directly to device for testing)<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/pulse/xpolicy.conf.d/fmradio.conf to your droid-configs repo (or directly to device for testing)<br />
<br />
(pre-2.0.2) Update packages from http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/ (for building new images add this to your .ks file as described elsewhere in FAQ)<br />
<br />
Starting from Sailfish OS 2.0.2 FM radio Media app plugin jolla-mediaplayer-radio can be added to patterns.<br />
<br />
(pre-2.0.2) For FM radio testing harbour-piratefm can be obtained from <br />
- http://repo.merproject.org/obs/home:/kimmoli/sailfish_latest_armv7hl/<br />
<br />
== Flashlight shortcut ==<br />
<br />
Starting from Sailfish 2.0.2 it's possible to have flashlight shortcut in eventsview. If your device supports flash torch mode add jolla-settings-system-flashlight package to patterns in your droid-configs repo. The shortcut can be enabled in the eventsview settings.<br />
<br />
== Notes on LOS14.1 Porting ==<br />
XXX: remove the word "exec" from the last line of /usr/bin/droid/droid-hal-startup.sh, to make this permanent add a modified copy of the file to $ANDROID_ROOT/hybris/droid-configs/sparse/usr/bin/droid/droid-hal-startup.sh (this has to be fixed properly at some point)<br />
<br />
On mixed 32/64bit devices, LD_LIBRARY_PATH could be wrong. If logcat shows services aborting with SIG 6 due to wrong arch, try removing the LD_LIBRARY_PATH from /init.environ.rc<br />
<br />
Run this script in $ANDROID_ROOT http://paste.opensuse.org/40869869<br />
<br />
Details of what the script does:<br />
Symlinks for services:<br />
<br />
sh-3.2# ls -lh /usr/libexec/droid-hybris/system/etc/init/ <br />
total 4.0K <br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 atrace.rc -> /system/etc/init/atrace.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 bootstat.rc -> /system/etc/init/bootstat.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 debuggerd.rc -> /system/etc/init/debuggerd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 drmserver.rc -> /system/etc/init/drmserver.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 dumpstate.rc -> /system/etc/init/dumpstate.rc <br />
lrwxrwxrwx 1 root root 31 Oct 6 20:52 gatekeeperd.rc -> /system/etc/init/gatekeeperd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 init-debug.rc -> /system/etc/init/init-debug.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 installd.rc -> /system/etc/init/installd.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 logcatd.rc -> /system/etc/init/logcatd.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 logd.rc -> /system/etc/init/logd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 mediacodec.rc -> /system/etc/init/mediacodec.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediadrmserver.rc -> /system/etc/init/mediadrmserver.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediaextractor.rc -> /system/etc/init/mediaextractor.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 mtpd.rc -> /system/etc/init/mtpd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 perfprofd.rc -> /system/etc/init/perfprofd.rc<br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 racoon.rc -> /system/etc/init/racoon.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 rild.rc -> /system/etc/init/rild.rc<br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 superuser.rc -> /system/etc/init/superuser.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 uncrypt.rc -> /system/etc/init/uncrypt.rc <br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vdc.rc -> /system/etc/init/vdc.rc<br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vold.rc -> /system/etc/init/vold.rc<br />
<br />
NOTE, no audioserver and mediaserver links!<br />
NOTE, bootanim was removed in the updated script, also vold was added<br />
<br />
if NINJA builds are not working, export USE_NINJA=false<br />
<br />
For actdead charging animation, see changes here https://github.com/kimmoli/sfos-onyx-issues/issues/29 but also add 'trigger late-start' to 'on charging' in init.rc<br />
<br />
== Anbox Information ==<br />
https://public.etherpad-mozilla.org/p/anbox-sailfishos<br />
<br />
== Graphics performance improvements ==<br />
Test framerate display (can be enabled in Settings->Developer mode) when using some apps like gallery<br />
If the top view is mostly red try to set QPA_HWC_IDLE_TIME=5 in /var/lib/environment/compositor/droid-hal-device.conf<br />
Run <br />
```systemctl restart user@100000 using devel-su```<br />
<br />
Test framerate display again and if you see more green than before you should use the value<br />
<br />
Different values can be tested but value 5 has been found to be helping on some devices<br />
<br />
On some devices also setting `QPA_HWC_BUFFER_COUNT=3` in `/var/lib/environment/compositor/droid-hal-device.conf` helps with graphics performance<br />
<br />
== Using backported Bluetooth drivers in 3.4 kernel for devices with Qualcomm bluetooth chip using hci_smd driver ==<br />
Generic guide: https://bluez-android.github.io/#building-own-kernel<br />
<br />
Sailfish specific guide:<br />
<br />
Build your kernel with patches from https://github.com/bluez-android/misc/tree/master/patches-kernel and with following flags defined in defconfig<br />
<br />
CONFIG_BT=m<br />
CONFIG_CRYPTO_CMAC=y<br />
CONFIG_CRYPTO_USER_API=y<br />
CONFIG_CRYPTO_USER_API_HASH=y<br />
CONFIG_CRYPTO_USER_API_SKCIPHER=y<br />
<br />
NOTE: Patches may not be required for >= 3.18<br />
In your local_manifest, add <br />
```<project name="mlehtima/backports-bluetooth" path="external/backports-bluetooth" revision="master" />```<br />
run repo sync in HABUILD_SDK<br />
<br />
Build backported drivers by running make backports in HABUILD_SDK while in $ANDROID_ROOT folder<br />
if you get `"external/backports-bluetooth/drivers/bluetooth/hci_smd.c:35:26: fatal error: mach/msm_smd.h: No such file or directory" `error change <br />
`#include <mach/msm_smd.h> to #include <soc/qcom/smd.h|>` in that file<br />
<br />
IMPORTANT: if you rerun make hybris-hal at any time you will always have to rerun make backports after that<br />
Package droid-hal as usual<br />
<br />
Change your config repo to use bluez5 https://github.com/mlehtima/droid-config-fp2-sibon/commit/1cba868fdcfebaffc14a084c5d82fbf2e4339173<br />
Rebuild config rpms and image<br />
<br />
== EA Scratchbox Targets ==<br />
<br />
Lately Jolla offers two sb2 targets so the HADK instructions create some strange behaviour when downloading the sb2 target<br />
<br />
You have two options now to replace this line<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4)<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | tail -n1)<br />
will give you the sb2 for the latest Early Access <br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | head -n1)<br />
<br />
will give you the sb2 for latest non EA SFOS Version <br />
<br />
== to change pixel ratio on a running device, as user: ==<br />
```<br />
devel-su dconf update<br />
# PIXEL_RATIO should be close to the value of horizontal_display_resolution/540<br />
# e.g. Nexus 7 (800 x 1280) displays the pixel ratio is 800/540~=1.48<br />
# always round the value up with two decimal precision<br />
PIXEL_RATIO=1.48<br />
<br />
# UPDATE! Please test the new formula for pixel ratio calculation:<br />
# diagonal_display_size_inches/4.5 * horizontal_display_resolution/540<br />
# and feedback the outcome to sledges via IRC (better/worse/closer via own trial&error picks?)<br />
# Yet another formula: YourDevicePPI/sbjPPI (245), e.g. OnePlusX PPI 441/245 = 1.8<br />
# Available ICON_RES values are 1.0, 1.25, 1.5, 1.75, and 2.0. Choose the closest one to PIXEL_RATIO:<br />
ICON_RES=1.5<br />
devel-su zypper in jolla-ambient-z$ICON_RES ambient-icons-closed-z$ICON_RES<br />
dconf write /desktop/sailfish/silica/theme_pixel_ratio $PIXEL_RATIO<br />
dconf write /desktop/sailfish/silica/theme_icon_subdir $<br />
# check that everything worked:<br />
dconf read /desktop/sailfish/silica/theme_pixel_ratio<br />
devel-su reboot<br />
# PIXEL_RATIO and ICON_RES are subjects to fine tuning: https://bugs.nemomobile.org/show_bug.cgi?id=814#c1<br />
```<br />
Script to scale your icons https://pastebin.com/mxKRkt7Z<br />
<br />
make[3]: *** [security/commoncap.o] Error 1...<br />
Those errors appears because ANDROID_CONFIG_PARANOID_NETWORK is disabled in your kernel and with it enabled, you can't access internet with Sailfish OS. ( Since hybris-12.1, rild does not work without ANDROID_CONFIG_PARANOID_NETWORK. Add nemo to group inet if it is enabled.)<br />
Check http://forum.xda-developers.com/showpost.php?p=42880275&postcount=104<br />
To resolve this replace in <path of your kernel>/security/commoncap.c :<br />
``` <br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
``` <br />
With this:<br />
``` <br />
#ifdef CONFIG_ANDROID_PARANOID_NETWORK<br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
#endif<br />
```<br />
<br />
Save the file and recompile the kernel<br />
<br />
== Build Wlan Driver as Module ==<br />
<br />
Most devices require the wlan driver to be built and loaded as a module during startup<br />
Ensure you have CONFIG_MODULES=y in your kernel config<br />
<br />
Find your wifi driver in your kernel config, it should already be set to `y` and have something like WLAN in the name.<br />
Set it to m<br />
eg.<br />
CONFIG_BCMDHD=m<br />
CONFIG_PRIMA_WLAN=m<br />
CONFIG_PRONTO_WLAN=m<br />
<br />
Add the wlan-module-load.service to your droid-configs sparse directory<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/wlan-module-load.service<br />
<br />
and add a symlink to enable to service on startup:<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/multi-user.target.wants/wlan-module-load.service<br />
<br />
== Bluetooth for Qualcomm devices ==<br />
<br />
Enable `CONFIG_BT_HCISMD` in the kernel defconfig. If it is not present in your kernel, then make these changes:<br />
- https://github.com/adeen-s/android_kernel_cyanogen_msm8916/commit/4627f4f6f5d886433ff1f9639dc18fe8a006fd00 <br />
<br />
Add these files to sparse (or directly to device) and modify them as needed for your device --><br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/usr/bin/droid/droid-hcismd-up.sh<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/droid-hcismd-up.service<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-hcismd-up.service<br />
<br />
Bluetooth Should now work. If it doesn't then make sure the permissions are set correctly and all paths mentioned in above files point to valid locations.<br />
<br />
If you are still having trouble, check to see if there is a service that configures bluetooth and disable/comment it. Eg, config_bluetooth in init.qcom.rc<br />
<br />
<br />
<br />
== Bluetooth for Broadcomm devices ==<br />
Enable `CONFIG_BT_HCIUART_H4` in the kernel defconfig. These devices typically are attached on high speed uart to something like /dev/ttyHS0<br />
<br />
- Symlink your firmware file to /etc/firmware. <br />
eg. https://github.com/r0kk3rz/droid-config-scorpion_windy/blob/master/sparse/etc/firmware/BCM4350C0.hcd<br />
<br />
- You need to make sure the firmware symlink filename matches your bluetooth device name, which can be found by stracing hciattach<br />
Build rfkill middleware and add to patterns:<br />
```<br />
rpm/dhd/helpers/build_packages.sh --mw=https://github.com/mer-hybris/bluetooth-rfkill-event --spec=rpm/bluetooth-rfkill-event-hciattach.spec<br />
```<br />
- add configs: https://github.com/mer-hybris/droid-config-f5121/commit/afa01bdf4bdb8a0d16bbd34996ec7cac34bbbc55<br />
<br />
== Ofono problems ==<br />
RILD is running but ofono does not work<br />
If ofono is not working properly and shows "ERROR! Can't connect to RILD: No such file or directory" in logs, edit /etc/ofono/ril_subscription.conf to contain<br />
<br />
[ril_0]<br />
name=RIL1<br />
socket=/dev/socket/rild<br />
if your device is dual SIM, add also these lines (don't add them otherwise!):<br />
<br />
[ril_1]<br />
name=RIL2<br />
socket=/dev/socket/rild2<br />
<br />
If it works add your ril_subscription.conf to the droid-config-$DEVICE like done here https://github.com/Nokius/droid-config-find5/commit/3e3e636e7e3973f9102ebca9dea79794c00c9174<br />
Also add the jolla-settings-networking-multisim to patterns like done here https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/patterns/jolla-configuration-fp2-sibon.yaml#L15<br />
Fix remembering manual access point configurations across reboots run the following command before building the image<br />
sed -i "/begin 60_ssu/a chown -R radio:radio /var/lib/ofono" Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
Devices without modem<br />
File /etc/ofono/ril_subscription.conf should contain<br />
<br />
[Settings]<br />
EmptyConfig=true<br />
<br />
= Device Fixes =<br />
<br />
== Problems with tfa9890 ==<br />
Copy `/system/etc/firmware` to `/etc/firmware`. Symlink or mount doesn't work! (But why?)<br />
<br />
== So you booted your Sailfish OS? Congrats! No GUI? Oh dear :) ==<br />
<br />
<br />
both usb0 and rndis0 interfaces might be up, remove usb0 from init-script and rebuild kernel image with make hybris-boot or make hybris-recovery<br />
<br />
<br />
== lipstick segfaults/no display ==<br />
As you follow steps below, strace any of the binaries that would fail for non-obvious reasons. You'll need to install strace to do so: zypper in strace<br />
test simple hwc as root:<br />
<br />
EGL_PLATFORM=hwcomposer test_hwcomposer<br />
<br />
^^ strace if segfaults<br />
if strace dies after open("/sys/kernel/debug/tracing/trace_marker..., perform<br />
<br />
systemctl mask sys-kernel-debug.mount<br />
<br />
test_hwcomposer should not be used as reliable hwc test!! if fails, then try minimer:<br />
<br />
curl -O https://qtl.me/minimer3.tar.gz<br />
zypper in qt5-qtdeclarative-qmlscene<br />
tar -xf minimer3.tar.gz; cd minimer<br />
EGL_PLATFORM=hwcomposer /usr/lib/qt5/bin/qmlscene -platform hwcomposer main.qml<br />
<br />
if fails as user, try as root<br />
/system/bin/surfaceflinger<br />
for more info: zypper in gdb<br />
if you get test_hwcomposer, minimer or lipstick segfault, or test_hwcomposer or minimer running but doing nothing (as on m7)<br />
Check if your device uses qcom_display-caf or display-legacy<br />
Look in any of the BoardConfig.mk or BoardConfigCommon.mk in any of the device repos for the device for the variable TARGET_QCOM_DISPLAY_VARIANT. It should be set to either caf or legacy.<br />
The repos included can be determined by looking at the -include device/$VENDOR/*/BoardConfig.mk or device/$VENDOR/*/BoardConfigCommon.mk lines at beginning the .mk files starting from the primary BoardConfig.mk<br />
If you're on display-legacy or display-caf(repo sync before 2015.06.04) patch hwcomposer withhttp://pastebin.com/AfRXPKVA<br />
From HABUILD_SDK recompile android hwcomposer*.so for your device<br />
Find the name of the hwcomposer*.so module: run make modules | grep hwcomposer<br />
If this command complains about missing column command run sudo apt-get install bsdmainutils)<br />
Run `make hwcomposer.module_name` from results above<br />
Once rebuilt, hwcomposer.*.so will be picked up and used by droid hal rebuild, and reside under /usr/libexec/droid-hybris/system/lib/hw<br />
If your apps are crashing (like on flo): Repeat the same for gralloc and copybit<br />
Scream on the IRC if this worked for you<br />
If strace indicates something like:<br />
<br />
"Waiting for service display.qservice..."<br />
This error is known only on cm-10.1 base, and will be upstreamed to mer-hybris soon, but we need more tests: applyhttps://github.com/mer-hybris/android_frameworks_native/commit/6ed4a6e834f6c71b2b6bd8ae1134f50b060e70be to this line https://github.com/CyanogenMod/android_frameworks_base/blob/cm-10.1/cmds/servicemanager/service_manager.c#L88 and also apply https://github.com/mer-hybris/android_system_core/commit/34ea48fd3ad7bf47ec0d0524d76bd20e62717773<br />
open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY|O_LARGEFILE) = <br />
disable debugfs by: https://github.com/mer-hybris/droid-hal-device/commit/8d437fc6f215081d4e1d2baaa6ac23bb94f73154<br />
if it still crashes on gralloc or other gpu related bits, refer to WIP: https://wiki.merproject.org/wiki/Adaptations/libhybris/gpu<br />
<br />
Devices with Mali GPU<br />
Add this to $ANDROID_ROOT/rpm/droid-hal-$DEVICE.spec before the last line (do not change the last line, ever)<br />
%define android_config \<br />
#define MALI_QUIRKS 1\<br />
%{nil}<br />
Rebuild droid-hal and libhybris packages<br />
<br />
<br />
== SIM card not detected ==<br />
This often causes a bootloop<br />
Cellular Modem bringup is now in HADK v1.1.1 section 13.3<br />
<br />
Additional checks:<br />
- Replicate /dev/block structure from Android as closely as possible (for rild to be able to access the modem partition)<br />
- Run ls -lR /dev/block in CM<br />
- Run ls -lR /dev/block in Sailfish OS<br />
<br />
diff the two outputs (this is WIP - android's toolbox ls might need more parameters to produce a comparable output)<br />
If you see differences you need to add custom udev rules to create the correct /dev/block structure<br />
(added automatically since 2016-12-10) For devices with /dev/block/platform/msm_sdcc.1/by-name/ paths (msm_sdcc.1 can be different) add to $ANDROID_ROOT/rpm/ these paths and files with contents, and it most probably will help (but still paste your diff to the IRC channel):<br />
<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/platform-device<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/rules.d/998-droid-system.rules<br />
<br />
(added automatically since 2017-06-03) Some devices (at least all hybris-13.0 based ports) have /dev/block/bootdevice/by-name/ as /dev/block structure in CM in which case you need to add the following line to the end of the 998-droid-system.rules file in the last link:<br />
<br />
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", IMPORT{program}="/bin/sh /lib/udev/platform-device $env{DEVPATH}", SYMLINK+="block/bootdevice/by-name/$env{ID_PART_ENTRY_NAME}"<br />
<br />
If you have logcat and journal error messages suggesting that RIL/ofono can't power the modem on and you have a qcom chipset, have a look in your init.qcom.rc for lines that power it on when the boot animation (bootanim) stops. If you have those, try this (paths may need correcting): https://github.com/stephgosling/android_device_htc_m7-common/commit/9f4abdca65356090e6dd6f0356c5cf4a1870aa5f (note the typo there in the chown line!)<br />
<br />
If you have `pil-q6v5-mss fc880000.qcom,mss: modem: Failed to locate modem.mdt` in your `dmesg` then try this steps:<br />
<br />
- Mask firmware.mount<br />
- add this service to /lib/systemd/system/ https://pastebin.com/9tbUtVnC<br />
- create symlink to that service in /lib/systemd/system/local-fs.target.wants/ <br />
- add /usr/bin/droid/extract_firmware.sh with this content https://pastebin.com/bgphKn4z<br />
<br />
<br />
== Waiting for service SurfaceFlinger seen in logcat? then read this (read surfaceflinger-hack below) ==<br />
If you are using a service like lipstick-hack which loads surfaceflinger for a few seconds to init the hardware, then this stops servicemanager seeing minisfservice as SurfaceFlinger becuase it uses the same service name, then dies.<br />
Disable/mask lipstick-hack from being started by systemd<br />
Add lipstickhack to /init.rc and start in the the core class<br />
```<br />
service lipstickhack /usr/bin/droid/lipstick-hack.sh<br />
class core<br />
user system<br />
oneshot<br />
group graphics drmrpc<br />
```<br />
<br />
== Alternative to lipstick-hack (aka surfaceflinger-hack) ==<br />
<br />
For devices that need the so called lipstick-hack to start surfaceflinger for a few seconds to init the hardware we developed an alternative as the lipstick-hack has proven to be rather unstable during system boots.<br />
<br />
This alternative uses a modified version of libsurfaceflinger itself to init the display and then exits it's main run loop and afterwards behaves like minisfservice. This eliminates the timing issues of lipstick-hack.<br />
<br />
Implementation:<br />
1. BoardConfig.mk<br />
- in the BoardCommon.mk of your device add the following lines:<br />
<br />
# SurfaceFlinger init<br />
BOARD_USE_MOTO_SF = true<br />
<br />
2. libsurfaceflinger<br />
- apply the patches from https://github.com/guhl/android_frameworks_native/commit/ead91374111114fded280abe56484523355ee2cc to $ANDROID_ROOT/frameworks/native/services/surfaceflinger<br />
- in HABUILD_SDK build libsurfaceflinger by doing:<br />
<br />
source build/envsetup.sh<br />
breakfast $DEVICE<br />
make libsurfaceflinger<br />
<br />
<br />
3. <br />
- apply the patches from https://github.com/guhl/droidmedia/commit/cf176cd1bec2c0e5b633b8d728528edc6133ed7d to $ANDROID_ROOT/external/droidmedia<br />
- build droidmedia as described in HADK v2.0.1 - chapter 13.2<br />
<br />
4. init.rc<br />
- add minisfservice as a service to your $ANDROID_ROOT/system/core/rootdir/init.rc like this:<br />
<br />
service minisf /usr/libexec/droid-hybris/system/bin/minisfservice<br />
setenv LD_PRELOAD /usr/libexec/droid-hybris/system/lib/libsurfaceflinger.so<br />
class main<br />
user system<br />
group graphics<br />
<br />
<br />
5. rebuild hybris-hal<br />
as described in HADK v2.0.0 - chapter 5.4 and afterwards package Droid HAL and build the Root Filesystem<br />
<br />
== hls streams and other codecs ==<br />
```<br />
devel-su<br />
#not needed anymore: ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
#not needed anymore: zypper ref common<br />
#not needed anymore: zypper dup --from common # safe to do full upgrade/downgrade there<br />
ssu ar experimental http://repo.merproject.org/obs/nemo:/devel:/hw:/experimental/sailfish_latest_armv7hl/<br />
zypper ref experimental<br />
zypper dup --from experimental<br />
```<br />
<br />
<br />
== Failed at step OOM_ADJUST spawning /usr/libexec/mapplauncherd/booster-qt5: Permission denied ==<br />
Causes for example the failure of startup wizard on first boot:<br />
- try to revert kernel change in fs/proc/base.c<br />
- https://github.com/mer-hybris/android_kernel_oneplus_msm8974/commit/0ed87d7f3cf7d3388f09bd264a856ad9efc564a3<br />
<br />
ping on the IRC if this worked for you :)<br />
<br />
<br />
== UI is shown in tablet mode ==<br />
<br />
needed anymore<br />
<br />
(this fix will not work when the display has a super high resolution)<br />
Symptoms: event view has two columns, very large icons in app grid<br />
Check if the screen size is recognised correctly<br />
<br />
journalctl --no-pager | grep QSizeF<br />
<br />
If the values are not realistic set the screen size in your droid-hal-device.conf<br />
(only works since Sailfish OS 2.0.1)<br />
<br />
QT_QPA_EGLFS_PHYSICAL_WIDTH=<in mm><br />
QT_QPA_EGLFS_PHYSICAL_HEIGHT=<in mm><br />
<br />
<br />
== Access Android's virtual SD card (needs more massaging) ==<br />
<br />
Has received mixed feedback of working/not-working. Replicate onto your device accordingly:<br />
<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/commit/ca102d255f1b6f274e2768e8cbd4ad9c631890e9<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/usr/bin/droid/android-links.sh<br />
- https://github.com/mer-hybris/droid-config-hammerhead/commit/e15591b98380c95e5be96bf9f386278b9825b5f3<br />
<br />
<br />
== Fix remembering Bluetooth state on reboot ==<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/commit/265310c24e254ba102211b6ea398f9ef2b68d523<br />
<br />
== pm-service complains about no permissions ==<br />
<br />
its because PARANOID_NETWORK is required for your kernel config<br />
<br />
<br />
== Kernel changes needed for updated systemd in Sailfish 2.1.1.X ==<br />
<br />
Apply this to all devices with 3.4 kernel https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0640113be25d283e0ff77a9f041e1242182387f0<br />
<br />
<br />
== libdsyscalls is cause of segfault after r or minimer ==<br />
<br />
Usually means that in your device repo, its enabling clang somewhere, do a grep and disable clang and rebuild :)<br />
<br />
<br />
== Audio not routed to headphones ==<br />
<br />
run evdev_trace from mce-tools package and find /dev/input/eventX that detects headphones connection. It will be the one with SW_HEADPHONE_INSERT* and SW_MICROPHONE_INSERT* like here:<br />
<br />
<br />
----====( /dev/input/event0 )====----<br />
Name: "sensorprocessor"<br />
ID: bus 0x0, vendor, 0x0, product 0x0, version 0x0<br />
Type 0x00 (EV_SYN)<br />
Type 0x01 (EV_KEY)<br />
KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_POWER KEY_CAMERA KEY_MEDIA KEY_VOICECOMMAND<br />
Type 0x05 (EV_SW)<br />
SW_LID SW_HEADPHONE_INSERT* SW_MICROPHONE_INSERT*<br />
<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/ohm/plugins.d/accessories.ini file and replace jack-match and jack-device with values from evdev_trace:<br />
jack-match matches Name: field and<br />
ack-device matches /dev/input/eventX<br />
where X is your device input number<br />
<br />
Optional way for devices without headphone connector event device:<br />
<br />
If your device doesn't have event device for the headphone jack then it might have a switch in /sys/class/switch/h2w/ or similar path<br />
If the state file in the /sys/class/switch/h2w/ or similar path reacts to headphone connection by changing the value it can be used for headphone detection<br />
Add file /etc/ohm/plugins.d/accessories.ini with the following content (replace switch name with the name found in the path on your device)<br />
<br />
model = uevent<br />
switch = h2w<br />
<br />
If the headphone detection works then add the file to your config repo sparse for future builds<br />
<br />
== hwcomposer fails to run with `atomic commit failed ret:-22` in dmesg ==<br />
You may need to add the following commits<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/ab8e2349bae3a0971b237b744465089d6f22f8a1<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/c48eee07ace04204cf6c670ddfcf8c694fd88db4<br />
<br />
<br />
== qseccomd crashing ==<br />
Devices that have qseecomd usually have issues getting to UI so its best to disable it in the init.$DEVICE.rc<br />
<br />
<br />
== Black gallery pictures and no browser content/browser crash ==<br />
Add this to droid-hal .spec file and rebuild droid-hal and libhybris packages (remove the sources from hybris/mw/libhybris to make sure a clean rebuild is done):<br />
<br />
%define android_config \<br />
#define WANT_ADRENO_QUIRKS 1\<br />
%{nil}<br />
<br />
== make[1]: *** No rule to make target `XXX_defconfig'. Stop. ==<br />
This was seen as an error while making hybris-hal on wingray<br />
Open hadk/device/*/*/BoardConfig.mk and comment out the line "TARGET_KERNEL_SOURCE=XXX"<br />
Re-run source build/envsetup.sh and breakfast $DEVICE<br />
Re-run make -jXX hybris-hal<br />
Kernel should build properly at this point but you may get an error later along the lines of "svn: command not found"<br />
"sudo apt-get install subversion" should fix it<br />
if that doesn't work try un-commenting the"TARGET_KERNEL_SOURCE=XXX" line for what you are doing and then if you have to rebuild kernel again re-comment it</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/faq-hadkAdaptations/faq-hadk2018-06-04T09:26:06Z<p>Birdzhang: /* Audio not routed to headphones */</p>
<hr />
<div>= Basics =<br />
== Skip tutorial ==<br />
Congratulations if you have got gui working. During the debugging process you will be building and flashing quite a few times, in which tutorial during the setup screen can be annoying. You can skip that by tapping on the each corner of the screen clockwise, while starting from left-top corner.<br />
<br />
== Updating submodules ==<br />
Submodule locations:<br />
```<br />
rpm/dhd<br />
hybris/droid-configs/droid-configs-device<br />
hybris/droid-hal-version-fp2-sibon/droid-hal-version<br />
```<br />
<br />
In the each folder check remote name using `git remote -v `<br />
<br />
Run (replace remote_name with the name you found out in previous step)<br />
```<br />
git fetch remote_name<br />
git pull remote_name master<br />
<br />
== Updating local build target ==<br />
Change release version in the command if needed<br />
In Platform SDK:<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R ssu release 2.1.4.14<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper ref<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper dup<br />
<br />
= Finishing Your Port =<br />
<br />
== how to bring store to your device ==<br />
Your device adaptation should be on Mer OBS (read "Building things on OBS" below)<br />
<br />
Do `ssu s`, Device UID should show a unique ID that is:<br />
IMEI for devices with modem, note - your GSM modem should provide a valid IMEI even without an inserted SIM! Always a good cross-check <br />
that IMEI matches the one on your phone's box or under battery, and in CM/Android<br />
For devices without modem -- WLAN or BT MAC address.<br />
<br />
Find another port/phone and prove that unique ID there is different than yours, and that all of them persist across reboots.<br />
If unique ID is OK then ping pketo on #sailfishos-porters with "Device model" line from `ssu s` to enable store for you.<br />
<br />
== Building things on OBS: ==<br />
Benefits: automated builds, Jolla Store (see above), OTA (see below); local PC is then only needed for Android, dhd, and droidmedia building (which barely happen when port becomes stable), and mic image creation<br />
<br />
It makes sense to go OBS as soon as you have polished your code, minimised hacks, and pushed it to github (usuall when display+touch+WLAN and maybe cellular are working)<br />
<br />
On IRC ask sledges to create project and get maintainership for your nemo:devel:hw:$VENDOR:$DEVICE (you can try things out in your home repo first)<br />
```<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Then "Add repositories"<br />
Check "SailfishOS latest"<br />
Click "Add selected repositories" at the bottom of the page<br />
Add a hw:devel:common repo to build against (which contains all important backports for all ports:), you'll need to add it as an additional repo:<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Click "Edit repository"<br />
Click Add additional path to this repository<br />
Project: nemo:devel:hw:common<br />
Repository: sailfish_latest_armv7hl<br />
```<br />
Check how other devices are built here e.g. https://build.merproject.org/project/show/nemo:devel:hw:semc:iyokan<br />
<br />
Create droid-hal-$DEVICE package manually and upload RPMs for droid-hal-device and droidmedia (and audioflingerglue if device needs it)<br />
For all other packages create webhooks and trigger builds<br />
<br />
How to create webhooks: https://wiki.merproject.org/wiki/Packaging/webhooks<br />
<br />
Which webhooks will you need for your device: https://webhook.merproject.org/webhook (search for nemo:devel:hw:lge:mako and replicate that structure)<br />
<br />
Add cibot as maintainer, then ask lbt via IRC to "patternise" your nemo:devel:hw:$VENDOR:$DEVICE<br />
<br />
Build an image successfully on your PC by following HADK but, using .ks file from droid-config-$DEVICE-ssu-kickstarts-*.rpm built on OBS (don't forget to sed the repos and add nemo:hw:devel:common as adaptation1, this will help you more: http://images.devaamo.fi/sfe/mako/gamma6/Jolla-2.0.1.11-mako-armv7hl.ks )<br />
<br />
== Over-the-Air updates (OTA): ==<br />
Prerequisities:<br />
<br />
Your port has stabilised and is ready to face the big public (gets our retweets, you create Sailfish OS port thread on e.g. XDA, evangelise it :)<br />
<br />
Good measure is to have bare necessities of a daily-driver for most people: LED, audio, texts, calls, data, WLAN, GPS, camera, light, proximity, accelerometer, vol keys, vibra, power management<br />
<br />
You should be building on OBS (guide above)<br />
<br />
Then add these two files (change contents apropriately)<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/flash-partition/device-info<br />
<br />
Change `PART_REAL_1` to match "boot" partition of your device<br />
Change `CPUCHECK_STRING` to match the Hardware field in `/proc/cpuinfo`<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/platform-updates/flash-bootimg.sh<br />
Don't forget to make it executable<br />
<br />
Port over to your device this line:<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/blob/ca102d255f1b6f274e2768e8cbd4ad9c631890e9/droid-hal-hammerhead.spec#L12<br />
<br />
And this commit (only if MultiROM exists or in-the-works for your device):<br />
https://github.com/mer-hybris/droid-config-hammerhead/commit/cb39670de095b914aea23d6ce0e633d295493016<br />
Don't forget to commit and tag so configs rebuild on OBS :)<br />
Simulate OTA on :devel: https://wiki.merproject.org/wiki/Template:SFOS_OTA , see if all is fine (e.g. you can build devel 1.1.9.28 image and OTA it to 2.0)<br />
Then you can test how an updated kernel package flashes itself automatically with an extra reboot, by making some change in kernel, reuploading RPMs and simulating OTA again<br />
For your users to actually use OTA, you should move it to :testing (on IRC ask sledges to create nemo:testing:hw:$VENDOR:$DEVICE), to still be able to play (i.e. break things) in your :devel<br />
<br />
Get maintainership on that :testing repo<br />
- Add cibot as maintainer, then via IRC ask lbt to "patternise" that repo too<br />
- Click on Repositories tab in your nemo:testing:hw:$VENDOR:$DEVICE<br />
- Then "Add repositories"<br />
- Then "pick one via advanced interface"<br />
- Start typing "sailfishos", then pick the version you want OTA to be available for in format "sailfishos:X.Y.Z.W"<br />
- Choose "latest_$PORT_ARCH" for your architecture<br />
- Make the "Name" to match exactly "sailfishos_X.Y.Z.W"<br />
- Add nemo:testing:hw:common to that as additional repo just like you did with :devel: above<br />
<br />
Ensure NO webhooks point to :testing ! Cross-check with https://webhook.merproject.org/webhook<br />
<br />
Promote by using osc copypac to all your device packages from devel to testing (useful script: http://pastebin.com/GssLRr8e )(How To https://gist.github.com/taaem/53ed3a99893d323d7ab3bd8d07540f50 ) - use this (or simpler "Submit Package" WebUI option) also in future whenever a HW adaptation package needs updating in between sfos releases (PR is being prepared to add device hw version to zip filename, HW Adaptation version is also shown in About Product, and is incremented by 1 each time OBS automatically rebuilds droid-hal-version-$DEVICE whenever any hw package changes ;))<br />
<br />
Make an image with adaptation-community repo pointing to testing, adaptation-community-common pointing to common in your .ks file, and start distributing that to the rest of the world<br />
Don't forget to document everything, create a nice installation wiki article for your device (if not yet already), and add such section: https://wiki.merproject.org/wiki/index.php?title=Adaptations/libhybris/Install_SailfishOS_for_mako&action=edit&section=4<br />
Point your existing users to the OTA section of your device's wiki<br />
<br />
Once the next Sailfish OS release comes out and your port adopts it, you can create a new repository in OBS with that version and your users will OTA to it.<br />
<br />
= Debugging Tips =<br />
== Determine which is the touch event ==<br />
use command "getevent" as super user in adb shell. The event which spams most outputs on the screen when the screen is touched is the touch event.<br />
<br />
== persistent journalctl: ==<br />
modify /etc/systemd/journald.conf :<br />
<br />
Storage=volatile --> Storage=automatic<br />
<br />
Then do:<br />
```<br />
mkdir /var/log/journal<br />
reboot<br />
```<br />
<br />
Systemd suppresses journal, and some valuable info might get hidden. To prevent this, set<br />
<br />
RateLimitInterval=0<br />
<br />
== monitoring udev events ==<br />
udevadm monitor is your friend.<br />
<br />
To get it for cyanogenmod, add this repository https://github.com/chombourger/android-udev/ to your manifest as external/usb and make udevadm<br />
<br />
To monitor boot-time events, compile the kernel with CONFIG_DEBUG_KOBJECT=y and increase the log buffer size by setting the kernel command line option: log_buf_len=21 (or higher)<br />
<br />
== perf :) ==<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
mkdir -p perf/rpm<br />
cd perf<br />
ln -s $ANDROID_ROOT/kernel/$VENDOR/$DEVICE linux<br />
curl -o rpm/perf.spec http://pastebin.com/raw/QiW7FD02<br />
<br />
Replace string <YOUR_KERNEL_VERSION> in rpm/perf.spec with kernel version for which you're building perf (for example: 3.4.0)<br />
<br />
mb2 -s rpm/perf.spec -t $VENDOR-$DEVICE-armv7hl build<br />
mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/<br />
createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE<br />
<br />
"less" package is needed for perf to format its output. You can find it here: <br />
- http://repo.merproject.org/obs/nemo:/testing:/hw:/common/sailfish_latest_armv7hl/ <br />
<br />
= HADK Fixes =<br />
== Issues with pulseaudio module build ==<br />
downgrade hybris/droid-configs/droid-configs-device as described above by going to the folder and running <br />
```<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
build_packages.sh --configs<br />
```<br />
<br />
== Issues with ngfd or ngfd-plugin-droid-vibrator or pulseaudio ==<br />
Update submodules as described above<br />
Downgrade hybris/droid-configs/droid-configs-device by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
<br />
Replace `%define have_vibrator 1` in droid-hal-version-@DEVICE@.spec with `%define have_vibrator_native 1`<br />
Change package names in droid-configs patterns as described in templates https://github.com/mer-hybris/droid-hal-configs/commit/aac652aae840a15629c0f4e070275ea128fe088f<br />
Downgrade ngfd plugin:<br />
Go to hybris/mw/ngfd-plugin-droid-vibrator and run:<br />
<br />
git reset --hard 3e2b4fb5b03a6d3db9ca5a41c7091e771f99cc4f<br />
<br />
IN PLATFORM_SDK:<br />
<br />
$PLAFORM_SDK<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator -s rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm ngfd-plugin-droid-vibrator<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator --spec=rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
when you run the whole build_packages.sh after this skip the ngfd-plugin-native-vibrator build<br />
<br />
== libminisf.so not found ==<br />
Add libminisf to droidmedia make command like this in HABUILD_SDK:<br />
<br />
make -jXX libdroidmedia minimediaservice minisfservice libminisf<br />
<br />
Also update rpm/dhd submodule in case you have an older version<br />
<br />
<br />
== No installroot directory after droid-configs build when preparing .ks file ==<br />
<br />
rpm2cpio droid-local-repo/$DEVICE/droid-configs/droid-config-$DEVICE-ssu-kickstarts-1-1.armv7hl.rpm | cpio -idmv<br />
<br />
in the sed command use `$ANDROID_ROOT/usr/share/kickstarts/$KS` instead of `$ANDROID_ROOT/hybris/droid-configs/installroot/usr/share/kickstarts/$KS`<br />
<br />
== Building droid-config fails with: Segmentation fault (core dumped) /usr/lib/qt5/bin/kmap2qmap ......... ==<br />
<br />
try updating the packages in the target with <br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper ref<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper dup<br />
<br />
or<br />
<br />
add the file /system/build.prop to the target with the contents <br />
<br />
<br />
== mic fails during the run ==<br />
<br />
If you get error like this<br />
Warning: repo problem: pattern:jolla-hw-adaptation-$DEVICE1-1.noarch requires droid-config-$DEVICE-policy-settings, but this requirement cannot be provided, uninstallable providers: droid-config-$DEVICE-policy-settings-1-1.armv7hl[adaptation0-$DEVICE-2.0.1.7]<br />
<br />
Or for example<br />
No provider of 'pkgconfig(qofonoext)' found.<br />
<br />
In these cases the missing dependencies can be added with the command:<br />
<br />
MER_SDK $<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -m sdk-install ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
<br />
Also add the same repo to .ks file before building the installation package with mic<br />
Run the following commands before chapter 8.3 of HADK pdf<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
MOBS_URI="http://repo.merproject.org/obs"<br />
HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@"<br />
HA_REPO1="repo --name=common --baseurl=$MOBS_URI/nemo:/devel:/hw:/common/sailfish_latest_@ARCH@/"<br />
sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
If MIC fails with <br />
RuntimeError: Invalid runmode: native <br />
remove `--runtime=native` from mic command args<br />
<br />
If the error message ends with <br />
CreatorError: <creator>Unable to find pattern: Jolla Configuration $DEVICE<br />
then make sure that you executed 8.4 in the hadk pdf (as of v1.9.9). If it still does not work, try executing it again, then process patterns and build again.<br />
If the ks file generated in $ANDROID_ROOT does not contain the local repo, then add it manually. To the top of the list of repos, add<br />
"repo --name=adaptation-community-$DEVICE-@RELEASE@ --baseurl=file:$ANDROID_ROOT/droid-local-repo/$DEVICE/" <br />
substitute $DEVICE and $ANDROID_ROOT appropriately. <br />
Process patterns and build again.<br />
<br />
== sudo: effective uid is not 0, is sudo installed setuid root? ==<br />
Just after chroot is entered through the `sdk` command, sudo fails to execute and fails with the previous message<br />
check for suid mount flag in the bind-mounted root: if your home (not chroot home) is mounted with nosuid you need to remount it before chroot<br />
<br />
$HOST<br />
sudo mount -o remount,suid $HOME<br />
<br />
If you're running an encrypted home partition with ecryptfs, you need to remount home anyway, even if nosuid flag is not set<br />
<br />
$HOST<br />
sudo mount -i -o remount,suid $HOME) <br />
<br />
repo init -u git://github.com/mer-hybris/android.git -b hybris-11.0 fails because of gpg<br />
In sdk chroot gpg command is gpg2<br />
<br />
$MERSDK<br />
git config --global gpg.program gpg2<br />
<br />
== existence_error (yes, you read that right) when locally building policy-settings-common: ==<br />
You get:<br />
ERROR: error(existence_error(procedure, qsave_program/2), context(precompile/0, _G669))<br />
Solution:<br />
```<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -msdk-install<br />
cd /usr/lib/swipl-5.6.50/library<br />
rm INDEX.pl<br />
zypper in fakeroot<br />
fakeroot swipl -g true -t 'make_library_index(.)'<br />
```<br />
then rebuild the package again with mb2<br />
<br />
== Nothing provides /system/bin/sh: ==<br />
Add this to your .spec<br />
<br />
%define __provides_exclude_from ^/system/.*$<br />
%define __requires_exclude ^/system/bin/.*$<br />
%define __find_provides %{nil}<br />
%define __find_requires %{nil}<br />
<br />
== rpm/dhd/helpers/build_packages.sh fails building libhybris, ... ==<br />
<br />
HOST$<br />
cd $HOME<br />
sudo mkdir -p $MER_ROOT/devel<br />
sudo chown -R $USER mer/devel<br />
run the script again <br />
<br />
== Error During end of kernel build ==<br />
``` <br />
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider<br />
at java.lang.Class.getDeclaredMethods0(Native Method)<br />
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)<br />
at java.lang.Class.getMethod0(Class.java:2774)<br />
at java.lang.Class.getMethod(Class.java:1663)<br />
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)<br />
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)<br />
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br />
at java.security.AccessController.doPrivileged(Native Method)<br />
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)<br />
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)<br />
... 6 more<br />
```<br />
<br />
Ensure that unzip is installed as its required for BouncyCastle compile<br />
<br />
run something like this in $ANDROID_ROOT outside HABUILD_SDK<br />
<br />
java -jar \<br />
/home/$USER/mer/android/droid/out/host/linux-x86/framework/dumpkey.jar \<br />
build/target/product/security/testkey.x509.pem \<br />
build/target/product/security/cm.x509.pem \<br />
build/target/product/security/cm-devkey.x509.pem > /home/$USER/mer/android/droid/out/target/product/$DEVICE/obj/PACKAGING/ota_keys_intermediates/keys<br />
<br />
== qemu gives segmentation fault error in Ubuntu 16.10 ==<br />
<br />
instead, use Ubuntu 16.04.1 LTS, or earlier versions<br />
<br />
== qt5-qpa-hwcomposer-plugin fails ==<br />
when building for 2.1 with the error "pkgconfig(Qt5PlatformSupport)" <br />
update dhd submodule<br />
<br />
== Building geoclue-providers-hybris fails ==<br />
<br />
Building geoclue-providers-hybris fails with the error locationsettings.h for local builds update dhd submodule and in case of OBS build change the branch to jb36857<br />
<br />
= Adaptation Guides =<br />
<br />
== ff-memless haptics ==<br />
<br />
To use memless haptics driver instead of droid-vibrator, you need a kernel haptics driver that supports a memless interface (evdev). This is briefly explained in HADK pdf chapter 13.1.<br />
Reference kernel driver implementation for qpnp vibrator is here;<br />
https://github.com/kimmoli/android_kernel_oneplus_msm8974/pull/1<br />
<br />
It needs also vibrator configuration files if defaults are not ok; (this is also in HADK)<br />
https://github.com/kimmoli/droid-config-onyx/commit/dac479716a6b4300be3c5875982265f6914bb498<br />
<br />
And depends which evdev index the new ffmemless gets, one might need to change lipstick config;<br />
https://github.com/kimmoli/droid-config-onyx/pull/4/commits/73bb85fcdc5e2627a8cb0cea0fb5fc2ca9d8e814<br />
<br />
in droid-hal-version-$DEVICE.spec comment `%define have_vibrator 0` out and add `%define have_ffmemless 1`<br />
<br />
add build of qt5-feedback-haptics-ffmemless in build_packages.sh, and comment out other vibrator packages;<br />
<br />
buildmw "https://git.merproject.org/mer-core/qt-mobility-haptics-ffmemless.git" rpm/qt5-feedback-haptics-ffmemless.spec || die<br />
<br />
== FM Radio support ==<br />
<br />
Needs a device with suitable FM radio hardware and a kernel defconfig containing `CONFIG_RADIO_IRIS=y` and `CONFIG_RADIO_IRIS_TRANSPORT=m (or =y)`<br />
<br />
If your `CONFIG_RADIO_IRIS_TRANSPORT` is built-in then this is not needed, however if you have problems try building `CONFIG_RADIO_IRIS_TRANSPORT` as a module: add (adapt to fit your device if needed) <br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/droid-fm-up.service<br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-fm-up.service<br />
<br />
Sometimes device permissions are wrong (root owner), in this case:<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/udev/rules.d/999-droid-fm.rules to your droid-configs repo (or directly to device for testing)<br />
- Add qt5-qtmultimedia-plugin-mediaservice-irisradio to patterns (or install directly to device for testing)<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/pulse/xpolicy.conf.d/fmradio.conf to your droid-configs repo (or directly to device for testing)<br />
<br />
(pre-2.0.2) Update packages from http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/ (for building new images add this to your .ks file as described elsewhere in FAQ)<br />
<br />
Starting from Sailfish OS 2.0.2 FM radio Media app plugin jolla-mediaplayer-radio can be added to patterns.<br />
<br />
(pre-2.0.2) For FM radio testing harbour-piratefm can be obtained from <br />
- http://repo.merproject.org/obs/home:/kimmoli/sailfish_latest_armv7hl/<br />
<br />
== Flashlight shortcut ==<br />
<br />
Starting from Sailfish 2.0.2 it's possible to have flashlight shortcut in eventsview. If your device supports flash torch mode add jolla-settings-system-flashlight package to patterns in your droid-configs repo. The shortcut can be enabled in the eventsview settings.<br />
<br />
== Notes on LOS14.1 Porting ==<br />
XXX: remove the word "exec" from the last line of /usr/bin/droid/droid-hal-startup.sh, to make this permanent add a modified copy of the file to $ANDROID_ROOT/hybris/droid-configs/sparse/usr/bin/droid/droid-hal-startup.sh (this has to be fixed properly at some point)<br />
<br />
On mixed 32/64bit devices, LD_LIBRARY_PATH could be wrong. If logcat shows services aborting with SIG 6 due to wrong arch, try removing the LD_LIBRARY_PATH from /init.environ.rc<br />
<br />
Run this script in $ANDROID_ROOT http://paste.opensuse.org/40869869<br />
<br />
Details of what the script does:<br />
Symlinks for services:<br />
<br />
sh-3.2# ls -lh /usr/libexec/droid-hybris/system/etc/init/ <br />
total 4.0K <br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 atrace.rc -> /system/etc/init/atrace.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 bootstat.rc -> /system/etc/init/bootstat.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 debuggerd.rc -> /system/etc/init/debuggerd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 drmserver.rc -> /system/etc/init/drmserver.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 dumpstate.rc -> /system/etc/init/dumpstate.rc <br />
lrwxrwxrwx 1 root root 31 Oct 6 20:52 gatekeeperd.rc -> /system/etc/init/gatekeeperd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 init-debug.rc -> /system/etc/init/init-debug.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 installd.rc -> /system/etc/init/installd.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 logcatd.rc -> /system/etc/init/logcatd.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 logd.rc -> /system/etc/init/logd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 mediacodec.rc -> /system/etc/init/mediacodec.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediadrmserver.rc -> /system/etc/init/mediadrmserver.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediaextractor.rc -> /system/etc/init/mediaextractor.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 mtpd.rc -> /system/etc/init/mtpd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 perfprofd.rc -> /system/etc/init/perfprofd.rc<br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 racoon.rc -> /system/etc/init/racoon.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 rild.rc -> /system/etc/init/rild.rc<br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 superuser.rc -> /system/etc/init/superuser.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 uncrypt.rc -> /system/etc/init/uncrypt.rc <br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vdc.rc -> /system/etc/init/vdc.rc<br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vold.rc -> /system/etc/init/vold.rc<br />
<br />
NOTE, no audioserver and mediaserver links!<br />
NOTE, bootanim was removed in the updated script, also vold was added<br />
<br />
if NINJA builds are not working, export USE_NINJA=false<br />
<br />
For actdead charging animation, see changes here https://github.com/kimmoli/sfos-onyx-issues/issues/29 but also add 'trigger late-start' to 'on charging' in init.rc<br />
<br />
== Anbox Information ==<br />
https://public.etherpad-mozilla.org/p/anbox-sailfishos<br />
<br />
== Graphics performance improvements ==<br />
Test framerate display (can be enabled in Settings->Developer mode) when using some apps like gallery<br />
If the top view is mostly red try to set QPA_HWC_IDLE_TIME=5 in /var/lib/environment/compositor/droid-hal-device.conf<br />
Run <br />
```systemctl restart user@100000 using devel-su```<br />
<br />
Test framerate display again and if you see more green than before you should use the value<br />
<br />
Different values can be tested but value 5 has been found to be helping on some devices<br />
<br />
On some devices also setting `QPA_HWC_BUFFER_COUNT=3` in `/var/lib/environment/compositor/droid-hal-device.conf` helps with graphics performance<br />
<br />
== Using backported Bluetooth drivers in 3.4 kernel for devices with Qualcomm bluetooth chip using hci_smd driver ==<br />
Generic guide: https://bluez-android.github.io/#building-own-kernel<br />
<br />
Sailfish specific guide:<br />
<br />
Build your kernel with patches from https://github.com/bluez-android/misc/tree/master/patches-kernel and with following flags defined in defconfig<br />
<br />
CONFIG_BT=m<br />
CONFIG_CRYPTO_CMAC=y<br />
CONFIG_CRYPTO_USER_API=y<br />
CONFIG_CRYPTO_USER_API_HASH=y<br />
CONFIG_CRYPTO_USER_API_SKCIPHER=y<br />
<br />
NOTE: Patches may not be required for >= 3.18<br />
In your local_manifest, add <br />
```<project name="mlehtima/backports-bluetooth" path="external/backports-bluetooth" revision="master" />```<br />
run repo sync in HABUILD_SDK<br />
<br />
Build backported drivers by running make backports in HABUILD_SDK while in $ANDROID_ROOT folder<br />
if you get `"external/backports-bluetooth/drivers/bluetooth/hci_smd.c:35:26: fatal error: mach/msm_smd.h: No such file or directory" `error change <br />
`#include <mach/msm_smd.h> to #include <soc/qcom/smd.h|>` in that file<br />
<br />
IMPORTANT: if you rerun make hybris-hal at any time you will always have to rerun make backports after that<br />
Package droid-hal as usual<br />
<br />
Change your config repo to use bluez5 https://github.com/mlehtima/droid-config-fp2-sibon/commit/1cba868fdcfebaffc14a084c5d82fbf2e4339173<br />
Rebuild config rpms and image<br />
<br />
== EA Scratchbox Targets ==<br />
<br />
Lately Jolla offers two sb2 targets so the HADK instructions create some strange behaviour when downloading the sb2 target<br />
<br />
You have two options now to replace this line<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4)<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | tail -n1)<br />
will give you the sb2 for the latest Early Access <br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | head -n1)<br />
<br />
will give you the sb2 for latest non EA SFOS Version <br />
<br />
== to change pixel ratio on a running device, as user: ==<br />
```<br />
devel-su dconf update<br />
# PIXEL_RATIO should be close to the value of horizontal_display_resolution/540<br />
# e.g. Nexus 7 (800 x 1280) displays the pixel ratio is 800/540~=1.48<br />
# always round the value up with two decimal precision<br />
PIXEL_RATIO=1.48<br />
<br />
# UPDATE! Please test the new formula for pixel ratio calculation:<br />
# diagonal_display_size_inches/4.5 * horizontal_display_resolution/540<br />
# and feedback the outcome to sledges via IRC (better/worse/closer via own trial&error picks?)<br />
# Yet another formula: YourDevicePPI/sbjPPI (245), e.g. OnePlusX PPI 441/245 = 1.8<br />
# Available ICON_RES values are 1.0, 1.25, 1.5, 1.75, and 2.0. Choose the closest one to PIXEL_RATIO:<br />
ICON_RES=1.5<br />
devel-su zypper in jolla-ambient-z$ICON_RES ambient-icons-closed-z$ICON_RES<br />
dconf write /desktop/sailfish/silica/theme_pixel_ratio $PIXEL_RATIO<br />
dconf write /desktop/sailfish/silica/theme_icon_subdir $<br />
# check that everything worked:<br />
dconf read /desktop/sailfish/silica/theme_pixel_ratio<br />
devel-su reboot<br />
# PIXEL_RATIO and ICON_RES are subjects to fine tuning: https://bugs.nemomobile.org/show_bug.cgi?id=814#c1<br />
```<br />
Script to scale your icons https://pastebin.com/mxKRkt7Z<br />
<br />
make[3]: *** [security/commoncap.o] Error 1...<br />
Those errors appears because ANDROID_CONFIG_PARANOID_NETWORK is disabled in your kernel and with it enabled, you can't access internet with Sailfish OS. ( Since hybris-12.1, rild does not work without ANDROID_CONFIG_PARANOID_NETWORK. Add nemo to group inet if it is enabled.)<br />
Check http://forum.xda-developers.com/showpost.php?p=42880275&postcount=104<br />
To resolve this replace in <path of your kernel>/security/commoncap.c :<br />
``` <br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
``` <br />
With this:<br />
``` <br />
#ifdef CONFIG_ANDROID_PARANOID_NETWORK<br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
#endif<br />
```<br />
<br />
Save the file and recompile the kernel<br />
<br />
== Build Wlan Driver as Module ==<br />
<br />
Most devices require the wlan driver to be built and loaded as a module during startup<br />
Ensure you have CONFIG_MODULES=y in your kernel config<br />
<br />
Find your wifi driver in your kernel config, it should already be set to `y` and have something like WLAN in the name.<br />
Set it to m<br />
eg.<br />
CONFIG_BCMDHD=m<br />
CONFIG_PRIMA_WLAN=m<br />
CONFIG_PRONTO_WLAN=m<br />
<br />
Add the wlan-module-load.service to your droid-configs sparse directory<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/wlan-module-load.service<br />
<br />
and add a symlink to enable to service on startup:<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/multi-user.target.wants/wlan-module-load.service<br />
<br />
== Bluetooth for Qualcomm devices ==<br />
<br />
Enable `CONFIG_BT_HCISMD` in the kernel defconfig. If it is not present in your kernel, then make these changes:<br />
- https://github.com/adeen-s/android_kernel_cyanogen_msm8916/commit/4627f4f6f5d886433ff1f9639dc18fe8a006fd00 <br />
<br />
Add these files to sparse (or directly to device) and modify them as needed for your device --><br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/usr/bin/droid/droid-hcismd-up.sh<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/droid-hcismd-up.service<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-hcismd-up.service<br />
<br />
Bluetooth Should now work. If it doesn't then make sure the permissions are set correctly and all paths mentioned in above files point to valid locations.<br />
<br />
If you are still having trouble, check to see if there is a service that configures bluetooth and disable/comment it. Eg, config_bluetooth in init.qcom.rc<br />
<br />
<br />
<br />
== Bluetooth for Broadcomm devices ==<br />
Enable `CONFIG_BT_HCIUART_H4` in the kernel defconfig. These devices typically are attached on high speed uart to something like /dev/ttyHS0<br />
<br />
- Symlink your firmware file to /etc/firmware. <br />
eg. https://github.com/r0kk3rz/droid-config-scorpion_windy/blob/master/sparse/etc/firmware/BCM4350C0.hcd<br />
<br />
- You need to make sure the firmware symlink filename matches your bluetooth device name, which can be found by stracing hciattach<br />
Build rfkill middleware and add to patterns:<br />
```<br />
rpm/dhd/helpers/build_packages.sh --mw=https://github.com/mer-hybris/bluetooth-rfkill-event --spec=rpm/bluetooth-rfkill-event-hciattach.spec<br />
```<br />
- add configs: https://github.com/mer-hybris/droid-config-f5121/commit/afa01bdf4bdb8a0d16bbd34996ec7cac34bbbc55<br />
<br />
== Ofono problems ==<br />
RILD is running but ofono does not work<br />
If ofono is not working properly and shows "ERROR! Can't connect to RILD: No such file or directory" in logs, edit /etc/ofono/ril_subscription.conf to contain<br />
<br />
[ril_0]<br />
name=RIL1<br />
socket=/dev/socket/rild<br />
if your device is dual SIM, add also these lines (don't add them otherwise!):<br />
<br />
[ril_1]<br />
name=RIL2<br />
socket=/dev/socket/rild2<br />
<br />
If it works add your ril_subscription.conf to the droid-config-$DEVICE like done here https://github.com/Nokius/droid-config-find5/commit/3e3e636e7e3973f9102ebca9dea79794c00c9174<br />
Also add the jolla-settings-networking-multisim to patterns like done here https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/patterns/jolla-configuration-fp2-sibon.yaml#L15<br />
Fix remembering manual access point configurations across reboots run the following command before building the image<br />
sed -i "/begin 60_ssu/a chown -R radio:radio /var/lib/ofono" Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
Devices without modem<br />
File /etc/ofono/ril_subscription.conf should contain<br />
<br />
[Settings]<br />
EmptyConfig=true<br />
<br />
= Device Fixes =<br />
<br />
== Problems with tfa9890 ==<br />
Copy `/system/etc/firmware` to `/etc/firmware`. Symlink or mount doesn't work! (But why?)<br />
<br />
== So you booted your Sailfish OS? Congrats! No GUI? Oh dear :) ==<br />
<br />
<br />
both usb0 and rndis0 interfaces might be up, remove usb0 from init-script and rebuild kernel image with make hybris-boot or make hybris-recovery<br />
<br />
<br />
== lipstick segfaults/no display ==<br />
As you follow steps below, strace any of the binaries that would fail for non-obvious reasons. You'll need to install strace to do so: zypper in strace<br />
test simple hwc as root:<br />
<br />
EGL_PLATFORM=hwcomposer test_hwcomposer<br />
<br />
^^ strace if segfaults<br />
if strace dies after open("/sys/kernel/debug/tracing/trace_marker..., perform<br />
<br />
systemctl mask sys-kernel-debug.mount<br />
<br />
test_hwcomposer should not be used as reliable hwc test!! if fails, then try minimer:<br />
<br />
curl -O https://qtl.me/minimer3.tar.gz<br />
zypper in qt5-qtdeclarative-qmlscene<br />
tar -xf minimer3.tar.gz; cd minimer<br />
EGL_PLATFORM=hwcomposer /usr/lib/qt5/bin/qmlscene -platform hwcomposer main.qml<br />
<br />
if fails as user, try as root<br />
/system/bin/surfaceflinger<br />
for more info: zypper in gdb<br />
if you get test_hwcomposer, minimer or lipstick segfault, or test_hwcomposer or minimer running but doing nothing (as on m7)<br />
Check if your device uses qcom_display-caf or display-legacy<br />
Look in any of the BoardConfig.mk or BoardConfigCommon.mk in any of the device repos for the device for the variable TARGET_QCOM_DISPLAY_VARIANT. It should be set to either caf or legacy.<br />
The repos included can be determined by looking at the -include device/$VENDOR/*/BoardConfig.mk or device/$VENDOR/*/BoardConfigCommon.mk lines at beginning the .mk files starting from the primary BoardConfig.mk<br />
If you're on display-legacy or display-caf(repo sync before 2015.06.04) patch hwcomposer withhttp://pastebin.com/AfRXPKVA<br />
From HABUILD_SDK recompile android hwcomposer*.so for your device<br />
Find the name of the hwcomposer*.so module: run make modules | grep hwcomposer<br />
If this command complains about missing column command run sudo apt-get install bsdmainutils)<br />
Run `make hwcomposer.module_name` from results above<br />
Once rebuilt, hwcomposer.*.so will be picked up and used by droid hal rebuild, and reside under /usr/libexec/droid-hybris/system/lib/hw<br />
If your apps are crashing (like on flo): Repeat the same for gralloc and copybit<br />
Scream on the IRC if this worked for you<br />
If strace indicates something like:<br />
<br />
"Waiting for service display.qservice..."<br />
This error is known only on cm-10.1 base, and will be upstreamed to mer-hybris soon, but we need more tests: applyhttps://github.com/mer-hybris/android_frameworks_native/commit/6ed4a6e834f6c71b2b6bd8ae1134f50b060e70be to this line https://github.com/CyanogenMod/android_frameworks_base/blob/cm-10.1/cmds/servicemanager/service_manager.c#L88 and also apply https://github.com/mer-hybris/android_system_core/commit/34ea48fd3ad7bf47ec0d0524d76bd20e62717773<br />
open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY|O_LARGEFILE) = <br />
disable debugfs by: https://github.com/mer-hybris/droid-hal-device/commit/8d437fc6f215081d4e1d2baaa6ac23bb94f73154<br />
if it still crashes on gralloc or other gpu related bits, refer to WIP: https://wiki.merproject.org/wiki/Adaptations/libhybris/gpu<br />
<br />
Devices with Mali GPU<br />
Add this to $ANDROID_ROOT/rpm/droid-hal-$DEVICE.spec before the last line (do not change the last line, ever)<br />
%define android_config \<br />
#define MALI_QUIRKS 1\<br />
%{nil}<br />
Rebuild droid-hal and libhybris packages<br />
<br />
<br />
== SIM card not detected ==<br />
This often causes a bootloop<br />
Cellular Modem bringup is now in HADK v1.1.1 section 13.3<br />
<br />
Additional checks:<br />
- Replicate /dev/block structure from Android as closely as possible (for rild to be able to access the modem partition)<br />
- Run ls -lR /dev/block in CM<br />
- Run ls -lR /dev/block in Sailfish OS<br />
<br />
diff the two outputs (this is WIP - android's toolbox ls might need more parameters to produce a comparable output)<br />
If you see differences you need to add custom udev rules to create the correct /dev/block structure<br />
(added automatically since 2016-12-10) For devices with /dev/block/platform/msm_sdcc.1/by-name/ paths (msm_sdcc.1 can be different) add to $ANDROID_ROOT/rpm/ these paths and files with contents, and it most probably will help (but still paste your diff to the IRC channel):<br />
<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/platform-device<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/rules.d/998-droid-system.rules<br />
<br />
(added automatically since 2017-06-03) Some devices (at least all hybris-13.0 based ports) have /dev/block/bootdevice/by-name/ as /dev/block structure in CM in which case you need to add the following line to the end of the 998-droid-system.rules file in the last link:<br />
<br />
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", IMPORT{program}="/bin/sh /lib/udev/platform-device $env{DEVPATH}", SYMLINK+="block/bootdevice/by-name/$env{ID_PART_ENTRY_NAME}"<br />
<br />
If you have logcat and journal error messages suggesting that RIL/ofono can't power the modem on and you have a qcom chipset, have a look in your init.qcom.rc for lines that power it on when the boot animation (bootanim) stops. If you have those, try this (paths may need correcting): https://github.com/stephgosling/android_device_htc_m7-common/commit/9f4abdca65356090e6dd6f0356c5cf4a1870aa5f (note the typo there in the chown line!)<br />
<br />
If you have `pil-q6v5-mss fc880000.qcom,mss: modem: Failed to locate modem.mdt` in your `dmesg` then try this steps:<br />
<br />
- Mask firmware.mount<br />
- add this service to /lib/systemd/system/ https://pastebin.com/9tbUtVnC<br />
- create symlink to that service in /lib/systemd/system/local-fs.target.wants/ <br />
- add /usr/bin/droid/extract_firmware.sh with this content https://pastebin.com/bgphKn4z<br />
<br />
<br />
== Waiting for service SurfaceFlinger seen in logcat? then read this (read surfaceflinger-hack below) ==<br />
If you are using a service like lipstick-hack which loads surfaceflinger for a few seconds to init the hardware, then this stops servicemanager seeing minisfservice as SurfaceFlinger becuase it uses the same service name, then dies.<br />
Disable/mask lipstick-hack from being started by systemd<br />
Add lipstickhack to /init.rc and start in the the core class<br />
```<br />
service lipstickhack /usr/bin/droid/lipstick-hack.sh<br />
class core<br />
user system<br />
oneshot<br />
group graphics drmrpc<br />
```<br />
<br />
== Alternative to lipstick-hack (aka surfaceflinger-hack) ==<br />
<br />
For devices that need the so called lipstick-hack to start surfaceflinger for a few seconds to init the hardware we developed an alternative as the lipstick-hack has proven to be rather unstable during system boots.<br />
<br />
This alternative uses a modified version of libsurfaceflinger itself to init the display and then exits it's main run loop and afterwards behaves like minisfservice. This eliminates the timing issues of lipstick-hack.<br />
<br />
Implementation:<br />
1. BoardConfig.mk<br />
- in the BoardCommon.mk of your device add the following lines:<br />
```<br />
# SurfaceFlinger init<br />
BOARD_USE_MOTO_SF = true<br />
```<br />
2. libsurfaceflinger<br />
- apply the patches from https://github.com/guhl/android_frameworks_native/commit/ead91374111114fded280abe56484523355ee2cc to $ANDROID_ROOT/frameworks/native/services/surfaceflinger<br />
- in HABUILD_SDK build libsurfaceflinger by doing:<br />
```<br />
source build/envsetup.sh<br />
breakfast $DEVICE<br />
make libsurfaceflinger<br />
```<br />
<br />
3. <br />
- apply the patches from https://github.com/guhl/droidmedia/commit/cf176cd1bec2c0e5b633b8d728528edc6133ed7d to $ANDROID_ROOT/external/droidmedia<br />
- build droidmedia as described in HADK v2.0.1 - chapter 13.2<br />
<br />
4. init.rc<br />
- add minisfservice as a service to your $ANDROID_ROOT/system/core/rootdir/init.rc like this:<br />
```<br />
service minisf /usr/libexec/droid-hybris/system/bin/minisfservice<br />
setenv LD_PRELOAD /usr/libexec/droid-hybris/system/lib/libsurfaceflinger.so<br />
class main<br />
user system<br />
group graphics<br />
```<br />
<br />
5. rebuild hybris-hal<br />
as described in HADK v2.0.0 - chapter 5.4 and afterwards package Droid HAL and build the Root Filesystem<br />
<br />
<br />
<br />
== hls streams and other codecs ==<br />
```<br />
devel-su<br />
#not needed anymore: ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
#not needed anymore: zypper ref common<br />
#not needed anymore: zypper dup --from common # safe to do full upgrade/downgrade there<br />
ssu ar experimental http://repo.merproject.org/obs/nemo:/devel:/hw:/experimental/sailfish_latest_armv7hl/<br />
zypper ref experimental<br />
zypper dup --from experimental<br />
```<br />
<br />
<br />
== Failed at step OOM_ADJUST spawning /usr/libexec/mapplauncherd/booster-qt5: Permission denied ==<br />
Causes for example the failure of startup wizard on first boot:<br />
- try to revert kernel change in fs/proc/base.c<br />
- https://github.com/mer-hybris/android_kernel_oneplus_msm8974/commit/0ed87d7f3cf7d3388f09bd264a856ad9efc564a3<br />
<br />
ping on the IRC if this worked for you :)<br />
<br />
<br />
== UI is shown in tablet mode ==<br />
<br />
needed anymore<br />
<br />
(this fix will not work when the display has a super high resolution)<br />
Symptoms: event view has two columns, very large icons in app grid<br />
Check if the screen size is recognised correctly<br />
<br />
journalctl --no-pager | grep QSizeF<br />
<br />
If the values are not realistic set the screen size in your droid-hal-device.conf<br />
(only works since Sailfish OS 2.0.1)<br />
<br />
QT_QPA_EGLFS_PHYSICAL_WIDTH=<in mm><br />
QT_QPA_EGLFS_PHYSICAL_HEIGHT=<in mm><br />
<br />
<br />
== Access Android's virtual SD card (needs more massaging) ==<br />
<br />
Has received mixed feedback of working/not-working. Replicate onto your device accordingly:<br />
<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/commit/ca102d255f1b6f274e2768e8cbd4ad9c631890e9<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/usr/bin/droid/android-links.sh<br />
- https://github.com/mer-hybris/droid-config-hammerhead/commit/e15591b98380c95e5be96bf9f386278b9825b5f3<br />
<br />
<br />
== Fix remembering Bluetooth state on reboot ==<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/commit/265310c24e254ba102211b6ea398f9ef2b68d523<br />
<br />
== pm-service complains about no permissions ==<br />
<br />
its because PARANOID_NETWORK is required for your kernel config<br />
<br />
<br />
== Kernel changes needed for updated systemd in Sailfish 2.1.1.X ==<br />
<br />
Apply this to all devices with 3.4 kernel https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0640113be25d283e0ff77a9f041e1242182387f0<br />
<br />
<br />
== libdsyscalls is cause of segfault after r or minimer ==<br />
<br />
Usually means that in your device repo, its enabling clang somewhere, do a grep and disable clang and rebuild :)<br />
<br />
<br />
== Audio not routed to headphones ==<br />
<br />
run evdev_trace from mce-tools package and find /dev/input/eventX that detects headphones connection. It will be the one with SW_HEADPHONE_INSERT* and SW_MICROPHONE_INSERT* like here:<br />
<br />
<br />
----====( /dev/input/event0 )====----<br />
Name: "sensorprocessor"<br />
ID: bus 0x0, vendor, 0x0, product 0x0, version 0x0<br />
Type 0x00 (EV_SYN)<br />
Type 0x01 (EV_KEY)<br />
KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_POWER KEY_CAMERA KEY_MEDIA KEY_VOICECOMMAND<br />
Type 0x05 (EV_SW)<br />
SW_LID SW_HEADPHONE_INSERT* SW_MICROPHONE_INSERT*<br />
<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/ohm/plugins.d/accessories.ini file and replace jack-match and jack-device with values from evdev_trace:<br />
jack-match matches Name: field and<br />
ack-device matches /dev/input/eventX<br />
where X is your device input number<br />
<br />
Optional way for devices without headphone connector event device:<br />
<br />
If your device doesn't have event device for the headphone jack then it might have a switch in /sys/class/switch/h2w/ or similar path<br />
If the state file in the /sys/class/switch/h2w/ or similar path reacts to headphone connection by changing the value it can be used for headphone detection<br />
Add file /etc/ohm/plugins.d/accessories.ini with the following content (replace switch name with the name found in the path on your device)<br />
<br />
model = uevent<br />
switch = h2w<br />
<br />
If the headphone detection works then add the file to your config repo sparse for future builds<br />
<br />
== hwcomposer fails to run with `atomic commit failed ret:-22` in dmesg ==<br />
You may need to add the following commits<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/ab8e2349bae3a0971b237b744465089d6f22f8a1<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/c48eee07ace04204cf6c670ddfcf8c694fd88db4<br />
<br />
<br />
== qseccomd crashing ==<br />
Devices that have qseecomd usually have issues getting to UI so its best to disable it in the init.$DEVICE.rc<br />
<br />
<br />
== Black gallery pictures and no browser content/browser crash ==<br />
Add this to droid-hal .spec file and rebuild droid-hal and libhybris packages (remove the sources from hybris/mw/libhybris to make sure a clean rebuild is done):<br />
<br />
%define android_config \<br />
#define WANT_ADRENO_QUIRKS 1\<br />
%{nil}<br />
<br />
== make[1]: *** No rule to make target `XXX_defconfig'. Stop. ==<br />
This was seen as an error while making hybris-hal on wingray<br />
Open hadk/device/*/*/BoardConfig.mk and comment out the line "TARGET_KERNEL_SOURCE=XXX"<br />
Re-run source build/envsetup.sh and breakfast $DEVICE<br />
Re-run make -jXX hybris-hal<br />
Kernel should build properly at this point but you may get an error later along the lines of "svn: command not found"<br />
"sudo apt-get install subversion" should fix it<br />
if that doesn't work try un-commenting the"TARGET_KERNEL_SOURCE=XXX" line for what you are doing and then if you have to rebuild kernel again re-comment it</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/faq-hadkAdaptations/faq-hadk2018-06-04T09:25:02Z<p>Birdzhang: /* Black gallery pictures and no browser content/browser crash */</p>
<hr />
<div>= Basics =<br />
== Skip tutorial ==<br />
Congratulations if you have got gui working. During the debugging process you will be building and flashing quite a few times, in which tutorial during the setup screen can be annoying. You can skip that by tapping on the each corner of the screen clockwise, while starting from left-top corner.<br />
<br />
== Updating submodules ==<br />
Submodule locations:<br />
```<br />
rpm/dhd<br />
hybris/droid-configs/droid-configs-device<br />
hybris/droid-hal-version-fp2-sibon/droid-hal-version<br />
```<br />
<br />
In the each folder check remote name using `git remote -v `<br />
<br />
Run (replace remote_name with the name you found out in previous step)<br />
```<br />
git fetch remote_name<br />
git pull remote_name master<br />
<br />
== Updating local build target ==<br />
Change release version in the command if needed<br />
In Platform SDK:<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R ssu release 2.1.4.14<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper ref<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper dup<br />
<br />
= Finishing Your Port =<br />
<br />
== how to bring store to your device ==<br />
Your device adaptation should be on Mer OBS (read "Building things on OBS" below)<br />
<br />
Do `ssu s`, Device UID should show a unique ID that is:<br />
IMEI for devices with modem, note - your GSM modem should provide a valid IMEI even without an inserted SIM! Always a good cross-check <br />
that IMEI matches the one on your phone's box or under battery, and in CM/Android<br />
For devices without modem -- WLAN or BT MAC address.<br />
<br />
Find another port/phone and prove that unique ID there is different than yours, and that all of them persist across reboots.<br />
If unique ID is OK then ping pketo on #sailfishos-porters with "Device model" line from `ssu s` to enable store for you.<br />
<br />
== Building things on OBS: ==<br />
Benefits: automated builds, Jolla Store (see above), OTA (see below); local PC is then only needed for Android, dhd, and droidmedia building (which barely happen when port becomes stable), and mic image creation<br />
<br />
It makes sense to go OBS as soon as you have polished your code, minimised hacks, and pushed it to github (usuall when display+touch+WLAN and maybe cellular are working)<br />
<br />
On IRC ask sledges to create project and get maintainership for your nemo:devel:hw:$VENDOR:$DEVICE (you can try things out in your home repo first)<br />
```<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Then "Add repositories"<br />
Check "SailfishOS latest"<br />
Click "Add selected repositories" at the bottom of the page<br />
Add a hw:devel:common repo to build against (which contains all important backports for all ports:), you'll need to add it as an additional repo:<br />
Click on Repositories tab in your nemo:devel:hw:$VENDOR:$DEVICE<br />
Click "Edit repository"<br />
Click Add additional path to this repository<br />
Project: nemo:devel:hw:common<br />
Repository: sailfish_latest_armv7hl<br />
```<br />
Check how other devices are built here e.g. https://build.merproject.org/project/show/nemo:devel:hw:semc:iyokan<br />
<br />
Create droid-hal-$DEVICE package manually and upload RPMs for droid-hal-device and droidmedia (and audioflingerglue if device needs it)<br />
For all other packages create webhooks and trigger builds<br />
<br />
How to create webhooks: https://wiki.merproject.org/wiki/Packaging/webhooks<br />
<br />
Which webhooks will you need for your device: https://webhook.merproject.org/webhook (search for nemo:devel:hw:lge:mako and replicate that structure)<br />
<br />
Add cibot as maintainer, then ask lbt via IRC to "patternise" your nemo:devel:hw:$VENDOR:$DEVICE<br />
<br />
Build an image successfully on your PC by following HADK but, using .ks file from droid-config-$DEVICE-ssu-kickstarts-*.rpm built on OBS (don't forget to sed the repos and add nemo:hw:devel:common as adaptation1, this will help you more: http://images.devaamo.fi/sfe/mako/gamma6/Jolla-2.0.1.11-mako-armv7hl.ks )<br />
<br />
== Over-the-Air updates (OTA): ==<br />
Prerequisities:<br />
<br />
Your port has stabilised and is ready to face the big public (gets our retweets, you create Sailfish OS port thread on e.g. XDA, evangelise it :)<br />
<br />
Good measure is to have bare necessities of a daily-driver for most people: LED, audio, texts, calls, data, WLAN, GPS, camera, light, proximity, accelerometer, vol keys, vibra, power management<br />
<br />
You should be building on OBS (guide above)<br />
<br />
Then add these two files (change contents apropriately)<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/flash-partition/device-info<br />
<br />
Change `PART_REAL_1` to match "boot" partition of your device<br />
Change `CPUCHECK_STRING` to match the Hardware field in `/proc/cpuinfo`<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/var/lib/platform-updates/flash-bootimg.sh<br />
Don't forget to make it executable<br />
<br />
Port over to your device this line:<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/blob/ca102d255f1b6f274e2768e8cbd4ad9c631890e9/droid-hal-hammerhead.spec#L12<br />
<br />
And this commit (only if MultiROM exists or in-the-works for your device):<br />
https://github.com/mer-hybris/droid-config-hammerhead/commit/cb39670de095b914aea23d6ce0e633d295493016<br />
Don't forget to commit and tag so configs rebuild on OBS :)<br />
Simulate OTA on :devel: https://wiki.merproject.org/wiki/Template:SFOS_OTA , see if all is fine (e.g. you can build devel 1.1.9.28 image and OTA it to 2.0)<br />
Then you can test how an updated kernel package flashes itself automatically with an extra reboot, by making some change in kernel, reuploading RPMs and simulating OTA again<br />
For your users to actually use OTA, you should move it to :testing (on IRC ask sledges to create nemo:testing:hw:$VENDOR:$DEVICE), to still be able to play (i.e. break things) in your :devel<br />
<br />
Get maintainership on that :testing repo<br />
- Add cibot as maintainer, then via IRC ask lbt to "patternise" that repo too<br />
- Click on Repositories tab in your nemo:testing:hw:$VENDOR:$DEVICE<br />
- Then "Add repositories"<br />
- Then "pick one via advanced interface"<br />
- Start typing "sailfishos", then pick the version you want OTA to be available for in format "sailfishos:X.Y.Z.W"<br />
- Choose "latest_$PORT_ARCH" for your architecture<br />
- Make the "Name" to match exactly "sailfishos_X.Y.Z.W"<br />
- Add nemo:testing:hw:common to that as additional repo just like you did with :devel: above<br />
<br />
Ensure NO webhooks point to :testing ! Cross-check with https://webhook.merproject.org/webhook<br />
<br />
Promote by using osc copypac to all your device packages from devel to testing (useful script: http://pastebin.com/GssLRr8e )(How To https://gist.github.com/taaem/53ed3a99893d323d7ab3bd8d07540f50 ) - use this (or simpler "Submit Package" WebUI option) also in future whenever a HW adaptation package needs updating in between sfos releases (PR is being prepared to add device hw version to zip filename, HW Adaptation version is also shown in About Product, and is incremented by 1 each time OBS automatically rebuilds droid-hal-version-$DEVICE whenever any hw package changes ;))<br />
<br />
Make an image with adaptation-community repo pointing to testing, adaptation-community-common pointing to common in your .ks file, and start distributing that to the rest of the world<br />
Don't forget to document everything, create a nice installation wiki article for your device (if not yet already), and add such section: https://wiki.merproject.org/wiki/index.php?title=Adaptations/libhybris/Install_SailfishOS_for_mako&action=edit&section=4<br />
Point your existing users to the OTA section of your device's wiki<br />
<br />
Once the next Sailfish OS release comes out and your port adopts it, you can create a new repository in OBS with that version and your users will OTA to it.<br />
<br />
= Debugging Tips =<br />
== Determine which is the touch event ==<br />
use command "getevent" as super user in adb shell. The event which spams most outputs on the screen when the screen is touched is the touch event.<br />
<br />
== persistent journalctl: ==<br />
modify /etc/systemd/journald.conf :<br />
<br />
Storage=volatile --> Storage=automatic<br />
<br />
Then do:<br />
```<br />
mkdir /var/log/journal<br />
reboot<br />
```<br />
<br />
Systemd suppresses journal, and some valuable info might get hidden. To prevent this, set<br />
<br />
RateLimitInterval=0<br />
<br />
== monitoring udev events ==<br />
udevadm monitor is your friend.<br />
<br />
To get it for cyanogenmod, add this repository https://github.com/chombourger/android-udev/ to your manifest as external/usb and make udevadm<br />
<br />
To monitor boot-time events, compile the kernel with CONFIG_DEBUG_KOBJECT=y and increase the log buffer size by setting the kernel command line option: log_buf_len=21 (or higher)<br />
<br />
== perf :) ==<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
mkdir -p perf/rpm<br />
cd perf<br />
ln -s $ANDROID_ROOT/kernel/$VENDOR/$DEVICE linux<br />
curl -o rpm/perf.spec http://pastebin.com/raw/QiW7FD02<br />
<br />
Replace string <YOUR_KERNEL_VERSION> in rpm/perf.spec with kernel version for which you're building perf (for example: 3.4.0)<br />
<br />
mb2 -s rpm/perf.spec -t $VENDOR-$DEVICE-armv7hl build<br />
mv RPMS/*.rpm $ANDROID_ROOT/droid-local-repo/$DEVICE/<br />
createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE<br />
<br />
"less" package is needed for perf to format its output. You can find it here: <br />
- http://repo.merproject.org/obs/nemo:/testing:/hw:/common/sailfish_latest_armv7hl/ <br />
<br />
= HADK Fixes =<br />
== Issues with pulseaudio module build ==<br />
downgrade hybris/droid-configs/droid-configs-device as described above by going to the folder and running <br />
```<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
build_packages.sh --configs<br />
```<br />
<br />
== Issues with ngfd or ngfd-plugin-droid-vibrator or pulseaudio ==<br />
Update submodules as described above<br />
Downgrade hybris/droid-configs/droid-configs-device by going to the folder and running <br />
<br />
git reset --hard 769864929261d14ba2380323ddced4e325d5c819<br />
<br />
Replace `%define have_vibrator 1` in droid-hal-version-@DEVICE@.spec with `%define have_vibrator_native 1`<br />
Change package names in droid-configs patterns as described in templates https://github.com/mer-hybris/droid-hal-configs/commit/aac652aae840a15629c0f4e070275ea128fe088f<br />
Downgrade ngfd plugin:<br />
Go to hybris/mw/ngfd-plugin-droid-vibrator and run:<br />
<br />
git reset --hard 3e2b4fb5b03a6d3db9ca5a41c7091e771f99cc4f<br />
<br />
IN PLATFORM_SDK:<br />
<br />
$PLAFORM_SDK<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator -s rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -m sdk-install -R zypper rm ngfd-plugin-droid-vibrator<br />
rpm/dhd/helpers/build_packages.sh -b hybris/mw/ngfd-plugin-droid-vibrator --spec=rpm/ngfd-plugin-native-vibrator.spec<br />
<br />
when you run the whole build_packages.sh after this skip the ngfd-plugin-native-vibrator build<br />
<br />
== libminisf.so not found ==<br />
Add libminisf to droidmedia make command like this in HABUILD_SDK:<br />
<br />
make -jXX libdroidmedia minimediaservice minisfservice libminisf<br />
<br />
Also update rpm/dhd submodule in case you have an older version<br />
<br />
<br />
== No installroot directory after droid-configs build when preparing .ks file ==<br />
<br />
rpm2cpio droid-local-repo/$DEVICE/droid-configs/droid-config-$DEVICE-ssu-kickstarts-1-1.armv7hl.rpm | cpio -idmv<br />
<br />
in the sed command use `$ANDROID_ROOT/usr/share/kickstarts/$KS` instead of `$ANDROID_ROOT/hybris/droid-configs/installroot/usr/share/kickstarts/$KS`<br />
<br />
== Building droid-config fails with: Segmentation fault (core dumped) /usr/lib/qt5/bin/kmap2qmap ......... ==<br />
<br />
try updating the packages in the target with <br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper ref<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -m sdk-install zypper dup<br />
<br />
or<br />
<br />
add the file /system/build.prop to the target with the contents <br />
<br />
<br />
== mic fails during the run ==<br />
<br />
If you get error like this<br />
Warning: repo problem: pattern:jolla-hw-adaptation-$DEVICE1-1.noarch requires droid-config-$DEVICE-policy-settings, but this requirement cannot be provided, uninstallable providers: droid-config-$DEVICE-policy-settings-1-1.armv7hl[adaptation0-$DEVICE-2.0.1.7]<br />
<br />
Or for example<br />
No provider of 'pkgconfig(qofonoext)' found.<br />
<br />
In these cases the missing dependencies can be added with the command:<br />
<br />
MER_SDK $<br />
sb2 -t $VENDOR-$DEVICE-$PORT_ARCH -R -m sdk-install ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
<br />
Also add the same repo to .ks file before building the installation package with mic<br />
Run the following commands before chapter 8.3 of HADK pdf<br />
<br />
MER_SDK $<br />
cd $ANDROID_ROOT<br />
MOBS_URI="http://repo.merproject.org/obs"<br />
HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@"<br />
HA_REPO1="repo --name=common --baseurl=$MOBS_URI/nemo:/devel:/hw:/common/sailfish_latest_@ARCH@/"<br />
sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
If MIC fails with <br />
RuntimeError: Invalid runmode: native <br />
remove `--runtime=native` from mic command args<br />
<br />
If the error message ends with <br />
CreatorError: <creator>Unable to find pattern: Jolla Configuration $DEVICE<br />
then make sure that you executed 8.4 in the hadk pdf (as of v1.9.9). If it still does not work, try executing it again, then process patterns and build again.<br />
If the ks file generated in $ANDROID_ROOT does not contain the local repo, then add it manually. To the top of the list of repos, add<br />
"repo --name=adaptation-community-$DEVICE-@RELEASE@ --baseurl=file:$ANDROID_ROOT/droid-local-repo/$DEVICE/" <br />
substitute $DEVICE and $ANDROID_ROOT appropriately. <br />
Process patterns and build again.<br />
<br />
== sudo: effective uid is not 0, is sudo installed setuid root? ==<br />
Just after chroot is entered through the `sdk` command, sudo fails to execute and fails with the previous message<br />
check for suid mount flag in the bind-mounted root: if your home (not chroot home) is mounted with nosuid you need to remount it before chroot<br />
<br />
$HOST<br />
sudo mount -o remount,suid $HOME<br />
<br />
If you're running an encrypted home partition with ecryptfs, you need to remount home anyway, even if nosuid flag is not set<br />
<br />
$HOST<br />
sudo mount -i -o remount,suid $HOME) <br />
<br />
repo init -u git://github.com/mer-hybris/android.git -b hybris-11.0 fails because of gpg<br />
In sdk chroot gpg command is gpg2<br />
<br />
$MERSDK<br />
git config --global gpg.program gpg2<br />
<br />
== existence_error (yes, you read that right) when locally building policy-settings-common: ==<br />
You get:<br />
ERROR: error(existence_error(procedure, qsave_program/2), context(precompile/0, _G669))<br />
Solution:<br />
```<br />
sb2 -t $VENDOR-$DEVICE-armv7hl -R -msdk-install<br />
cd /usr/lib/swipl-5.6.50/library<br />
rm INDEX.pl<br />
zypper in fakeroot<br />
fakeroot swipl -g true -t 'make_library_index(.)'<br />
```<br />
then rebuild the package again with mb2<br />
<br />
== Nothing provides /system/bin/sh: ==<br />
Add this to your .spec<br />
<br />
%define __provides_exclude_from ^/system/.*$<br />
%define __requires_exclude ^/system/bin/.*$<br />
%define __find_provides %{nil}<br />
%define __find_requires %{nil}<br />
<br />
== rpm/dhd/helpers/build_packages.sh fails building libhybris, ... ==<br />
<br />
HOST$<br />
cd $HOME<br />
sudo mkdir -p $MER_ROOT/devel<br />
sudo chown -R $USER mer/devel<br />
run the script again <br />
<br />
== Error During end of kernel build ==<br />
``` <br />
Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider<br />
at java.lang.Class.getDeclaredMethods0(Native Method)<br />
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)<br />
at java.lang.Class.getMethod0(Class.java:2774)<br />
at java.lang.Class.getMethod(Class.java:1663)<br />
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)<br />
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)<br />
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br />
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br />
at java.security.AccessController.doPrivileged(Native Method)<br />
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)<br />
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)<br />
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)<br />
... 6 more<br />
```<br />
<br />
Ensure that unzip is installed as its required for BouncyCastle compile<br />
<br />
run something like this in $ANDROID_ROOT outside HABUILD_SDK<br />
<br />
java -jar \<br />
/home/$USER/mer/android/droid/out/host/linux-x86/framework/dumpkey.jar \<br />
build/target/product/security/testkey.x509.pem \<br />
build/target/product/security/cm.x509.pem \<br />
build/target/product/security/cm-devkey.x509.pem > /home/$USER/mer/android/droid/out/target/product/$DEVICE/obj/PACKAGING/ota_keys_intermediates/keys<br />
<br />
== qemu gives segmentation fault error in Ubuntu 16.10 ==<br />
<br />
instead, use Ubuntu 16.04.1 LTS, or earlier versions<br />
<br />
== qt5-qpa-hwcomposer-plugin fails ==<br />
when building for 2.1 with the error "pkgconfig(Qt5PlatformSupport)" <br />
update dhd submodule<br />
<br />
== Building geoclue-providers-hybris fails ==<br />
<br />
Building geoclue-providers-hybris fails with the error locationsettings.h for local builds update dhd submodule and in case of OBS build change the branch to jb36857<br />
<br />
= Adaptation Guides =<br />
<br />
== ff-memless haptics ==<br />
<br />
To use memless haptics driver instead of droid-vibrator, you need a kernel haptics driver that supports a memless interface (evdev). This is briefly explained in HADK pdf chapter 13.1.<br />
Reference kernel driver implementation for qpnp vibrator is here;<br />
https://github.com/kimmoli/android_kernel_oneplus_msm8974/pull/1<br />
<br />
It needs also vibrator configuration files if defaults are not ok; (this is also in HADK)<br />
https://github.com/kimmoli/droid-config-onyx/commit/dac479716a6b4300be3c5875982265f6914bb498<br />
<br />
And depends which evdev index the new ffmemless gets, one might need to change lipstick config;<br />
https://github.com/kimmoli/droid-config-onyx/pull/4/commits/73bb85fcdc5e2627a8cb0cea0fb5fc2ca9d8e814<br />
<br />
in droid-hal-version-$DEVICE.spec comment `%define have_vibrator 0` out and add `%define have_ffmemless 1`<br />
<br />
add build of qt5-feedback-haptics-ffmemless in build_packages.sh, and comment out other vibrator packages;<br />
<br />
buildmw "https://git.merproject.org/mer-core/qt-mobility-haptics-ffmemless.git" rpm/qt5-feedback-haptics-ffmemless.spec || die<br />
<br />
== FM Radio support ==<br />
<br />
Needs a device with suitable FM radio hardware and a kernel defconfig containing `CONFIG_RADIO_IRIS=y` and `CONFIG_RADIO_IRIS_TRANSPORT=m (or =y)`<br />
<br />
If your `CONFIG_RADIO_IRIS_TRANSPORT` is built-in then this is not needed, however if you have problems try building `CONFIG_RADIO_IRIS_TRANSPORT` as a module: add (adapt to fit your device if needed) <br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/droid-fm-up.service<br />
- https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-fm-up.service<br />
<br />
Sometimes device permissions are wrong (root owner), in this case:<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/lib/udev/rules.d/999-droid-fm.rules to your droid-configs repo (or directly to device for testing)<br />
- Add qt5-qtmultimedia-plugin-mediaservice-irisradio to patterns (or install directly to device for testing)<br />
- Add https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/pulse/xpolicy.conf.d/fmradio.conf to your droid-configs repo (or directly to device for testing)<br />
<br />
(pre-2.0.2) Update packages from http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/ (for building new images add this to your .ks file as described elsewhere in FAQ)<br />
<br />
Starting from Sailfish OS 2.0.2 FM radio Media app plugin jolla-mediaplayer-radio can be added to patterns.<br />
<br />
(pre-2.0.2) For FM radio testing harbour-piratefm can be obtained from <br />
- http://repo.merproject.org/obs/home:/kimmoli/sailfish_latest_armv7hl/<br />
<br />
== Flashlight shortcut ==<br />
<br />
Starting from Sailfish 2.0.2 it's possible to have flashlight shortcut in eventsview. If your device supports flash torch mode add jolla-settings-system-flashlight package to patterns in your droid-configs repo. The shortcut can be enabled in the eventsview settings.<br />
<br />
== Notes on LOS14.1 Porting ==<br />
XXX: remove the word "exec" from the last line of /usr/bin/droid/droid-hal-startup.sh, to make this permanent add a modified copy of the file to $ANDROID_ROOT/hybris/droid-configs/sparse/usr/bin/droid/droid-hal-startup.sh (this has to be fixed properly at some point)<br />
<br />
On mixed 32/64bit devices, LD_LIBRARY_PATH could be wrong. If logcat shows services aborting with SIG 6 due to wrong arch, try removing the LD_LIBRARY_PATH from /init.environ.rc<br />
<br />
Run this script in $ANDROID_ROOT http://paste.opensuse.org/40869869<br />
<br />
Details of what the script does:<br />
Symlinks for services:<br />
<br />
sh-3.2# ls -lh /usr/libexec/droid-hybris/system/etc/init/ <br />
total 4.0K <br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 atrace.rc -> /system/etc/init/atrace.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 bootstat.rc -> /system/etc/init/bootstat.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 debuggerd.rc -> /system/etc/init/debuggerd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 drmserver.rc -> /system/etc/init/drmserver.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 dumpstate.rc -> /system/etc/init/dumpstate.rc <br />
lrwxrwxrwx 1 root root 31 Oct 6 20:52 gatekeeperd.rc -> /system/etc/init/gatekeeperd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 init-debug.rc -> /system/etc/init/init-debug.rc <br />
lrwxrwxrwx 1 root root 28 Oct 6 20:52 installd.rc -> /system/etc/init/installd.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 logcatd.rc -> /system/etc/init/logcatd.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 logd.rc -> /system/etc/init/logd.rc <br />
lrwxrwxrwx 1 root root 30 Oct 6 20:52 mediacodec.rc -> /system/etc/init/mediacodec.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediadrmserver.rc -> /system/etc/init/mediadrmserver.rc <br />
lrwxrwxrwx 1 root root 34 Oct 6 20:52 mediaextractor.rc -> /system/etc/init/mediaextractor.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 mtpd.rc -> /system/etc/init/mtpd.rc <br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 perfprofd.rc -> /system/etc/init/perfprofd.rc<br />
lrwxrwxrwx 1 root root 26 Oct 6 20:52 racoon.rc -> /system/etc/init/racoon.rc <br />
lrwxrwxrwx 1 root root 24 Oct 6 20:52 rild.rc -> /system/etc/init/rild.rc<br />
lrwxrwxrwx 1 root root 29 Oct 6 20:52 superuser.rc -> /system/etc/init/superuser.rc <br />
lrwxrwxrwx 1 root root 27 Oct 6 20:52 uncrypt.rc -> /system/etc/init/uncrypt.rc <br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vdc.rc -> /system/etc/init/vdc.rc<br />
lrwxrwxrwx 1 root root 23 Oct 6 20:52 vold.rc -> /system/etc/init/vold.rc<br />
<br />
NOTE, no audioserver and mediaserver links!<br />
NOTE, bootanim was removed in the updated script, also vold was added<br />
<br />
if NINJA builds are not working, export USE_NINJA=false<br />
<br />
For actdead charging animation, see changes here https://github.com/kimmoli/sfos-onyx-issues/issues/29 but also add 'trigger late-start' to 'on charging' in init.rc<br />
<br />
== Anbox Information ==<br />
https://public.etherpad-mozilla.org/p/anbox-sailfishos<br />
<br />
== Graphics performance improvements ==<br />
Test framerate display (can be enabled in Settings->Developer mode) when using some apps like gallery<br />
If the top view is mostly red try to set QPA_HWC_IDLE_TIME=5 in /var/lib/environment/compositor/droid-hal-device.conf<br />
Run <br />
```systemctl restart user@100000 using devel-su```<br />
<br />
Test framerate display again and if you see more green than before you should use the value<br />
<br />
Different values can be tested but value 5 has been found to be helping on some devices<br />
<br />
On some devices also setting `QPA_HWC_BUFFER_COUNT=3` in `/var/lib/environment/compositor/droid-hal-device.conf` helps with graphics performance<br />
<br />
== Using backported Bluetooth drivers in 3.4 kernel for devices with Qualcomm bluetooth chip using hci_smd driver ==<br />
Generic guide: https://bluez-android.github.io/#building-own-kernel<br />
<br />
Sailfish specific guide:<br />
<br />
Build your kernel with patches from https://github.com/bluez-android/misc/tree/master/patches-kernel and with following flags defined in defconfig<br />
<br />
CONFIG_BT=m<br />
CONFIG_CRYPTO_CMAC=y<br />
CONFIG_CRYPTO_USER_API=y<br />
CONFIG_CRYPTO_USER_API_HASH=y<br />
CONFIG_CRYPTO_USER_API_SKCIPHER=y<br />
<br />
NOTE: Patches may not be required for >= 3.18<br />
In your local_manifest, add <br />
```<project name="mlehtima/backports-bluetooth" path="external/backports-bluetooth" revision="master" />```<br />
run repo sync in HABUILD_SDK<br />
<br />
Build backported drivers by running make backports in HABUILD_SDK while in $ANDROID_ROOT folder<br />
if you get `"external/backports-bluetooth/drivers/bluetooth/hci_smd.c:35:26: fatal error: mach/msm_smd.h: No such file or directory" `error change <br />
`#include <mach/msm_smd.h> to #include <soc/qcom/smd.h|>` in that file<br />
<br />
IMPORTANT: if you rerun make hybris-hal at any time you will always have to rerun make backports after that<br />
Package droid-hal as usual<br />
<br />
Change your config repo to use bluez5 https://github.com/mlehtima/droid-config-fp2-sibon/commit/1cba868fdcfebaffc14a084c5d82fbf2e4339173<br />
Rebuild config rpms and image<br />
<br />
== EA Scratchbox Targets ==<br />
<br />
Lately Jolla offers two sb2 targets so the HADK instructions create some strange behaviour when downloading the sb2 target<br />
<br />
You have two options now to replace this line<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4)<br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | tail -n1)<br />
will give you the sb2 for the latest Early Access <br />
<br />
TARBALL=$(curl $TARBALL_URL | grep "$PORT_ARCH.tar.bz2" | cut -d\" -f4 | head -n1)<br />
<br />
will give you the sb2 for latest non EA SFOS Version <br />
<br />
== to change pixel ratio on a running device, as user: ==<br />
```<br />
devel-su dconf update<br />
# PIXEL_RATIO should be close to the value of horizontal_display_resolution/540<br />
# e.g. Nexus 7 (800 x 1280) displays the pixel ratio is 800/540~=1.48<br />
# always round the value up with two decimal precision<br />
PIXEL_RATIO=1.48<br />
<br />
# UPDATE! Please test the new formula for pixel ratio calculation:<br />
# diagonal_display_size_inches/4.5 * horizontal_display_resolution/540<br />
# and feedback the outcome to sledges via IRC (better/worse/closer via own trial&error picks?)<br />
# Yet another formula: YourDevicePPI/sbjPPI (245), e.g. OnePlusX PPI 441/245 = 1.8<br />
# Available ICON_RES values are 1.0, 1.25, 1.5, 1.75, and 2.0. Choose the closest one to PIXEL_RATIO:<br />
ICON_RES=1.5<br />
devel-su zypper in jolla-ambient-z$ICON_RES ambient-icons-closed-z$ICON_RES<br />
dconf write /desktop/sailfish/silica/theme_pixel_ratio $PIXEL_RATIO<br />
dconf write /desktop/sailfish/silica/theme_icon_subdir $<br />
# check that everything worked:<br />
dconf read /desktop/sailfish/silica/theme_pixel_ratio<br />
devel-su reboot<br />
# PIXEL_RATIO and ICON_RES are subjects to fine tuning: https://bugs.nemomobile.org/show_bug.cgi?id=814#c1<br />
```<br />
Script to scale your icons https://pastebin.com/mxKRkt7Z<br />
<br />
make[3]: *** [security/commoncap.o] Error 1...<br />
Those errors appears because ANDROID_CONFIG_PARANOID_NETWORK is disabled in your kernel and with it enabled, you can't access internet with Sailfish OS. ( Since hybris-12.1, rild does not work without ANDROID_CONFIG_PARANOID_NETWORK. Add nemo to group inet if it is enabled.)<br />
Check http://forum.xda-developers.com/showpost.php?p=42880275&postcount=104<br />
To resolve this replace in <path of your kernel>/security/commoncap.c :<br />
``` <br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
``` <br />
With this:<br />
``` <br />
#ifdef CONFIG_ANDROID_PARANOID_NETWORK<br />
if (cap == CAP_NET_RAW && in_egroup_p(AID_NET_RAW))<br />
return 0;<br />
if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))<br />
return 0;<br />
#endif<br />
```<br />
<br />
Save the file and recompile the kernel<br />
<br />
== Build Wlan Driver as Module ==<br />
<br />
Most devices require the wlan driver to be built and loaded as a module during startup<br />
Ensure you have CONFIG_MODULES=y in your kernel config<br />
<br />
Find your wifi driver in your kernel config, it should already be set to `y` and have something like WLAN in the name.<br />
Set it to m<br />
eg.<br />
CONFIG_BCMDHD=m<br />
CONFIG_PRIMA_WLAN=m<br />
CONFIG_PRONTO_WLAN=m<br />
<br />
Add the wlan-module-load.service to your droid-configs sparse directory<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/wlan-module-load.service<br />
<br />
and add a symlink to enable to service on startup:<br />
https://github.com/mer-hybris/droid-config-onyx/blob/master/sparse/lib/systemd/system/multi-user.target.wants/wlan-module-load.service<br />
<br />
== Bluetooth for Qualcomm devices ==<br />
<br />
Enable `CONFIG_BT_HCISMD` in the kernel defconfig. If it is not present in your kernel, then make these changes:<br />
- https://github.com/adeen-s/android_kernel_cyanogen_msm8916/commit/4627f4f6f5d886433ff1f9639dc18fe8a006fd00 <br />
<br />
Add these files to sparse (or directly to device) and modify them as needed for your device --><br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/usr/bin/droid/droid-hcismd-up.sh<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/droid-hcismd-up.service<br />
- https://github.com/adeen-s/droid-config-wt88047/blob/master/sparse/lib/systemd/system/bluetooth.service.wants/droid-hcismd-up.service<br />
<br />
Bluetooth Should now work. If it doesn't then make sure the permissions are set correctly and all paths mentioned in above files point to valid locations.<br />
<br />
If you are still having trouble, check to see if there is a service that configures bluetooth and disable/comment it. Eg, config_bluetooth in init.qcom.rc<br />
<br />
<br />
<br />
== Bluetooth for Broadcomm devices ==<br />
Enable `CONFIG_BT_HCIUART_H4` in the kernel defconfig. These devices typically are attached on high speed uart to something like /dev/ttyHS0<br />
<br />
- Symlink your firmware file to /etc/firmware. <br />
eg. https://github.com/r0kk3rz/droid-config-scorpion_windy/blob/master/sparse/etc/firmware/BCM4350C0.hcd<br />
<br />
- You need to make sure the firmware symlink filename matches your bluetooth device name, which can be found by stracing hciattach<br />
Build rfkill middleware and add to patterns:<br />
```<br />
rpm/dhd/helpers/build_packages.sh --mw=https://github.com/mer-hybris/bluetooth-rfkill-event --spec=rpm/bluetooth-rfkill-event-hciattach.spec<br />
```<br />
- add configs: https://github.com/mer-hybris/droid-config-f5121/commit/afa01bdf4bdb8a0d16bbd34996ec7cac34bbbc55<br />
<br />
== Ofono problems ==<br />
RILD is running but ofono does not work<br />
If ofono is not working properly and shows "ERROR! Can't connect to RILD: No such file or directory" in logs, edit /etc/ofono/ril_subscription.conf to contain<br />
<br />
[ril_0]<br />
name=RIL1<br />
socket=/dev/socket/rild<br />
if your device is dual SIM, add also these lines (don't add them otherwise!):<br />
<br />
[ril_1]<br />
name=RIL2<br />
socket=/dev/socket/rild2<br />
<br />
If it works add your ril_subscription.conf to the droid-config-$DEVICE like done here https://github.com/Nokius/droid-config-find5/commit/3e3e636e7e3973f9102ebca9dea79794c00c9174<br />
Also add the jolla-settings-networking-multisim to patterns like done here https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/patterns/jolla-configuration-fp2-sibon.yaml#L15<br />
Fix remembering manual access point configurations across reboots run the following command before building the image<br />
sed -i "/begin 60_ssu/a chown -R radio:radio /var/lib/ofono" Jolla-@RELEASE@-$DEVICE-@ARCH@.ks<br />
<br />
Devices without modem<br />
File /etc/ofono/ril_subscription.conf should contain<br />
<br />
[Settings]<br />
EmptyConfig=true<br />
<br />
= Device Fixes =<br />
<br />
== Problems with tfa9890 ==<br />
Copy `/system/etc/firmware` to `/etc/firmware`. Symlink or mount doesn't work! (But why?)<br />
<br />
== So you booted your Sailfish OS? Congrats! No GUI? Oh dear :) ==<br />
<br />
<br />
both usb0 and rndis0 interfaces might be up, remove usb0 from init-script and rebuild kernel image with make hybris-boot or make hybris-recovery<br />
<br />
<br />
== lipstick segfaults/no display ==<br />
As you follow steps below, strace any of the binaries that would fail for non-obvious reasons. You'll need to install strace to do so: zypper in strace<br />
test simple hwc as root:<br />
<br />
EGL_PLATFORM=hwcomposer test_hwcomposer<br />
<br />
^^ strace if segfaults<br />
if strace dies after open("/sys/kernel/debug/tracing/trace_marker..., perform<br />
<br />
systemctl mask sys-kernel-debug.mount<br />
<br />
test_hwcomposer should not be used as reliable hwc test!! if fails, then try minimer:<br />
<br />
curl -O https://qtl.me/minimer3.tar.gz<br />
zypper in qt5-qtdeclarative-qmlscene<br />
tar -xf minimer3.tar.gz; cd minimer<br />
EGL_PLATFORM=hwcomposer /usr/lib/qt5/bin/qmlscene -platform hwcomposer main.qml<br />
<br />
if fails as user, try as root<br />
/system/bin/surfaceflinger<br />
for more info: zypper in gdb<br />
if you get test_hwcomposer, minimer or lipstick segfault, or test_hwcomposer or minimer running but doing nothing (as on m7)<br />
Check if your device uses qcom_display-caf or display-legacy<br />
Look in any of the BoardConfig.mk or BoardConfigCommon.mk in any of the device repos for the device for the variable TARGET_QCOM_DISPLAY_VARIANT. It should be set to either caf or legacy.<br />
The repos included can be determined by looking at the -include device/$VENDOR/*/BoardConfig.mk or device/$VENDOR/*/BoardConfigCommon.mk lines at beginning the .mk files starting from the primary BoardConfig.mk<br />
If you're on display-legacy or display-caf(repo sync before 2015.06.04) patch hwcomposer withhttp://pastebin.com/AfRXPKVA<br />
From HABUILD_SDK recompile android hwcomposer*.so for your device<br />
Find the name of the hwcomposer*.so module: run make modules | grep hwcomposer<br />
If this command complains about missing column command run sudo apt-get install bsdmainutils)<br />
Run `make hwcomposer.module_name` from results above<br />
Once rebuilt, hwcomposer.*.so will be picked up and used by droid hal rebuild, and reside under /usr/libexec/droid-hybris/system/lib/hw<br />
If your apps are crashing (like on flo): Repeat the same for gralloc and copybit<br />
Scream on the IRC if this worked for you<br />
If strace indicates something like:<br />
<br />
"Waiting for service display.qservice..."<br />
This error is known only on cm-10.1 base, and will be upstreamed to mer-hybris soon, but we need more tests: applyhttps://github.com/mer-hybris/android_frameworks_native/commit/6ed4a6e834f6c71b2b6bd8ae1134f50b060e70be to this line https://github.com/CyanogenMod/android_frameworks_base/blob/cm-10.1/cmds/servicemanager/service_manager.c#L88 and also apply https://github.com/mer-hybris/android_system_core/commit/34ea48fd3ad7bf47ec0d0524d76bd20e62717773<br />
open("/sys/kernel/debug/tracing/trace_marker", O_WRONLY|O_LARGEFILE) = <br />
disable debugfs by: https://github.com/mer-hybris/droid-hal-device/commit/8d437fc6f215081d4e1d2baaa6ac23bb94f73154<br />
if it still crashes on gralloc or other gpu related bits, refer to WIP: https://wiki.merproject.org/wiki/Adaptations/libhybris/gpu<br />
<br />
Devices with Mali GPU<br />
Add this to $ANDROID_ROOT/rpm/droid-hal-$DEVICE.spec before the last line (do not change the last line, ever)<br />
%define android_config \<br />
#define MALI_QUIRKS 1\<br />
%{nil}<br />
Rebuild droid-hal and libhybris packages<br />
<br />
<br />
== SIM card not detected ==<br />
This often causes a bootloop<br />
Cellular Modem bringup is now in HADK v1.1.1 section 13.3<br />
<br />
Additional checks:<br />
- Replicate /dev/block structure from Android as closely as possible (for rild to be able to access the modem partition)<br />
- Run ls -lR /dev/block in CM<br />
- Run ls -lR /dev/block in Sailfish OS<br />
<br />
diff the two outputs (this is WIP - android's toolbox ls might need more parameters to produce a comparable output)<br />
If you see differences you need to add custom udev rules to create the correct /dev/block structure<br />
(added automatically since 2016-12-10) For devices with /dev/block/platform/msm_sdcc.1/by-name/ paths (msm_sdcc.1 can be different) add to $ANDROID_ROOT/rpm/ these paths and files with contents, and it most probably will help (but still paste your diff to the IRC channel):<br />
<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/platform-device<br />
- https://github.com/mer-hybris-kis3/droid-config-kis3/blob/master/sparse/lib/udev/rules.d/998-droid-system.rules<br />
<br />
(added automatically since 2017-06-03) Some devices (at least all hybris-13.0 based ports) have /dev/block/bootdevice/by-name/ as /dev/block structure in CM in which case you need to add the following line to the end of the 998-droid-system.rules file in the last link:<br />
<br />
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", IMPORT{program}="/bin/sh /lib/udev/platform-device $env{DEVPATH}", SYMLINK+="block/bootdevice/by-name/$env{ID_PART_ENTRY_NAME}"<br />
<br />
If you have logcat and journal error messages suggesting that RIL/ofono can't power the modem on and you have a qcom chipset, have a look in your init.qcom.rc for lines that power it on when the boot animation (bootanim) stops. If you have those, try this (paths may need correcting): https://github.com/stephgosling/android_device_htc_m7-common/commit/9f4abdca65356090e6dd6f0356c5cf4a1870aa5f (note the typo there in the chown line!)<br />
<br />
If you have `pil-q6v5-mss fc880000.qcom,mss: modem: Failed to locate modem.mdt` in your `dmesg` then try this steps:<br />
<br />
- Mask firmware.mount<br />
- add this service to /lib/systemd/system/ https://pastebin.com/9tbUtVnC<br />
- create symlink to that service in /lib/systemd/system/local-fs.target.wants/ <br />
- add /usr/bin/droid/extract_firmware.sh with this content https://pastebin.com/bgphKn4z<br />
<br />
<br />
== Waiting for service SurfaceFlinger seen in logcat? then read this (read surfaceflinger-hack below) ==<br />
If you are using a service like lipstick-hack which loads surfaceflinger for a few seconds to init the hardware, then this stops servicemanager seeing minisfservice as SurfaceFlinger becuase it uses the same service name, then dies.<br />
Disable/mask lipstick-hack from being started by systemd<br />
Add lipstickhack to /init.rc and start in the the core class<br />
```<br />
service lipstickhack /usr/bin/droid/lipstick-hack.sh<br />
class core<br />
user system<br />
oneshot<br />
group graphics drmrpc<br />
```<br />
<br />
== Alternative to lipstick-hack (aka surfaceflinger-hack) ==<br />
<br />
For devices that need the so called lipstick-hack to start surfaceflinger for a few seconds to init the hardware we developed an alternative as the lipstick-hack has proven to be rather unstable during system boots.<br />
<br />
This alternative uses a modified version of libsurfaceflinger itself to init the display and then exits it's main run loop and afterwards behaves like minisfservice. This eliminates the timing issues of lipstick-hack.<br />
<br />
Implementation:<br />
1. BoardConfig.mk<br />
- in the BoardCommon.mk of your device add the following lines:<br />
```<br />
# SurfaceFlinger init<br />
BOARD_USE_MOTO_SF = true<br />
```<br />
2. libsurfaceflinger<br />
- apply the patches from https://github.com/guhl/android_frameworks_native/commit/ead91374111114fded280abe56484523355ee2cc to $ANDROID_ROOT/frameworks/native/services/surfaceflinger<br />
- in HABUILD_SDK build libsurfaceflinger by doing:<br />
```<br />
source build/envsetup.sh<br />
breakfast $DEVICE<br />
make libsurfaceflinger<br />
```<br />
<br />
3. <br />
- apply the patches from https://github.com/guhl/droidmedia/commit/cf176cd1bec2c0e5b633b8d728528edc6133ed7d to $ANDROID_ROOT/external/droidmedia<br />
- build droidmedia as described in HADK v2.0.1 - chapter 13.2<br />
<br />
4. init.rc<br />
- add minisfservice as a service to your $ANDROID_ROOT/system/core/rootdir/init.rc like this:<br />
```<br />
service minisf /usr/libexec/droid-hybris/system/bin/minisfservice<br />
setenv LD_PRELOAD /usr/libexec/droid-hybris/system/lib/libsurfaceflinger.so<br />
class main<br />
user system<br />
group graphics<br />
```<br />
<br />
5. rebuild hybris-hal<br />
as described in HADK v2.0.0 - chapter 5.4 and afterwards package Droid HAL and build the Root Filesystem<br />
<br />
<br />
<br />
== hls streams and other codecs ==<br />
```<br />
devel-su<br />
#not needed anymore: ssu ar common http://repo.merproject.org/obs/nemo:/devel:/hw:/common/sailfish_latest_armv7hl/<br />
#not needed anymore: zypper ref common<br />
#not needed anymore: zypper dup --from common # safe to do full upgrade/downgrade there<br />
ssu ar experimental http://repo.merproject.org/obs/nemo:/devel:/hw:/experimental/sailfish_latest_armv7hl/<br />
zypper ref experimental<br />
zypper dup --from experimental<br />
```<br />
<br />
<br />
== Failed at step OOM_ADJUST spawning /usr/libexec/mapplauncherd/booster-qt5: Permission denied ==<br />
Causes for example the failure of startup wizard on first boot:<br />
- try to revert kernel change in fs/proc/base.c<br />
- https://github.com/mer-hybris/android_kernel_oneplus_msm8974/commit/0ed87d7f3cf7d3388f09bd264a856ad9efc564a3<br />
<br />
ping on the IRC if this worked for you :)<br />
<br />
<br />
== UI is shown in tablet mode ==<br />
<br />
needed anymore<br />
<br />
(this fix will not work when the display has a super high resolution)<br />
Symptoms: event view has two columns, very large icons in app grid<br />
Check if the screen size is recognised correctly<br />
<br />
journalctl --no-pager | grep QSizeF<br />
<br />
If the values are not realistic set the screen size in your droid-hal-device.conf<br />
(only works since Sailfish OS 2.0.1)<br />
<br />
QT_QPA_EGLFS_PHYSICAL_WIDTH=<in mm><br />
QT_QPA_EGLFS_PHYSICAL_HEIGHT=<in mm><br />
<br />
<br />
== Access Android's virtual SD card (needs more massaging) ==<br />
<br />
Has received mixed feedback of working/not-working. Replicate onto your device accordingly:<br />
<br />
- https://github.com/mer-hybris/droid-hal-hammerhead/commit/ca102d255f1b6f274e2768e8cbd4ad9c631890e9<br />
- https://github.com/mer-hybris/droid-config-hammerhead/blob/master/sparse/usr/bin/droid/android-links.sh<br />
- https://github.com/mer-hybris/droid-config-hammerhead/commit/e15591b98380c95e5be96bf9f386278b9825b5f3<br />
<br />
<br />
== Fix remembering Bluetooth state on reboot ==<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/commit/265310c24e254ba102211b6ea398f9ef2b68d523<br />
<br />
== pm-service complains about no permissions ==<br />
<br />
its because PARANOID_NETWORK is required for your kernel config<br />
<br />
<br />
== Kernel changes needed for updated systemd in Sailfish 2.1.1.X ==<br />
<br />
Apply this to all devices with 3.4 kernel https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0640113be25d283e0ff77a9f041e1242182387f0<br />
<br />
<br />
== libdsyscalls is cause of segfault after r or minimer ==<br />
<br />
Usually means that in your device repo, its enabling clang somewhere, do a grep and disable clang and rebuild :)<br />
<br />
<br />
== Audio not routed to headphones ==<br />
<br />
run evdev_trace from mce-tools package and find /dev/input/eventX that detects headphones connection. It will be the one with SW_HEADPHONE_INSERT* and SW_MICROPHONE_INSERT* like here:<br />
```<br />
----====( /dev/input/event0 )====----<br />
Name: "sensorprocessor"<br />
ID: bus 0x0, vendor, 0x0, product 0x0, version 0x0<br />
Type 0x00 (EV_SYN)<br />
Type 0x01 (EV_KEY)<br />
KEY_VOLUMEDOWN KEY_VOLUMEUP KEY_POWER KEY_CAMERA KEY_MEDIA KEY_VOICECOMMAND<br />
Type 0x05 (EV_SW)<br />
SW_LID SW_HEADPHONE_INSERT* SW_MICROPHONE_INSERT*<br />
```<br />
<br />
Add this https://github.com/mlehtima/droid-config-fp2-sibon/blob/master/sparse/etc/ohm/plugins.d/accessories.ini file and replace jack-match and jack-device with values from evdev_trace:<br />
jack-match matches Name: field and<br />
ack-device matches /dev/input/eventX<br />
where X is your device input number<br />
<br />
Optional way for devices without headphone connector event device:<br />
<br />
If your device doesn't have event device for the headphone jack then it might have a switch in /sys/class/switch/h2w/ or similar path<br />
If the state file in the /sys/class/switch/h2w/ or similar path reacts to headphone connection by changing the value it can be used for headphone detection<br />
Add file /etc/ohm/plugins.d/accessories.ini with the following content (replace switch name with the name found in the path on your device)<br />
<br />
model = uevent<br />
switch = h2w<br />
<br />
If the headphone detection works then add the file to your config repo sparse for future builds<br />
<br />
<br />
<br />
== hwcomposer fails to run with `atomic commit failed ret:-22` in dmesg ==<br />
You may need to add the following commits<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/ab8e2349bae3a0971b237b744465089d6f22f8a1<br />
https://github.com/zhxt/android_kernel_xiaomi_msm8996/commit/c48eee07ace04204cf6c670ddfcf8c694fd88db4<br />
<br />
<br />
== qseccomd crashing ==<br />
Devices that have qseecomd usually have issues getting to UI so its best to disable it in the init.$DEVICE.rc<br />
<br />
<br />
== Black gallery pictures and no browser content/browser crash ==<br />
Add this to droid-hal .spec file and rebuild droid-hal and libhybris packages (remove the sources from hybris/mw/libhybris to make sure a clean rebuild is done):<br />
<br />
%define android_config \<br />
#define WANT_ADRENO_QUIRKS 1\<br />
%{nil}<br />
<br />
== make[1]: *** No rule to make target `XXX_defconfig'. Stop. ==<br />
This was seen as an error while making hybris-hal on wingray<br />
Open hadk/device/*/*/BoardConfig.mk and comment out the line "TARGET_KERNEL_SOURCE=XXX"<br />
Re-run source build/envsetup.sh and breakfast $DEVICE<br />
Re-run make -jXX hybris-hal<br />
Kernel should build properly at this point but you may get an error later along the lines of "svn: command not found"<br />
"sudo apt-get install subversion" should fix it<br />
if that doesn't work try un-commenting the"TARGET_KERNEL_SOURCE=XXX" line for what you are doing and then if you have to rebuild kernel again re-comment it</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/portersAdaptations/libhybris/porters2018-05-24T03:36:53Z<p>Birdzhang: </p>
<hr />
<div>HQ: https://sailfishos.org/develop/hadk/<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
!rowspan="2"|Codename<br />
!rowspan="2"|Retail Name<br />
!colspan="2"|Porters<br />
!rowspan="2"|Base<br />
!rowspan="2"|QCOM_BSP<br />
!rowspan="2"|HWC<br />
!rowspan="2"|Display<br />
!rowspan="2"|RIL Version<br />
|-<br />
!Active<br />
!Past<br />
|-<br />
|idol3||Alcatel Idol 3 (5.5")||vknecht|| ||14.1||y||1.5||caf/msm8916||11<br />
|-<br />
|fp2-sibon||Fairphone 2||mal-,vakkov,phdeswer|| ||aosp6||y||1.4||caf|| <br />
|-<br />
|maguro||Google Galaxy Nexus|| ||beidl,vakkov|| || || || || <br />
|-<br />
|mako||Google Nexus 4||ballock,rinigus||sledges,carepack,zhxt||11/10.1||n||1.2|| || <br />
|-<br />
|hammerhead||Google Nexus 5||drFaustroll,sledges||situ,vgrade,dmt||12.1/11.0||n||1.3|| || <br />
|-<br />
|grouper||Google Nexus 7 2012 WiFi|| ||alterego,junnuvi|| || || || || <br />
|-<br />
|tilapia||Google Nexus 7 2012 GSM|| ||alterego|| || || || || <br />
|-<br />
|flo||Google Nexus 7 2013 WiFi||Mister_Magister||vrutkovs||11.0|| || || || <br />
|-<br />
|deb||Google Nexus 7 2013 LTE|| ||cxl000|| || || || || <br />
|-<br />
|passion||Google Nexus One|| ||vgrade|| || || || || <br />
|-<br />
|tenderloin||HP Touchpad|| ||OrokuSaki|| || || || || <br />
|-<br />
|ace||HTC Desire HD||piggz || ||12.1||n||1.1||caf||4<br />
|-<br />
|vision||HTC Desire Z||guhl || ||11.0 || || || ||4 <br />
|-<br />
|m7||HTC One GSM||stephg|| ||11.0||y||1.2|| || <br />
|-<br />
|m7spr||HTC One Sprint||rltyseven||stephg||11.0||y||1.2|| ||<br />
|-<br />
|t6||HTC One Max||rltyseven|| ||11.0||y||1.2|| || <br />
|-<br />
|pyramid||HTC Sensation|| ||maikoool|| || || || || <br />
|-<br />
|hwp6_u06||Huawei Ascend P6|| ||stskeeps,locusf|||| || || || <br />
|-<br />
|c8813q||Huawei G525-u00 / C8813Q|| ||dr_gogeta86||11.0|| ||1.0|| || || <br />
|-<br />
|kinzie||Motorola Moto X Force||Mister_Magister|| ||13.0|| || || || <br />
|-<br />
|lux||Motorola Moto X Play||Keij0,Mister_Magister|| ||12.1|| || || || <br />
|-<br />
|quark||Motorola Droid Turbo||hexc0de|| ||13.0||y||1.3||caf|| <br />
|-<br />
|surnia||Motorola Moto E (2nd Gen.)||wiktorek140|| ||12.1||y || || || <br />
|-<br />
|falcon||Motorola Moto G (1st Gen.)||piggz||refa,vgrade,ParkerR,elfio,idej||12.1||y||1.4||caf/msm8974|| <br />
|-<br />
|titan||Motorola Moto G (2nd Gen.)||Mister_Magister|| ||12.1|| || || || <br />
|-<br />
|thea||Motorola Moto G LTE (2nd Gen.)||guhl|| ||12.1|| || || || <br />
|-<br />
|xt897||Motorola Photon Q||vevgeniev||flyser,oh1jty||11.0||y||1.3||caf|| <br />
|-<br />
|n900||Nokia n900|| ||vakkov|| || || || || <br />
|-l<br />
|bacon||Oneplus One||vgrade,sledges||starkDbl07,yacuken|| || || || || <br />
|-<br />
|onyx||OnePlus X||taaem||||12.1|| || || || <br />
|-<br />
|find5||Oppo Find 5||Nokius||||11.0||y||1.2|| || <br />
|-<br />
|n7000||Samsung Galaxy Note||piggz||locusf||10.1||n||1.0||||7<br />
|-<br />
|galaxysmtd||Samsung Galaxy S|| ||loljimmo12|||11.0||n||1.0|| || <br />
|-<br />
|i9300||Samsung Galaxy S3 Intl|| ||rusty88|| || || || || <br />
|-<br />
|i9305||Samsung Galaxy S3 LTE|| ||lbt,sledges,thp,Umeaboy|| || || || || <br />
|-l<br />
|i8190||Samsung Galaxy S3 Mini|| ||Umeaboy|| || || || || <br />
|-<br />
|jfltexx||Samsung Galaxy S4 Intl LTE (i9505)||simonvanderveldt,wickwire||dragonkeeper||12.1||y||||caf|| <br />
|-<br />
|serrano||Samsung Galaxy S4 Mini||qno||||12.1|| || || || <br />
|-<br />
|p1||Samsung Galaxy Tab P1000|| ||Umeaboy|| || || || || <br />
|-<br />
|p3110||Samsung Galaxy Tab 2|| ||locusf|| || || || || <br />
|-<br />
|p3100||Samsung Galaxy Tab 2 || || adeen-s||11.0|| || || || <br />
|-<br />
|espresso3g||Samsung Galaxy Tab 2 3G|| || yacuken||12.1|| || || ||<br />
|-<br />
|matissewifi||Samsung Galaxy Tab 4 WiFi||mal-|| ||13.0||y||1.5||msm8226||<br />
|-<br />
|c2105||Sony Xperia L C2105|| ||energycsdx|| || || || || <br />
|-<br />
|huashan||Sony Xperia SP||maikoool|| ||11.0||y||1.2||caf/msm8960||8<br />
|-<br />
|kugo||Sony Xperia X Compact||stephg|| ||aosp6||y|| || || <br />
|-<br />
|yuga||Sony Xperia Z|| ||oleid|| || || || || <br />
|-<br />
|amami||Sony Xperia Z1 Compact|| ||iuno|| || || || || <br />
|-<br />
|sirius||Sony Xperia Z2||Keij0,Mister_Magister|| ||12.1|| || || || <br />
|-<br />
|aries/z3c||Sony Xperia Z3 Compact||maikoool,rss351||locusf||12.1||y||1.4||caf/msm8974|| <br />
|-<br />
|coconut||Sony Ericsson Live with Walkman||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|satsuma||Sony Ericsson Xperia Active||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|anzu||Sony Ericsson Xperia Arc/Arc S||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|smultron||Sony Ericsson Xperia Mini||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|mango||Sony Ericsson Xperia Mini Pro||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|hallon||Sony Ericsson Xperia Neo||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|haida||Sony Ericsson Xperia Neo V||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|iyokan||Sony Ericsson Xperia Pro||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|urushi||Sony Ericsson Xperia Ray||mal-|| ||11.0||y||1.3||caf|| <br />
|-<br />
|cancro||Xiaomi Mi3||saidinesh5|| ||12.1||y||1.4||caf||<br />
|-<br />
|armani||Xiaomi Redmi 1S||Litew||TheRedFox(Ville)||12.1||y||1.4||caf||9<br />
|-<br />
|wt88047||Xiaomi Redmi 2||nrdnandan||adeen-s||12.1||y||||caf|| <br />
|-<br />
|vince||Xiaomi Redmi Note 5/5 plus||birdzhang||||14.1||y||1.5||||13 <br />
|-<br />
|kis3||ZTE Open C / Kis 3||KonstaT|| ||12.1||y||1.4||caf/msm8974||9<br />
|-<br />
|ham||ZUK Z1||Litew||||12.1||y||1.4||caf|| <br />
|-<br />
<br />
|}<br />
<br />
Find your device's HWC version like this (or from output of minimer under "== hwcomposer device =="):<br />
MER_SDK $<br />
find $ANDROID_ROOT/hardware/*/display* -type d -name libhwcomposer | xargs -I{} grep -H device.common.version {}/hwc.cpp<br />
# multiple results can be filtered out by your SoC, e.g. msmXYZŽ you can lookup in `grep msm device/$VENDOR/$DEVICE/*`)<br />
List of devices with display problems (hugely outdated, most problems were solved \o/): [[Adaptations/libhybris/gpu]]</div>Birdzhanghttps://wiki.merproject.org/wiki/Template:Device_vinceTemplate:Device vince2018-05-17T15:04:12Z<p>Birdzhang: </p>
<hr />
<div>{{{{{function}}}<!-- don't touch this line --><br />
|link_kind={{{link_kind}}}<!-- don't touch this either. Used for generating links --><br />
| table_summary={{{table_summary}}}<br />
<!-- Y / HAL / ? / N / NA --><br />
| device_released=2017/12<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=Y<br />
| sensor_proximity_status=Y<br />
| sensor_accelerometer_status=Y<br />
| sensor_gyroscope_status=Y<br />
| sensor_magnetic_status=Y<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-05-17T15:03:51Z<p>Birdzhang: /* What works */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* gps<br />
* sensors<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-05-17T15:03:34Z<p>Birdzhang: /* What's not */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
<br />
=== What's not ===<br />
* compass<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-05-16T04:32:34Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
'''2018-05-16'''<br />
* with sailfish browser fixed, use zypper ref && zypper up to upgrade<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
<br />
=== What's not ===<br />
* sensors<br />
* gps<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-05-16T04:31:36Z<p>Birdzhang: /* What's not */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
<br />
=== What's not ===<br />
* sensors<br />
* gps<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-05-12T00:56:19Z<p>Birdzhang: /* What's not */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
<br />
=== What's not ===<br />
* sailfish browser<br />
* sensors<br />
* gps<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-05-12T00:55:26Z<p>Birdzhang: /* What works */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
=== What works ===<br />
* calls/SMS/data<br />
* audio<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
<br />
=== What's not ===<br />
* sailfish browser<br />
* sensors<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-05-12T00:55:02Z<p>Birdzhang: /* What's not */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
=== What works ===<br />
* calls/SMS<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* GPS<br />
<br />
=== What's not ===<br />
* sailfish browser<br />
* sensors<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Template:Device_vinceTemplate:Device vince2018-05-12T00:52:42Z<p>Birdzhang: </p>
<hr />
<div>{{{{{function}}}<!-- don't touch this line --><br />
|link_kind={{{link_kind}}}<!-- don't touch this either. Used for generating links --><br />
| table_summary={{{table_summary}}}<br />
<!-- Y / HAL / ? / N / NA --><br />
| device_released=2017/12<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=N<br />
| camera_status=Y<br />
| sensor_light_status=N<br />
| sensor_proximity_status=N<br />
| sensor_accelerometer_status=N<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=N<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=Y<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}</div>Birdzhanghttps://wiki.merproject.org/wiki/Template:Device_vinceTemplate:Device vince2018-05-12T00:37:55Z<p>Birdzhang: </p>
<hr />
<div>{{{{{function}}}<!-- don't touch this line --><br />
|link_kind={{{link_kind}}}<!-- don't touch this either. Used for generating links --><br />
| table_summary={{{table_summary}}}<br />
<!-- Y / HAL / ? / N / NA --><br />
| device_released=2017/12<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=Y<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=N<br />
| camera_status=Y<br />
| sensor_light_status=N<br />
| sensor_proximity_status=N<br />
| sensor_accelerometer_status=N<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=N<br />
| vol_key_status=Y<br />
| home_key_status=NA<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=?<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}</div>Birdzhanghttps://wiki.merproject.org/wiki/Template:Device_vinceTemplate:Device vince2018-04-30T14:22:14Z<p>Birdzhang: </p>
<hr />
<div>{{{{{function}}}<!-- don't touch this line --><br />
|link_kind={{{link_kind}}}<!-- don't touch this either. Used for generating links --><br />
| table_summary={{{table_summary}}}<br />
<!-- Y / HAL / ? / N / NA --><br />
| device_released=2017/12<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=N<br />
| camera_status=Y<br />
| sensor_light_status=N<br />
| sensor_proximity_status=N<br />
| sensor_accelerometer_status=N<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=N<br />
| vol_key_status=Y<br />
| home_key_status=Y<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=Y<br />
| usb_net_status=?<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}</div>Birdzhanghttps://wiki.merproject.org/wiki/Template:Device_vinceTemplate:Device vince2018-04-27T02:09:02Z<p>Birdzhang: </p>
<hr />
<div>{{{{{function}}}<!-- don't touch this line --><br />
|link_kind={{{link_kind}}}<!-- don't touch this either. Used for generating links --><br />
| table_summary={{{table_summary}}}<br />
<!-- Y / HAL / ? / N / NA --><br />
| device_released=2017/12<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=N<br />
| camera_status=Y<br />
| sensor_light_status=N<br />
| sensor_proximity_status=N<br />
| sensor_accelerometer_status=N<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=N<br />
| vol_key_status=Y<br />
| home_key_status=Y<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=?<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}</div>Birdzhanghttps://wiki.merproject.org/wiki/Adaptations/libhybris/Install_SailfishOS_for_VinceAdaptations/libhybris/Install SailfishOS for Vince2018-04-26T15:29:32Z<p>Birdzhang: /* ChangeLog */</p>
<hr />
<div>{{Hardware Adaptation<br />
| codename = Vince<br />
| vendor = Xiaomi<br />
| product = Redmi 5 Plus<br />
| screenshot = Sailfish-vince.jpg<br />
| sailfish_version = 2.1.4.13<br />
| last_update = 2018-04-18<br />
}}<br />
<br />
=== Hardware Support ===<br />
{{Hadktableheader}}<br />
{{device_vince|function=Hadktablerow}}<br />
|}<br />
<br />
=== Platform ===<br />
*Chipset Qualcomm MSM8953 Snapdragon 625<br />
*CPU Octa-core 2.0 GHz Cortex-A53<br />
*GPU Adreno 506<br />
<br />
=== ChangeLog ===<br />
'''2018-04-18'''<br />
* Init<br />
'''2018-04-20'''<br />
* 2.1.4.14 release, with camera fixed<br />
<br />
'''2018-04-26'''<br />
* with audio fixed, need to reboot after install<br />
<br />
=== What works ===<br />
* calls/SMS<br />
* camera<br />
* video<br />
* wifi<br />
* bt<br />
* GPS<br />
<br />
=== What's not ===<br />
* data<br />
* audio<br />
* sensors<br />
* fingerprint<br />
<br />
=== Downloads ===<br />
<br />
Last image you can get here http://images.devaamo.fi/sfe/vince/<br />
<br />
=== Steps to install ===<br />
!!!! BACKUP YOUR FILES FIRST!!!! <br />
<br />
* unlock bootloader, please follow http://www.miui.com/unlock<br />
<br />
* flash twrp recovery & format data partition (press and hold Volume down and Power key, boot to bootloader)<br />
fastboot flash recovery twrp-3.2.1-0-vince.img<br />
[ps: twrp can be found from https://dl.twrp.me/vince/]<br />
<br />
* flash zip with twrp<br />
press and hold Volume up and Power key, boot to recovery:<br />
lineage-14.1-20180304-UNOFFICIAL-vince.zip<br />
[ps: The cm14.1 package can be found from https://androidfilehost.com/?fid=818070582850497958]<br />
<br />
* reboot to lineageos, after init down, reboot to recovery<br />
for fixing sailfisos android_storage link(/data/media/0), this is only needed once<br />
<br />
* flash sailfishos zip with twrp<br />
sailfishos-vince-release-2.1.4.13-alpha7.zip<br />
<br />
* reboot<br />
<br />
=== Thanks ===<br />
* zhxt (helped me veeeeeeery much)<br />
* piggz (porter of mido)<br />
* Tingyichen (lineageos porter)<br />
* zamoroz (https://github.com/zamoroz)<br />
* all from #sailfishos-porters<br />
<br />
=== Report bus ===<br />
* https://github.com/Sailfish-On-Vince/issues</div>Birdzhanghttps://wiki.merproject.org/wiki/Template:Device_vinceTemplate:Device vince2018-04-26T15:28:00Z<p>Birdzhang: </p>
<hr />
<div>{{{{{function}}}<!-- don't touch this line --><br />
|link_kind={{{link_kind}}}<!-- don't touch this either. Used for generating links --><br />
| table_summary={{{table_summary}}}<br />
<!-- Y / HAL / ? / N / NA --><br />
| device_released=2017/12<br />
| linux_kernel=3.18.31<br />
| display_status=Y<br />
| touch_status=Y<br />
| led_status=Y<br />
| audio_status=Y<br />
| nfc_status=NA<br />
| bluetooth_status=Y<br />
| sms_status=Y<br />
| voice_status=Y<br />
| data_status=N<br />
| wlan_status=Y<br />
| hotspot_status=Y<br />
| gps_status=Y<br />
| camera_status=Y<br />
| sensor_light_status=N<br />
| sensor_proximity_status=N<br />
| sensor_accelerometer_status=N<br />
| sensor_gyroscope_status=N<br />
| sensor_magnetic_status=N<br />
| vol_key_status=Y<br />
| home_key_status=Y<br />
| vibration_status=Y<br />
| haptics_status=Y<br />
| power_status=Y<br />
| rtc_status=?<br />
| usb_net_status=?<br />
| usb_charging_status=Y<br />
| fm_radio_status=Y<br />
}}</div>Birdzhang