NixOS on a MinnowBoard MAX and Turbot (serial console)

TL;DR To boot and get a serial console add "console=ttyS0" to your kernel boot arguments via boot.kernelParams = [ "console=ttyS0" ];.

The MinnowBoard is an x86 based developer board, similar to the Raspberry Pi or the BeagleBone Black. It comes in multiple versions like the MinnowBoard MAX and the newer MinnowBoard Turbot. They are both compatible to each other and these instructions work for both of them.

Check out the Getting Started Guide on minnowboard.org to get started with your board.

For most parts you can follow the normal NixOS installation as Documented in the NixOS Manual.

Here is a summary with some additional steps needed to get the Serial Console working.

Download the NixOS installer media from nixos.org as described in Chapter 1. Obtaining NixOS and flash it to a normal USB stick.

You need a media that is attached to your Minnowboard. This can either be a SATA drive, a USB Drive or an SD card. For my setup I used an 8GB microSD card but a bigger one might be more suitable if you plan to run anything meaningful on the system.

Boot the installation media and get a serial console.

In order to get a serial console the parameter console=ttyS0 needs to be appended to the kernels boot parameters. The easiest way to do this without creating a custom boot media is to press e key when the entry to start NixOS appears. Then simply add console=ttyS0 in the beginning of the line and press ENTER.

After some time a Linux shell will appear.

As the Minnowboard is equipped with an UEFI firmware we partition the SD card using GPT. Then create a 512M partition of type EFI System and a second partition taking the remaining space of type Linux Filesystem. Note that we don’t use swap as we will use zram later.

cfdisk /dev/mmcblk0

We then format the partition with vfat and ext4.

mkfs.vfat -n boot /dev/mmcblk0p1
mkfs.ext4 -L root /dev/mmcblk0p2

Then we mount these two partitions to /mnt and /mnt/boot.

mount /dev/mmcblk0p2 /mnt
mkdir /mnt/boot
mount /dev/mmcblk0p1 /mnt/boot

Then let’s generate the default NixOS configuration.

nixos-generate-config --root /mnt

The default configuration.nix now created under /mnt/etc/nixos/configuration.nix needs some adjustments to make the serial console work again after a reboot.

In order to achieve this add the following line to your configuration.nix:

boot.kernelParams = [ "console=ttyS0" ];

As mentioned above we didn’t set up swap as we wanted to use zram instead. So let’s activate this too by adding the following line:

zramSwap = true;

After your configuration is finished run nixos-install set a root password and reboot the device.

This should be all you need get your device working.

Have fun.