Jolla Phone 2026 boot loop

OS VERSION: 5.2.0.16 (now at version 5.2.0.11 after a factory reset)
HARDWARE: Jolla Phone 2026
UI LANGUAGE: German

DESCRIPTION:
After two days of using the phone, the JP 2026 restarted itself without any input from me.

Since then, it’s been stuck in a reboot loop. I only briefly see the Jolla logo, then it restarts.
As far as I can remember, the Sailfish OS logo should appear afterward, but it doesn’t get that far during startup.

Before this, I restarted the phone several times without any problems. The last change was an update to version 5.2.0.16 yesterday morning, July 31st.
I haven’t made any modifications to the system, installed a patch manager, or anything like that.

What I’ve already tried:
* Restarting several times
* Removing the battery, reinserting it after about 20 minutes, and starting the phone
* Starting recovery mode and running a file system check (no errors)
* Starting recovery mode and resetting to factory state (Recovery looks fine, but it wasn’t the solution.)

I’ve collected log files, and a kernel crash is recorded in the pstore. Here are the collected files.
journal.targz (894.9 KB)
console-ramoops-0.targz (295.4 KB)

Unfortunately, the JP 2026 is still stuck in a boot loop.

Any suggestions what i can do?

4 Likes

Try this:

And look in the log whether we can see what fails exactly.

As journalctl does not seem to be available in recovery, you’ll have to copy the journal files to a Linux computer with systemd to read them.

7 Likes

thank’s for the hint, i will try it.

i have managed to get persistent logging from systemd and i had a look at it, but i did not find out what causes the boot error.

it would be very kind if you could have a look at it, maybe you can guide me in the right direction

i attached the logfiles as tar.gz at this post.
journal.targz (467.6 KB)

Everything points to a hardware failure, youth defects. I guess you should request a replacement (or repair).

First if all, send that file (or link) to Jolla zendesk, maybe they can glance something from it. If it indeed points to hardware issues.

Meanwhile, I see that ohmd fails to start. That’s quite critical I guess:

nemo@PGJolla26-I:~/Downloads/journal $ journalctl --directory=. -ax _TRANSPORT=journal -e -u ohmd
~
~
~
-- Logs begin at Fri 2026-07-03 17:53:56 CEST, end at Fri 2026-07-03 17:54:00 CEST. --
Jul 03 17:53:59 localhost systemd[1]: Starting ohm daemon for resource policy management...
-- Subject: Unit ohmd.service has begun start-up
-- Defined-By: systemd
-- Support: https://forum.sailfishos.org/
--
-- Unit ohmd.service has begun starting up.
Jul 03 17:53:59 localhost systemd[1446]: ohmd.service: Failed to set up mount namespacing: No such file or directory
Jul 03 17:53:59 localhost systemd[1446]: ohmd.service: Failed at step NAMESPACE spawning /usr/sbin/ohmd: No such file or directory
-- Subject: Process /usr/sbin/ohmd could not be executed
-- Defined-By: systemd
-- Support: https://forum.sailfishos.org/
--
-- The process /usr/sbin/ohmd could not be executed and failed.
--
-- The error number returned by this process is 2.
Jul 03 17:53:59 localhost systemd[1]: ohmd.service: Main process exited, code=exited, status=226/NAMESPACE
Jul 03 17:53:59 localhost systemd[1]: ohmd.service: Failed with result 'exit-code'.
Jul 03 17:53:59 localhost systemd[1]: Failed to start ohm daemon for resource policy management.
-- Subject: Unit ohmd.service has failed
-- Defined-By: systemd
-- Support: https://forum.sailfishos.org/
--
-- Unit ohmd.service has failed.
--
-- The result is RESULT.

Can you go into recovery mode again, and see if the ohmd binary exists?

 /usr/sbin/ohmd

on the system partition.

If you know how to use the chroot command, you could try to chroot into the system partition and do:

  • ldd /usr/sbin/ohmd
  • rpm -q ohmd

amd post the output.

7 Likes

I have the suspicion that your update didn’t finish properly.

Could you send the following files (also from the system partition)

  • /var/log/zypp/history
7 Likes

First of all, thank you so much for taking the time to help me!

here is the output of the commands

markus@markus-linux:~$ ssh root@10.42.66.66
root@10.42.66.66’s password:
recovery:~ # mkdir /mnt/root
recovery:~ # mount /dev/mapper/sailfish-root /mnt/root
recovery:~ # mount /dev/mapper/sailfish-home /mnt/root/home

/ # ls -l /usr/sbin/ohmd
-rwxr-xr-x 1 root root 69064 Jun 4 2026 /usr/sbin/ohmd

/ # ldd /usr/sbin/ohmd
linux-vdso.so.1 (0x0000007f9cfac000)
/usr/lib64/libtls-padding.so (0x0000007f9cf40000)
libohmplugin.so.2 => /usr/lib64/libohmplugin.so.2 (0x0000007f9cf10000)
libdbus-glib-1.so.2 => /usr/lib64/libdbus-glib-1.so.2 (0x0000007f9cec0000)
libgobject-2.0.so.0 => /usr/lib64/libgobject-2.0.so.0 (0x0000007f9ce30000)
libdbus-1.so.3 => /usr/lib64/libdbus-1.so.3 (0x0000007f9cdb0000)
libgmodule-2.0.so.0 => /usr/lib64/libgmodule-2.0.so.0 (0x0000007f9cd80000)
libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x0000007f9cc00000)
libsimple-trace.so.0 => /usr/lib64/libsimple-trace.so.0 (0x0000007f9cbd0000)
libc.so.6 => /lib64/libc.so.6 (0x0000007f9ca00000)
/lib/ld-linux-aarch64.so.1 (0x0000007f9cf70000)
libgio-2.0.so.0 => /usr/lib64/libgio-2.0.so.0 (0x0000007f9c7f0000)
libffi.so.8 => /usr/lib64/libffi.so.8 (0x0000007f9c7b0000)
libsystemd.so.0 => /usr/lib64/libsystemd.so.0 (0x0000007f9c6f0000)
libpcre2-8.so.0 => /usr/lib64/libpcre2-8.so.0 (0x0000007f9c630000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000007f9c5f0000)
libz.so.1 => /usr/lib64/libz.so.1 (0x0000007f9c5b0000)
libselinux.so.1 => /usr/lib64/libselinux.so.1 (0x0000007f9c560000)
liblzma.so.5 => /usr/lib64/liblzma.so.5 (0x0000007f9c510000)
libcap.so.2 => /usr/lib64/libcap.so.2 (0x0000007f9c4e0000)
libmount.so.1 => /usr/lib64/libmount.so.1 (0x0000007f9c450000)
libgcrypt.so.20 => /usr/lib64/libgcrypt.so.20 (0x0000007f9c350000)
libblkid.so.1 => /usr/lib64/libblkid.so.1 (0x0000007f9c2d0000)
libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x0000007f9c280000)

/ # rpm -q ohmd
package ohmd is not installed

/ # cat /var/log/zypp/history
2026-07-03 14:30:04|radd |adaptation-common-jp2601-5.2.0.11|https://releases-internal.jollamobile.com/releases/5.2.0.11/jolla-hw/adaptation-common/aarch64/|
2026-07-03 14:30:05|radd |adaptation0-jp2601-5.2.0.11|https://releases-internal.jollamobile.com/releases/5.2.0.11/jolla-hw/adaptation-jolla-jp2601/aarch64/|
2026-07-03 14:30:06|radd |apps-5.2.0.11|https://releases-internal.jollamobile.com/jolla-apps/5.2.0.11/aarch64/|
2026-07-03 14:30:07|radd |hotfixes-5.2.0.11|https://releases-internal.jollamobile.com/releases/5.2.0.11/hotfixes/aarch64/|
2026-07-03 14:30:08|radd |jolla-5.2.0.11|https://releases-internal.jollamobile.com/releases/5.2.0.11/jolla/aarch64/|
2026-07-03 14:30:09|radd |features_5.2.0.11_xt9_aarch64|https://releases-internal.jollamobile.com/features/5.2.0.11/xt9/aarch64/|
2026-07-03 14:30:10|radd |features_5.2.0.11_sailfish-eas_aarch64|https://releases-internal.jollamobile.com/features/5.2.0.11/sailfish-eas/aarch64/|
2026-07-03 14:30:11|radd |features_5.2.0.11_appsupport_aarch64|https://releases-internal.jollamobile.com/features/5.2.0.11/appsupport/aarch64/|
2026-07-03 14:30:12|radd |features_5.2.0.11_customers_jolla_aarch64|https://releases-internal.jollamobile.com/features/5.2.0.11/customers/jolla/aarch64/|
2026-07-03 14:34:51|rremove|features_5.2.0.11_appsupport_aarch64|
2026-07-03 14:34:51|rremove|features_5.2.0.11_customers_jolla_aarch64|
2026-07-03 14:34:51|rremove|features_5.2.0.11_sailfish-eas_aarch64|
2026-07-03 14:34:51|rremove|features_5.2.0.11_xt9_aarch64|

Yea but I meant the ohmd binary on the non-recovery root.

I.e. /mnt/root/usr/sbin/ohmd

I’m not sure this will work, but try

mount -o bind /dev /mnt/root/dev
mount -o bind /dev/pts /mnt root/dev/pts
mount -o bind /dev/shm /mnt/root/dev/shm 
mount -o bind /proc /mnt/root/proc
mount -o bind /run /mnt/root/run

chroot /mnt/root /bin/sh

after mounting and before the ldd and rpm stuff.
Then your session should be “within” the system root and you can issue commands normally..

Pretty sure you will find that ohmd does not exist on the system root.

4 Likes

ok, i understand what you mean.
i started a recovery session and executed the following commands.

recovery:\~ # mount /dev/mapper/sailfish-root /mnt/root
recovery:\~ # mount /dev/mapper/sailfish-home /mnt/root/home
recovery:\~ # ls -l /mnt/root/usr/sbin/ohmd
-rwxr-xr-x    1 root     root         69064 Jun  4  2026 /mnt/root/usr/sbin/ohmd
recovery:\~ # mount -o bind /dev /mnt/root/dev
recovery:\~ # mount -o bind /dev/pts /mnt/root/dev/pts
recovery:\~ # mount -o bind /dev/shm /mnt/root/dev/shm
mount: mounting /dev/shm on /mnt/root/dev/shm failed: No such file or directory
recovery:\~ # mount -o bind /proc /mnt/root/proc
recovery:\~ # mount -o bind /run /mnt/root/run

after that

recovery:\~ # chroot /mnt/root /bin/sh
/ #
/ #  /usr/sbin/ohmd
/ # ls -l /usr/sbin/ohmd
-rwxr-xr-x    1 root     root         69064 Jun  4  2026 /usr/sbin/ohmd
/ #
/ # ldd /usr/sbin/ohmd
linux-vdso.so.1 (0x0000007fb2edc000)
/usr/lib64/libtls-padding.so (0x0000007fb2e70000)
libohmplugin.so.2 => /usr/lib64/libohmplugin.so.2 (0x0000007fb2e40000)
libdbus-glib-1.so.2 => /usr/lib64/libdbus-glib-1.so.2 (0x0000007fb2df0000)
libgobject-2.0.so.0 => /usr/lib64/libgobject-2.0.so.0 (0x0000007fb2d60000)
libdbus-1.so.3 => /usr/lib64/libdbus-1.so.3 (0x0000007fb2ce0000)
libgmodule-2.0.so.0 => /usr/lib64/libgmodule-2.0.so.0 (0x0000007fb2cb0000)
libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x0000007fb2b30000)
libsimple-trace.so.0 => /usr/lib64/libsimple-trace.so.0 (0x0000007fb2b00000)
libc.so.6 => /lib64/libc.so.6 (0x0000007fb2930000)
/lib/ld-linux-aarch64.so.1 (0x0000007fb2ea0000)
libgio-2.0.so.0 => /usr/lib64/libgio-2.0.so.0 (0x0000007fb2720000)
libffi.so.8 => /usr/lib64/libffi.so.8 (0x0000007fb26e0000)
libsystemd.so.0 => /usr/lib64/libsystemd.so.0 (0x0000007fb2620000)
libpcre2-8.so.0 => /usr/lib64/libpcre2-8.so.0 (0x0000007fb2560000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000007fb2520000)
libz.so.1 => /usr/lib64/libz.so.1 (0x0000007fb24e0000)
libselinux.so.1 => /usr/lib64/libselinux.so.1 (0x0000007fb2490000)
liblzma.so.5 => /usr/lib64/liblzma.so.5 (0x0000007fb2440000)
libcap.so.2 => /usr/lib64/libcap.so.2 (0x0000007fb2410000)
libmount.so.1 => /usr/lib64/libmount.so.1 (0x0000007fb2380000)
libgcrypt.so.20 => /usr/lib64/libgcrypt.so.20 (0x0000007fb2280000)
libblkid.so.1 => /usr/lib64/libblkid.so.1 (0x0000007fb2200000)
libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x0000007fb21b0000)
/ # rpm -q ohmd
package ohmd is not installed

seems that the ohmd package is missing.

is it possible to install this package as chroot or in recovery session and how can i do that?

If all the packages didn’t install correctly during the update, the packages might be still in the /home/.pk-zypp-dist-upgrade-cache/ and should be installable with rpm (or zypper if you have it installed).

4 Likes

my fault, the package containing ohmd is called ohm.

But as the binary is there, there must be something else missing.

Maybe this here can help?

Of course this is outdated regarding links and versions.

In general routing internet to the recovery shell and using pkcon (better: zypper, try to fetch manually)

Thanks for the suggestion.

the directory home is nearly empty, i think because of the factory reset what i have done at the beginning @ recovery mode

as chroot:

/ # ls -l /home/
total 20
drwx------    4 appsuppo appsuppo      4096 Jul  3 14:35 appsupport-root
drwx------    2 root     root         16384 Jul  3 14:30 lost+found
/ # ls -l /home/.
../           ./            .zypp-cache/
/ # ls -l /home/.zypp-cache/
total 4
drwxr-xr-x    3 root     root          4096 Jul  3 14:30 solv

Then the only options are to contact Jolla through Zendesk or do what @peterleinchen suggested and route the Internet to your recovery shell, try to install zypper and then use that to fix the issues.

1 Like

Oh wait…

You already tried a factory reset from recovery shell?!!

Then I guess all our tries to help you manually get out of this are just waste of time :disappointed_face: (as we have no idea in which state the system is after the reset. (nevertheless I would even try harder and continue :wink:…)

I would try the reset once again, follow it exactly, but if it does not boot contact Jolla@Zendesk (and ping Jolla folks here as well).

Afaik the C2 we could as well not reset/flash for the first months but this was not communicated for the JP2601.

Just for shits and giggles, can you try to (again in the chroot or in the system root mount) edit /usr/lib/systemd/system/ohmd.service and comment out (#) all the sandboxing stuff:

# We need access to /run/user/X/dbus to connect to user session bus, hence
# we cannot use ProtectHome but we'll deny access to /root and /home separately
ProtectSystem=full
InaccessibleDirectories=/root /home
ReadWriteDirectories=/var/lib/ohm /run/user
ReadOnlyDirectories=/

And boot again.

It seems ohmd itself is there, but there’s those “mount namespace” errors in the logs.

If it fails again, please send another journal file.

3 Likes

I think the new JP2601 was designed from the beginning to be user reflashable, but Jolla hasn’t released any images yet.

i do this :slight_smile:
i comment the following lines out

#ProtectSystem=full
#InaccessibleDirectories=/root /home
#ReadWriteDirectories=/var/lib/ohm /run/user
#ReadOnlyDirectories=/

the JP26 hangs in boot loop.

i attached new journal log form the last reboots
journal.targz (1.5 MB)

Jul 03 16:10:55 localhost kernel: BOOTPROF:     13835.369570:initcall: init_module [camera_wpe_isp6s]    15.674692ms
Jul 03 16:10:55 localhost systemd-modules-load[1456]: Inserted module 'camera_wpe_isp6s'
Jul 03 16:10:55 localhost systemd[1]: Started udev Kernel Device Manager.
Jul 03 16:10:55 localhost systemd-modules-load[1456]: Inserted module 'uload_ind'
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_Init] +
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_Init] g_platform_id = 0x6858
Jul 03 16:10:55 localhost kernel: camera-mem soc:cam_mem: Adding to iommu group 2
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_probe] +
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_RegCharDev] +
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_RegCharDev] -
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_probe] dma_set_mask_and_coherent(cam_mem, DMA_BIT_MASK(34))
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_probe] -
Jul 03 16:10:55 localhost kernel: [CAM_MEM][cam_mem_Init] -
Jul 03 16:10:55 localhost systemd-modules-load[1456]: Inserted module 'camera_mem'
Jul 03 16:10:55 localhost systemd-modules-load[1456]: Inserted module 'archcounter_timesync'
Jul 03 16:10:55 localhost kernel: [ISP][cam_qos_init] platform id(0x6858)
Jul 03 16:10:55 localhost kernel: [ISP][cam_qos_probe] CAM QOS probe.
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] - E. ISP driver probe.
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] device idx= 0.
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] G_u4DevNodeCt=1, devnode(camisp_legacy), map_addr=0xffffffc08bfe0000
Jul 03 16:10:55 localhost kernel: Unable to handle kernel write to read-only memory at virtual address ffffff800d1d1400
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] No IRQ!!: G_u4DevNodeCt=1, devnode(camisp_legacy), irq=0
Jul 03 16:10:55 localhost kernel: Mem abort info:
Jul 03 16:10:55 localhost kernel: [ISP][ISP_add_device_link] larb_num: 1; (1, -2)
Jul 03 16:10:55 localhost kernel:   ESR = 0x000000009600004f
Jul 03 16:10:55 localhost kernel: [ISP][ISP_add_device_link] camisp_legacy gets larb_id=13
Jul 03 16:10:55 localhost kernel:   EC = 0x25: DABT (current EL), IL = 32 bits
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] - X. ISP driver probe.
Jul 03 16:10:55 localhost kernel:   SET = 0, FnV = 0
Jul 03 16:10:55 localhost kernel: camera-isp 1a030000.cam1_legacy: Adding to iommu group 2
Jul 03 16:10:55 localhost kernel:   EA = 0, S1PTW = 0
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] - E. ISP driver probe.
Jul 03 16:10:55 localhost kernel:   FSC = 0x0f: level 3 permission fault
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] device idx= 7.
Jul 03 16:10:55 localhost kernel: Data abort info:
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] G_u4DevNodeCt=2, devnode(cam1_legacy), map_addr=0xffffffc08e788000
Jul 03 16:10:55 localhost kernel:   ISV = 0, ISS = 0x0000004f, ISS2 = 0x00000000
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] G_u4DevNodeCt=2, devnode(cam1_legacy), irq=506, ISR: cam1_legacy
Jul 03 16:10:55 localhost kernel:   CM = 0, WnR = 1, TnD = 0, TagAccess = 0
Jul 03 16:10:55 localhost kernel: [ISP][ISP_add_device_link] larb_num: 1; (1, -2)
Jul 03 16:10:55 localhost kernel:   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
Jul 03 16:10:55 localhost kernel: [ISP][ISP_add_device_link] cam1_legacy gets larb_id=16
Jul 03 16:10:55 localhost kernel: swapper pgtable: 4k pages, 39-bit VAs, pgdp=0000000042403000
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] - X. ISP driver probe.
Jul 03 16:10:55 localhost kernel: [ffffff800d1d1400] pgd=180000033fedf003, p4d=180000033fedf003, pud=180000033fedf003, pmd=180000033fe88003, pte=006000004d1d1f87
Jul 03 16:10:55 localhost kernel: [ISP][ISP_probe] - E. ISP driver probe.
Jul 03 16:10:55 localhost kernel: Internal error: Oops: 000000009600004f [#1] PREEMPT SMP
-- Boot 422f6edeaab7452186b47bf6c640eaf2 --

@avhakola and @peterleinchen

maybe we find i way to bring it back… but yes, i think i will contact Jolla@Zendesk coming week.

Perhaps a image to flash the JP26 already exists, or I need to send the JP26 back to Jolla. We will see.

1 Like