NixOS on ARM/ODROID-C2: Difference between revisions
imported>Grahamc mNo edit summary |
Phanirithvij (talk | contribs) m fix 500 url with alternate download and update instructions |
||
(17 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 | 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 | |
---|---|
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
- 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
sudo mount /dev/mmcblk0p1 /mnt
- Edit /mnt/extlinux/extlinux.conf and delete all the console=tty.... arguments in the APPEND line
- 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
- Official product page
- NixOS Image Build for Odroid-C2 by George Whewell