The Mer Wiki now uses your Mer user account and password (create account on https://bugs.merproject.org/)
Building Sailfish OS for Nexus 5
Download the HADK documentation from http://releases.sailfishos.org/sfa-ea/2014-07-21_SailfishOSHardwareAdaptationDevelopmentKit.pdf
This document mentions configurations required to build Sailfish OS for Nexus 5 (hammerhead). HADK should be followed as it is and this document should be referred only to learn about build configurations specific to Nexus 5.
HADK mentions references to CM 10.1 while Nexus 5 is based on CM 11. All the steps carried out in HADK should be in context of CM 11 only.
Contents |
Chapter 3
Install CM 11 instead of CM 10.1 on your device and test the functionality as mentioned in HADK.
Chapter 4
cat <<EOF > $HOME/.hadk.env export MER_ROOT="[insert value of your choosing]" export ANDROID_ROOT="$MER_ROOT/android/droid" export VENDOR="lge" export DEVICE="hammerhead" EOF cat <<'EOF' >> $HOME/.mersdkubu.profile function hadk() { source $HOME/.hadk.env${1:+.$1}; echo "Env setup for $DEVICE"; } export PS1="HABUILD_SDK [\${DEVICE}] $PS1" hadk EOF cat <<'EOF' >> $HOME/.mersdk.profile function hadk() { source $HOME/.hadk.env${1:+.$1}; echo "Env setup for $DEVICE"; } hadk EOF
Chapter 5
hadk sudo mkdir -p $ANDROID_ROOT sudo chown -R $USER $ANDROID_ROOT cd $ANDROID_ROOT repo init -u git://github.com/mer-hybris/android.git -b hybris-11.0 repo sync
Known Issues
- dhcp assigns wrong ip address to host or not at all and it has to be fixed manually to be able to telnet to 2323 :
ifconfig -a and look for the interface name through which Nexus 5 is connected to host sudo ifconfig <interface_name> 192.168.2.10 broadcast 192.168.2.255
- Lipstick crashes at startup if debugfs is mounted
- TMP!workaround into your .ks %post section:
rm -f /lib/systemd/system/sysinit.target.wants/sys-kernel-debug.mount
- Lipstick crashes if qt5-qtsensors-plugin-sensorfw package is installed.
- Workaround: zypper rm qt5-qtsensors-plugin-sensorfw
- the two issues above can be worked-around at image creation time by the following changes in the .ks file :
sed -i "/%post$/a rm -f \/lib\/systemd\/system\/sysinit.target.wants\/sys-kernel-debug.mount" $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sed -i "/%post$/a rm -f \/usr\/lib\/qt5\/plugins\/sensors\/libqtsensors_sensorfw.so" $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks
- Qt5 QPA hwcomposer plugin does not handle virtual displays correctly and causes UI to tear frequently.
- Patch was merged \o/ http://review.cyanogenmod.org/#/c/67489/ on 22nd July. Wait for it to hit nightlies (BUT! we're having issues testing nightlies - help debugging much appreciated) then sideload it, followed by sailfish os .zip again; alternatively just DIY that patch yourself locally, and then also use https://github.com/siteshwar/qt5-qpa-hwcomposer-plugin/commits/hammerhead
- or use master https://github.com/mer-hybris/qt5-qpa-hwcomposer-plugin/commits/master - currently with tearing and UI freeze - to fix this, it needs some fence handling, contact situ or morphis on #sailfishos-porters
- droid-hal-init is sometimes started before /system is mounted and causes problems with property service. (Should be fixed by https://github.com/mer-hybris/droid-hal-device/pull/38)
- Correct time is not shown on booting. ( Currently being discussed at https://www.mail-archive.com/linux-arm-msm@vger.kernel.org/msg09852.html)
- you will discover that any zypper operation is slow like hell. Cause two repos that shall not be there adaptation0 and xt9. Workaround: remove them:
zypper rr adaptation0 xt9
- wireless hotspot is not working... wip? Workaround use usb tethering
devel-su echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/iptables -t nat -A POSTROUTING -o rmnet0 -j MASQUERADE /sbin/iptables -A FORWARD -i rmnet0 -o rndis0 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -i rndis0 -o rmnet0 -j ACCEPT
be sure on host the host you have a gateway setup to 192.168.2.1 and a dns eg. 8.8.8.8
- if usb-moded is installed you can use the sailfish os usb tethering (unfortunately is known not to work, fixed the package soon in repo)
zypper in usb-moded-connection-sharing-android-config
- mp3s do not play (google is your friend here.)
- the usb-moded package is removed so you will not get the phone connecting via usb as storage. Workaround use telnet or ssh
- usb-moded may cause issues google logo stucked on screen for more tha 4 min... (have not seen them laterly). In this case remove them with
rpm -e usb-moded rpm -e usb-moded-defaults rpm -e usb-moded-diagnostics-config rpm -e usb-moded-developer-mode
- note that if usb-moded are installed ip of the device is 192.168.2.15, without them 192.168.2.1
- dmesg spammed by [36025.727614] init: process 'time_daemon' killing any children in process group
no idea wip?
- boot races caused by funny rules in systemd... Sign: you are stuck with a google logo... Workaround.
add these in the %post of the .ks
sed -i '/%post$/a sed -i \"s;WantedBy;RequiredBy;g\" \/lib\/systemd\/system\/system.mount' $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks
sed -i '/%post$/a echo \"RequiredBy=droid-hal-init.service\" >> \/lib\/systemd\/system\/local-fs.target' $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sed -i '/%post$/a echo \"[Install]\" >> \/lib\/systemd\/system\/local-fs.target' $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks
Failing Tests
- test_camera
Segmentation fault
- test_egl
Segmentation fault
- test_glesv2
Segmentation fault
- test_gps
[root@Jolla nemo]# test_gps *** setup signal handler *** get gps interface *** device info id = gps name = loc_api GPS Module author = Qualcomm USA, Inc. *** init gps interface *** set capabilities capability is 00000033 ** Creating thread: 'Loc_hal_worker' (start=0xb6c44ad9, arg=0x13e6208) ** After thread_create: 'Loc_hal_worker', error=0 (start=0xb6c44ad9, arg=0x13e6208) *** setting positioning mode *** start gps track *** gps tracking started *** tracking.... **** Thread wrapper start (start=0xb6c44ad9, arg=0x13e6208) **** Diag_LSM_Init: Failed to open handle to diag driver, error = 2*** status callback *** session begin *** status callback *** engine on *** status callback *** session begin *** nmea info timestamp: 1741630708 nmea (29): $GPGSA,A,1,,,,,,,,,,,,,,,*1E *** nmea info
- test_hwcomposer
width: 1080 height: 1920 Segmentation fault
- test_input
Segmentation fault
- test_nfc
Starting test_nfc. Finding NFC hardware module. test_nfc: test_nfc.c:156: testNfc: Assertion `hwModule != ((void *)0)' failed. Aborted
- test_sensors
Segmentation fault
- test_ui
Segmentation fault
- test_sf
Segmentation fault
Passing Tests
- test_egl_configs
- test_vibrator
Hardware Support
For current status of hardware support refer to https://wiki.merproject.org/wiki/Adaptations/libhybris
Help
If you need any help join us on #sailfishos-porters on irc.freenode.net
Scripts
- rebuilding the image. Use at your own risk. This script rebuilds a mic image. You have to sync the repo by hand. It boils down chapter 7 and 8 and assumes you have run and executed them once. If you have issues ping alin in the irc channel from above.
dump the code below in $MER_ROOT in rebuild_mic for example
chmod 755 rebuild_mic
then just run it once in mer sdk. Script content below:
#!/usr/bin/env bash if [ "$#" -eq "1" ] ; then dest=$1 else echo "Syntax: `basename $0` <destination folder>" echo "or `basename $0` <mernexus5>" exit 1 fi export RELEASE=1.0.8.19 export EXTRA_NAME=-ame-$(date +%d%m%Y%H:%M) pushd $ANDROID_ROOT mkdir -p $ANDROID_ROOT/droid-local-repo/$DEVICE rm -f $ANDROID_ROOT/droid-local-repo/$DEVICE/droid-hal-*rpm mb2 -t $VENDOR-$DEVICE-armv7hl -s rpm/droid-hal-device.inc build mb2 -t $VENDOR-$DEVICE-armv7hl -s rpm/droid-hal-$DEVICE.spec build mb2 -t $VENDOR-$DEVICE-armv7hl -s hybris/droid-hal-configs/rpm/droid-hal-configs.spec build mv RPMS/*${DEVICE}* $ANDROID_ROOT/droid-local-repo/$DEVICE createrepo $ANDROID_ROOT/droid-local-repo/$DEVICE isThere=$(sb2 -t $VENDOR-$DEVICE-armv7hl -R -msdk-install ssu lr | grep "file://$ANDROID_ROOT/droid-local-repo/$DEVICE") if [ "x$isThere" == "x" ]; then sb2 -t $VENDOR-$DEVICE-armv7hl -m sdk-install -R ssu ar local-$DEVICE-hal file://$ANDROID_ROOT/droid-local-repo/$DEVICE fi sb2 -t $VENDOR-$DEVICE-armv7hl -m sdk-install -R zypper ref rpm/helpers/process_patterns.sh popd HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@" sed -e "s|^$HA_REPO.*$|$HA_REPO --baseurl=file://$ANDROID_ROOT/droid-local-repo/$DEVICE|" $ANDROID_ROOT/installroot/usr/share/kickstarts/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks > $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks HA_REPO="repo --name=adaptation0-$DEVICE-@RELEASE@" HA_REPO1="repo --name=adaptation1-$DEVICE-@RELEASE@ --baseurl=http://repo.merproject.org/obs/home:/siteshwar:/hw:/hammerhead/sailfish_1.0.8.19_armv7hl/" sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sed -i "/%post$/a rm -f \/lib\/systemd\/system\/sysinit.target.wants\/sys-kernel-debug.mount" $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sed -i "/%post$/a rm -f \/usr\/lib\/qt5\/plugins\/sensors\/libqtsensors_sensorfw.so" $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sed -i '/%post$/a sed -i \"s;WantedBy;RequiredBy;g\" \/lib\/systemd\/system\/system.mount' $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sed -i '/%post$/a echo \"RequiredBy=droid-hal-init.service\" >> \/lib\/systemd\/system\/local-fs.target' $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sed -i '/%post$/a echo \"[Install]\" >> \/lib\/systemd\/system\/local-fs.target' $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks sudo mic create fs --arch armv7hl --tokenmap=ARCH:armv7hl,RELEASE:$RELEASE,EXTRA_NAME:$EXTRA_NAME --record-pkgs=name,url --outdir=sfa-$DEVICE-ea-$RELEASE$EXTRA_NAME --pack-to=sfa-$DEVICE-ea-$RELEASE$EXTRA_NAME.tar.bz2 $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks mkdir -p $dest cp $(pwd)/sfa-hammerhead-ea-${RELEASE}${EXTRA_NAME}/sailfishos-hammerhead-release-${RELEASE}${EXTRA_NAME}.zip $dest/