NixOS on ARM/ODROID-C2: Difference between revisions

From NixOS Wiki
imported>Samueldr
Adds sections as used on other pages.
m fix 500 url with alternate download and update instructions
 
(15 intermediate revisions by 10 users not shown)
Line 1: Line 1:
{{ARM/breadcrumb}}
{{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 ==
== Status ==


ODROID-C2 support is being worked on by '''@grahamc'''.
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 ==
== 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 ==
== Serial console ==


I used minicom to access the serial:
I used minicom to access the serial console:


<syntaxhighlight>
<syntaxhighlight>
Line 22: Line 96:
</syntaxhighlight>
</syntaxhighlight>


then run <code>sudo minicom</code> 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]

Latest revision as of 09:54, 15 September 2024

Hardkernel ODROID-C2
An ODROID-C2.
Manufacturer Hardkernel
Architecture AArch64
Bootloader Upstream U-Boot
Boot options SD, eMMC

Status

Mainline kernel from NixOS has been reported as working[1]. 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) download and extract (replace /dev/sdX with the device for the eMMC):

nix-build '<nixpkgs>' -A pkgsCross.aarch64-multiplatform.ubootOdroidC2
cd result
bash /path/to/extracted/boot/sd_fusing.sh /dev/sdX
  1. Download the sd-image from Hydra at https://hydra.nixos.org/job/nixos/release-22.05-aarch64/nixos.sd_image.aarch64-linux/latest
  2. Copy it to the SD card
  3. Mount first partition to /mnt with sudo mount /dev/mmcblk0p1 /mnt
  4. Edit /mnt/extlinux/extlinux.conf and delete all the console=tty.... arguments in the APPEND line
  5. Add console=ttyAML0,115200n8 to the end of the APPEND line

it will look something like this:

$ 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

and then boot the sdcard.

Once booted, partition your on-board emmc like:

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

note **p2** is bootable.

$ mkfs.ext4 /dev/mmcblk0p2
$ mkswap /dev/mmcblk0p3
$ swapon /dev/mmcblk0p3
$ mount /dev/mmcblk0p2 /mnt
$ nixos-generate-config /mnt
$ nixos-install
$ reboot

Serial console

I used minicom to access the serial console:

$ cat /etc/minirc.odroid-c2 
# Machine-generated file - use "minicom -s" to change parameters.
pu port             /dev/ttyUSB0
pu lock             /var/lock
pu rtscts           No

then run sudo minicom 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:

services.xserver.videoDrivers = [ "modesetting"  ];
  services.xserver.extraConfig = ''
    Section "OutputClass"
        Identifier "Meson"
        MatchDriver "meson"
        Driver "modesetting"
        Option "PrimaryGPU" "true"
    EndSection
  '';

The HW cursor support was very laggy when tried on 20.03 so enabling the software cursor may be desired:

services.xserver.deviceSection = "Option \"SWcursor\" \"on\"";

Resources