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.

Chapter 3
Install CM 11 M9 from http://download.cyanogenmod.org/get/jenkins/78753/cm-11-20140805-SNAPSHOT-M9-hammerhead.zip instead of CM 10.1 on your device and test the functionality as mentioned in HADK.

Chapter 4
cat < $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

Chapter 7&8
part of the packages that need build are in this repo... https://build.merproject.org/project/show/nemo:devel:hw:lge:hammerhead just add an extra repo to your .hks and save time

KSFL=$ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks MW_REPO=http://repo.merproject.org/obs/nemo:/devel:/hw:/lge:/hammerhead/sailfish_latest_armv7hl/ HA_REPO1="repo --name=adaptation1-$DEVICE-@RELEASE@ --baseurl=${MW_REPO}" sed -i -e "/^$HA_REPO.*$/a$HA_REPO1" $KSFL

Known Issues
ifconfig -a and look for the interface name through which Nexus 5 is connected to host sudo ifconfig  192.168.2.10 broadcast 192.168.2.255
 * 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 :

sed -i '/%post$/a sed -i \"s;WantedBy;RequiredBy;g\" \/lib\/systemd\/system\/system.mount' $ANDROID_ROOT/tmp/Jolla-@RELEASE@-$DEVICE-@ARCH@.ks
 * droid-hal-init is sometimes started before /system is mounted and causes race condition with property service. Symptom: you are stuck with a google logo:
 * this PR contributes to it, but doesn't fix completely: https://github.com/mer-hybris/droid-hal-device/pull/38
 * add these in the %post of the .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


 * With all them workarounds above, some boots might still stuck nastily with journal looking only like this: https://pastee.org/6jf5x

A workaround for this was implemented... just setup your time at the first boot zypper rr adaptation0 xt9 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
 * 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:
 * wireless hotspot is not working... wip? Workaround use usb tethering

be sure on host the host you have a gateway setup to 192.168.2.1 and a dns eg. 8.8.8.8 zypper in usb-moded-connection-sharing-android-config
 * if usb-moded is installed you can use the sailfish os usb tethering (unfortunately is known not to work, fixed the package are in MW_REPO)

rpm -e usb-moded rpm -e usb-moded-defaults rpm -e usb-moded-diagnostics-config rpm -e usb-moded-developer-mode
 * 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 lately). In this case remove them with

rpm -qa | grep usb-moded usb-moded-pc-suite-mode-android-0.80-1.11.1.armv7hl usb-moded-connection-sharing-android-config-0.80-1.11.1.armv7hl usb-moded-developer-mode-android-0.80-1.11.1.armv7hl usb-moded-diagnostics-config-0.80-1.11.1.armv7hl usb-moded-0.70-134.1.Nemo.armv7hl (ask phdeswer in the irc channel) usb-moded-defaults-android-0.80-1.11.1.armv7hl usb-moded-diag-mode-android-0.80-1.11.1.armv7hl
 * note that if usb-moded are installed ip of the device is 192.168.2.15, without them 192.168.2.1
 * note that if you want a working usb-moded you may want to install the following rather than the defaults pulled


 * while wireless connects to wlan unfortunately after reboot does not connect anymore to the configures network. Workaround. re-add the network

Failing Tests
Segmentation fault Segmentation fault Segmentation fault
 * test_camera
 * test_egl
 * test_glesv2

width: 1080 height: 1920 Segmentation fault
 * test_hwcomposer

Segmentation fault
 * test_input

Starting test_nfc. Finding NFC hardware module. test_nfc: test_nfc.c:156: testNfc: Assertion `hwModule != ((void *)0)' failed. Aborted
 * test_nfc

Segmentation fault
 * test_sensors

Segmentation fault
 * test_ui

Segmentation fault
 * test_sf

Passing Tests
[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_egl_configs
 * test_vibrator
 * test_gps (takes some time to lock), doesn't work in UI yet: https://bugs.nemomobile.org/show_bug.cgi?id=723

nmea (50):     $GPGSV,6,6,23,85,16,172,,71,79,298,,72,28,246,*42 *** location callback flags: 63 latitude:      53.323554 longtide:      -6.252064 accuracy:      47.000000 utc:   -1817944088 *** nmea info timestamp:     -1817945278 nmea (56):     $GPGSA,A,3,01,04,06,12,13,17,20,23,32,,,,1.9,1.6,0.9*32 *** nmea info timestamp:     -1817945277 nmea (40):     $GPVTG,109.7,T,109.7,M,1.0,N,1.8,K,A*2B *** nmea info timestamp:     -1817945277 nmea (73):     $GPRMC,221529,A,5319.413254,N,00615.123869,W,1.0,109.7,010814,0.0,E,A*0A *** nmea info timestamp:     -1817945276 nmea (72):     $GPGGA,221529,5319.413254,N,00615.123869,W,1,09,1.6,-23.0,M,48.0,M,,*4F

Hardware Support
For current status of hardware support refer to https://wiki.merproject.org/wiki/Adaptations/libhybris

Scripts
https://github.com/dmt4/sfa-mer
 * an automatic way to build/rebuild all the image one can find here (ping dmt or alin on irc if you are in trouble with this):

Help
If you need any help join us on #sailfishos-porters on irc.freenode.net Check also the buglist https://bugs.nemomobile.org/buglist.cgi?quicksearch=hammerhead