This update is the fourteenth in a series of regular updates on the state of the project.

Only changes that have been accepted and merged in Mobile NixOS are chronicled here. There’s always more work currently in-progress.

Notable changes

Buckle-up, this month there’s a lot to say.

Go go all USB gadget modes

A couple changes this month are related to USB gadget mode. This is the name of the feature allowing a device (your cellphone) to be used as a USB device on your computer.

Target disk mode

This is not a fresh feature, the implementation pull request was opened in March 2020.

Once a device is booted with this example system, the device’s internal storage is made available over USB, as if it was a USB mass storage device.

The feature is limited to select devices, as it can be easily misused. The pine64-pinephone and asus-dumo devices are configured for this feature. It is limited as the block device to export has to be configured on a per-device basis. A further reason is the following:


Target disk mode should not be used to export the full drive of Android-based devices as it becomes trivial to brick a device. Some of their partitions should not be touched.

This is because for most Android-based devices, part of their basic firmware needed for booting is found on the main block device. Erasing or modifying the wrong partition would be like erasing the BIOS from your computer.

Broader ADB support

Time was taken to understand why ADB didn’t work on newer Android-based devices. It was initially suspected that the ADB daemon was incompatible with GadgetFS and FunctionFS.

It was much more trivial. The FunctionFS feature of the kernel needed the daemon to be started at a specific moment during the configuration, rather than at any time after.

With the fixes in #290 any device with GadgetFS can use ADB.

This means inspecting newer Android-based devices is easier, as it will most likely work if the device boots with a vendor kernel.

Using ADB is not limited to Android-based devices. The asus-dumo device is confirmed to be able to also use ADB. It is now the recommended basic method for getting a shell into a Mobile NixOS device, as it is easier to use than rndis.

LVGUI updates

A few updates were bundled together in #285. A few improvements to the early boot toolkit.

DRM support

Our toolkit used for user interfaces during early boot can now use DRM for rendering, in addition to fbdev.

The old framebuffer support is still present. In fact, compiling with DRM support implicitly also builds with fbdev support, as it will fall back to fbdev if DRM cannot be used. This allows one unique build to be used across devices with and without DRM support.

Adding support for DRM gives us an additional method of rendering. Some vendor kernels have broken fbdev implementations, like the SDM845 found in the razer-cheryl2 phone. With this change, early boot can be used on this device.

DRM is also the "future" of rendering on Linux. Well, it is the present of rendering on Linux. This is why it is now the preferred method to render the interface, when possible.

Libinput support

The evdev-based input driver has been replaced with a libinput driver. Libinput is the current recommended method for handling input with Linux. Evdev being one of the primitive constructs it uses.

Compared to the previous evdev driver used, there should be no differences with basic behaviour. Mainly, this was a clean-up, allowing us to remove some hacks that were used to identify device types with evdev. Libinput intrinsically knows more about the device than evdev did.

Device-specific changes

Wi-Fi support for qcacld-2.0 devices

The requirements for devices with qcacld-2.0 Wi-Fi hardware have been identified.

Support has been added in the following pull requests for the following devices:

The following device also uses qcacld-2.0 Wi-Fi. Support has not been added yet.

  • google-marlin

Initial support for Samsung Galaxy A5 (2017)

Support for the Samsung Galaxy A5 (2017) has been added.

It is the first Exynos device in Mobile NixOS, with an Exynos 7880. The device is otherwise unremarkable, it turns out that Mobile NixOS mostly just worked with Samsung’s initial boot flow. It required some minor adjustments, which are likely to help with their other phones and tablets.

Pinephone U-Boot update

January saw the release of U-Boot 2021.01. Mobile NixOS was already one version late, as 2020.10 was never packaged.

As with the previous update, upstream U-Boot is used, preferring to import well-identified patches for the remaining features desired.

This change should change nothing for many users. Users with a 3GB variant of the Pinephone will be relieved to know that they can now boot Mobile NixOS without additional work.

Other notable changes

  • #287 Fixes job control in the initrd shell

  • #292 asus-dumo gadget mode


One new device was merged in January.

Bringing the total of devices to 17.