Work of samueldr to run NixOS on the Pine64 Pinebook Pro
Go to file
Samuel Dionne-Riel f9785b285f Prefer "external booting" u-boot by default.
Less rude for end-users expecting to be able to SD boot once flashed.
2020-01-21 22:37:42 -05:00
firmware Add known-good firmwares 2020-01-07 15:09:54 -05:00
kernel kernel: 5.4.0 -> 5.5.0-rc7 2020-01-20 19:12:29 -05:00
keyboard-updater Upgrade keyboard updater for ANSI PBP keyboard support 2020-01-16 22:03:20 -05:00
nixos Prefer tty0 console 2020-01-06 20:28:54 -05:00
sound Add script to reset the sound state. 2020-01-21 22:10:26 -05:00
u-boot u-boot: Add pkgs.uBootPinebookProExternalFirst 2020-01-17 18:27:57 -05:00
.gitignore initial commit 2019-11-14 17:40:51 -05:00
README.md Prefer "external booting" u-boot by default. 2020-01-21 22:37:42 -05:00
build.sh Allow unfree for build, because of the firmwares 2020-01-07 15:15:08 -05:00
configuration.nix Prefer "external booting" u-boot by default. 2020-01-21 22:37:42 -05:00
cross-hacks.nix Adds (incomplete) system image build 2020-01-06 15:22:39 -05:00
default.nix Set this up using a proper overlay 2020-01-06 15:21:02 -05:00
overlay.nix u-boot: Add pkgs.uBootPinebookProExternalFirst 2020-01-17 18:27:57 -05:00
pinebook_pro.nix Force s2idle until suspend is fixed. 2020-01-16 20:16:01 -05:00
system.nix Adds (incomplete) system image build 2020-01-06 15:22:39 -05:00
with-cross.nix Adds (incomplete) system image build 2020-01-06 15:22:39 -05:00

README.md

WIP stuff to get started on the pinebook pro.

Using in your configuration

Clone this repository somwhere, and in your configuration.nix

{
  imports = [
    .../pinebook-pro/pinebook_pro.nix
  ];
}

That entry point will try to stay unopinionated, while maximizing the hardware compatibility.

Compatibility

Tested

  • X11 with modesetting
  • Wi-Fi
  • Brightness controls
  • Speaker output

Untested

  • Bluetooth

Known issues

  • Suspend (or resume) fails.

Tips

The backlight can be controlled using light (programs.light.enable).

Image build

$ ./build.sh
$ lsblk /dev/mmcblk0 && sudo dd if=$(echo result/sd-image/*.img) of=/dev/mmcblk0 bs=8M oflag=direct status=progress

The build.sh script transmits parameters to nix-build, so e.g. -j0 can be used.

Once built, this image is self-sufficient, meaning that it should already be booting, no need burn u-boot to it.

The required modules (and maybe a bit more) are present in stage-1 so the display should start early enough in the boot process.

The LED should start up with the amber colour ASAP with this u-boot configuration, as a way to show activity early. The kernel should set it to green as soon as it can.

Note about cross-compilation

This will automatically detect the need for cross-compiling or not.

When cross-compiled, all caveats apply. Here this mainly means that the kernel will need to be re-compiled on the device on the first nixos-rebuild switch, while most other packages can be fetched from the cache.

u-boot

Assuming /dev/mmcblk0 is an SD card.

$ nix-build -A pkgs.uBootPinebookPro
$ lsblk /dev/mmcblk0 && sudo dd if=result/idbloader.img of=/dev/mmcblk0 bs=512 seek=64 oflag=direct,sync && sudo dd if=result/u-boot.itb of=/dev/mmcblk0 bs=512 seek=16384 oflag=direct,sync

The eMMC has to be zeroed (in the relevant sectors) or else the RK3399 will use the eMMC as a boot device first.

Alternatively, this u-boot can be installed to the eMMC.

Installing to SPI has yet to be investigated.

Updating eMMC u-boot from NixOS

Caution: this could render your system unbootable. Do this when you are in a situation where you can debug and fix the system if this happens. With this said, it should be safe enough.

$ nix-build -A pkgs.uBootPinebookPro
$ lsblk /dev/disk/by-path/platform-fe330000.sdhci && sudo dd if=result/idbloader.img of=/dev/disk/by-path/platform-fe330000.sdhci bs=512 seek=64 oflag=direct,sync && sudo dd if=result/u-boot.itb of=/dev/disk/by-path/platform-fe330000.sdhci bs=512 seek=16384 oflag=direct,sync

Alternative boot order

If you rather USB and SD card is tried before the eMMC, pkgs.uBootPinebookProExternalFirst can be installed, which has an alternative patch set added on top that will change the boot order.

The SD image is built using the "alternative boot order" u-boot. Thus, flashing the image to your eMMC keeps external devices bootable.

Keyboard firmware

 $ nix-build -A pkgs.pinebookpro-keyboard-updater
 $ sudo ./result/bin/updater step-1
 $ sudo reboot
 # ...
 $ sudo ./result/bin/updater step-2
 $ sudo reboot