NixOS on ARM/ODROID-C2: Difference between revisions
imported>Grahamc Netboot instructions didn't work :) |
Phanirithvij (talk | contribs) 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 | 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] |