This page describes the basis of the AsteroidOS’ boot process. It’s focused on the LG G Watch but it should be similar on most other Android watches.
The first component loaded by the LG G Watch is the bootloader, this component is proprietary and can’t be modified, by default it is locked and only allows to boot Android, but we can access it by swiping the screen from top left to bottom right when booting up or with the “adb reboot bootloader” from a PC connected to a running Android or AsteroidOS instance with adb mode enabled.
This bootloader supports the “fastboot” protocol which is also the name of the command used on the computer to communicate with the bootloader. Fastboot allows to unlock the bootloader and then to flash partitions remotely and boot selected kernels. The bootloader can load three kernels, the one flashed on the BOOT partition, the one flashed on the RECOVERY partition and one sent via usb with the “fastboot boot boot.img” command. Kernels are stored in the boot.img format which is a concatenation of a kernel (sometimes with device tree) and an initramdisk. The boot.img format can be packed or unpacked with the mkbootimg and unmkbootimg tools. The AsteroidOS’s kernel is a slightly modified Android Kernel with, for example, a backported Bluetooth subsystem. The AsteroidOS’s ramdisk mostly load the init program of the rootfs which is systemd by default.
Systemd loads many components like
The default initramfs has a section to enable adbd on the watch before booting into the rootfs. You can enable it by appending
debug-ramdisk to the boot kernel’s parameters for example with fastboot -c. When you boot the watch, you will be able to access a command line on the ramdisk with
If you see the AsteroidOS logo (even for a split second), the watch is able to boot into the rootfs and launch systemd.
Logs are normally stored in a tmpfs filesystem which is lost whenever the watch is rebooted. To disable the tmpfs mount, first mount the sdcard card containing the rootfs, and then the rootfs:
# . /machine.conf # mkdir /sdcard /rfs # mount /dev/$sdcard_partition /sdcard # mount -o loop /sdcard/media/0/asteroidos.ext4 /rfs
You can then disable the
/var/volatile tmpfs mount and enable systemd journal logging (/var/log is a symlink to /var/volatile/log):
# sed -i '/volatile/d' /rfs/etc/fstab # mkdir /rfs/var/log/journal
Once you reboot into the rootfs partition (it’ll fail again), you can hop back into the
adb shell and read the journal:
# chroot /rfs /bin/journalctl