NixOS on ARM/ODROID-C2: Difference between revisions

imported>Grahamc
Netboot instructions didn't work :)
m fix 500 url with alternate download and update instructions
 
(16 intermediate revisions by 10 users not shown)
Line 1: Line 1:
I used minicom to access the serial:
{{ARM/breadcrumb}}
<div class="infobox">
{|class="table"
!colspan="2" class="title"|Hardkernel ODROID-C2
|-
|colspan="2"|[[File:ODROID-C2.jpg|frameless|256px|An ODROID-C2.]]
|-
!Manufacturer
|Hardkernel
|-
!Architecture
|AArch64
|-
!Bootloader
| Upstream U-Boot
|-
!Boot options
|SD, eMMC
|}
</div>
{{outdated|The information is likely outdated, but it is likely the ODROID-C2 works well.}}
 
== Status ==
 
Mainline kernel from NixOS has been reported as working<ref>https://logs.nix.samueldr.com/nixos-aarch64/2018-01-25#863144;</ref>. A non-specified build from mainline u-boot also has been reported to work.
 
== Board-specific installation notes ==
 
Note this assumes u-boot is in partition 1 of your board's connected eMMC. If you haven't done that yet, you can build it with nix and then write it this fusing script (using an emmc/usb adapter) [http://mirror.archlinuxarm.org/aarch64/alarm/uboot-odroid-c2-mainline-2019.07-1-aarch64.pkg.tar.xz download and extract] (replace /dev/sdX with the device for the eMMC):
 
<syntaxhighlight lang=bash>
nix-build '<nixpkgs>' -A pkgsCross.aarch64-multiplatform.ubootOdroidC2
cd result
bash /path/to/extracted/boot/sd_fusing.sh /dev/sdX
</syntaxhighlight>
 
# Download the sd-image from Hydra at https://hydra.nixos.org/job/nixos/release-22.05-aarch64/nixos.sd_image.aarch64-linux/latest
# Copy it to the SD card
# Mount first partition to /mnt with <code>sudo mount /dev/mmcblk0p1 /mnt</code>
# Edit /mnt/extlinux/extlinux.conf and delete all the console=tty.... arguments in the APPEND line
# Add <code>console=ttyAML0,115200n8</code> to the end of the APPEND line
 
it will look something like this:
 
<syntaxhighlight lang=bash>
$ cat  /mnt/extlinux/extlinux.conf
# Generated file, all changes will be lost on nixos-rebuild!
 
# Change this to e.g. nixos-42 to temporarily boot to an older configuration.
DEFAULT nixos-default
 
MENU TITLE ------------------------------------------------------------
TIMEOUT 30
 
LABEL nixos-default
  MENU LABEL NixOS - Default
  LINUX ../nixos/gz1chw67hj8fj2b3xdrkv1nxrv8jvdzv-linux-4.19.13-Image
  INITRD ../nixos/4gifkl2yv2g58nxmf6z68y42s70xrsg0-initrd-initrd
  FDTDIR ../nixos/gz1chw67hj8fj2b3xdrkv1nxrv8jvdzv-linux-4.19.13-dtbs
  APPEND systemConfig=/nix/store/...-nixos-system-nixos-xxx.xxx.xxx.xxx init=/nix/store/...-nixos-system-nixos-xx.xx.xxxx.xxx init loglevel=7 cma=32M console=ttyAML0,115200n8
</syntaxhighlight>
 
and then boot the sdcard.
 
Once booted, partition your on-board emmc like:
 
<syntaxhighlight>
Device        Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1          2048  264191  262144  128M  c W95 FAT32 (LBA)
/dev/mmcblk0p2 *      264192 50595839 50331648  24G 83 Linux
/dev/mmcblk0p3      50595840 61071359 10475520    5G 83 Linux
</syntaxhighlight>
 
note **p2** is bootable.
 
<syntaxhighlight lang=console>
$ mkfs.ext4 /dev/mmcblk0p2
$ mkswap /dev/mmcblk0p3
$ swapon /dev/mmcblk0p3
$ mount /dev/mmcblk0p2 /mnt
$ nixos-generate-config /mnt
$ nixos-install
$ reboot
</syntaxhighlight>
 
== Serial console ==
 
I used minicom to access the serial console:


<syntaxhighlight>
<syntaxhighlight>
Line 9: Line 96:
</syntaxhighlight>
</syntaxhighlight>


then run `sudo minicom` to access the serial console.
then run <code>sudo minicom</code> to access the console.
 
==Xorg==
 
Nixos 20.03 should install all modules needed for this to work but at least two changes should be made to the xorg configuration:
 
<pre>
services.xserver.videoDrivers = [ "modesetting"  ];
  services.xserver.extraConfig = ''
    Section "OutputClass"
        Identifier "Meson"
        MatchDriver "meson"
        Driver "modesetting"
        Option "PrimaryGPU" "true"
    EndSection
  '';
</pre>
 
The HW cursor support was very laggy when tried on 20.03 so enabling the software cursor may be desired:
 
<pre>
services.xserver.deviceSection = "Option \"SWcursor\" \"on\"";
</pre>
 
== Resources ==
 
* [https://www.hardkernel.com/shop/odroid-c2/ Official product page]
* NixOS Image Build for [https://github.com/georgewhewell/nixos-nanopim3/blob/master/hardware/boards/odroid-c2.nix Odroid-C2 by George Whewell]