NixOS on ARM/ODROID-C2: Difference between revisions

From NixOS Wiki
imported>OliverEvans96
Fix U-Boot build command (I think) - previous version expects `default.nix` in the current directory.
m fix 500 url with alternate download and update instructions
 
(3 intermediate revisions by 3 users not shown)
Line 19: Line 19:
|}
|}
</div>
</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.
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):
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) [https://archlinuxarm.org/packages/aarch64/uboot-odroid-c2-mainline/files/sd_fusing.sh] (replace /dev/sdX with the device for the eMMC):


<syntaxhighlight lang=bash>
<syntaxhighlight lang=bash>
nix-build '<nixpkgs>' -A pkgsCross.aarch64-multiplatform.ubootOdroidC2
nix-build '<nixpkgs>' -A pkgsCross.aarch64-multiplatform.ubootOdroidC2
cd result
cd result
bash /path/to/sd_fusing.sh /dev/sdX
bash /path/to/extracted/boot/sd_fusing.sh /dev/sdX
</syntaxhighlight>  
</syntaxhighlight>  


# Download the sd-image from Hydra at https://hydra.nixos.org/job/nixos/release-18.09-aarch64/nixos.sd_image.aarch64-linux/latest
# 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
# Copy it to the SD card
# Mount first partition to /mnt with <code>sudo mount /dev/mmcblk0p1 /mnt</code>
# Mount first partition to /mnt with <code>sudo mount /dev/mmcblk0p1 /mnt</code>
Line 86: Line 86:
== Serial console ==
== Serial console ==


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


<syntaxhighlight>
<syntaxhighlight>
Line 96: 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.


<hr />
==Xorg==


==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:
Nixos 20.03 should install all modules needed for this to work but at least two changes should be made to the xorg configuration:



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