NixOS on ARM/Raspberry Pi 3: Difference between revisions
imported>Fuu0 No edit summary |
m Add missing closing paren. |
||
(5 intermediate revisions by 5 users not shown) | |||
Line 43: | Line 43: | ||
First follow the [[NixOS_on_ARM#Installation|generic installation steps]] to get the installer image and install using the [[NixOS_on_ARM#NixOS_installation_.26_configuration|installation and configuration steps]]. | First follow the [[NixOS_on_ARM#Installation|generic installation steps]] to get the installer image and install using the [[NixOS_on_ARM#NixOS_installation_.26_configuration|installation and configuration steps]]. | ||
{{warning|1=To avoid running out of memory and ''failing'' to build, it is advised to create a swap file (see e.g. [https://wiki.archlinux.org/title/swap#Swap_file_creation]) ''before'' executing <code>nixos-rebuild</code> for the first time.}} | |||
=== Raspberry Pi 3B and 3B+ === | === Raspberry Pi 3B and 3B+ === | ||
Line 48: | Line 50: | ||
Both the AArch64 and ARMv7 images boot out-of-the-box. Using the 64-bit AArch64 image is highly recommended, as the availability of binaries is much better and allows the use of the 64-bit instruction set. | Both the AArch64 and ARMv7 images boot out-of-the-box. Using the 64-bit AArch64 image is highly recommended, as the availability of binaries is much better and allows the use of the 64-bit instruction set. | ||
For the UART console, edit <code>/extlinux/extlinux.conf</code> on the | For the UART console, edit <code>/extlinux/extlinux.conf</code> on the main partition of the SD card to set <code>console=ttyS1,115200n8</code> in the kernel boot parameters, making sure to replace the existing <code>console=ttyS0,115200n8</code> parameter. Use the following GPIO Pins with an USB-TTL connector: | ||
<syntaxhighlight> | <syntaxhighlight> | ||
GND - 3rd in top row, black cable | GND - 3rd in top row, black cable | ||
Line 94: | Line 96: | ||
If the Raspberry Pi downstream kernel is used the serial interface is named <code>serial0</code> instead. | If the Raspberry Pi downstream kernel is used the serial interface is named <code>serial0</code> instead. | ||
=== Early boot === | |||
Raspberry Pi 3's UART rate is tied to the GPU core frequency, set by default to 400MHz on Raspberry Pi 3 and later. This results in garbled serial output in bootloaders. Setting <code>core_freq=250</code> in <code>config.txt</code> solves this issue (as per [https://forums.raspberrypi.com/viewtopic.php?p=942203#p942203 thread on the Raspberry Pi forum]). | |||
It can be done declaratively as such: | |||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | |||
{ config, pkgs, lib, ... }: | |||
{ | |||
boot.loader.raspberryPi = { | |||
enable = true; | |||
version = 3; | |||
firmwareConfig = '' | |||
core_freq=250 | |||
''; | |||
}; | |||
} | |||
</nowiki>}} | |||
Note that this [https://github.com/RealVNC/raspi-documentation/blob/fc6b4711f91791db7acd19ae743fcfddc9c89546/configuration/config-txt/overclocking.md#overclocking-options may have a negative impact on performance]: | |||
<blockquote>Frequency of the GPU processor core in MHz. It has an impact on CPU performance because it drives the L2 cache and memory bus.</blockquote> | |||
== Bluetooth == | == Bluetooth == | ||
Line 219: | Line 244: | ||
See {{issue|66960}}. | See {{issue|66960}}. | ||
=== HDMI output issue with kernel | === HDMI output issue with kernel ~6.1 (NixOS 23.05 or NixOS unstable) === | ||
( | When using HDMI and hardware acceleration (e.g. Kodi), an application may fail to start and/or crash with a dmesg like: | ||
<pre> | |||
[232195.380745] [drm:vc4_bo_create [vc4]] *ERROR* Failed to allocate from CMA: | |||
[232195.380751] [drm] kernel: 432kb BOs (1) | |||
[232195.380755] [drm] dumb: 69064kb BOs (14) | |||
[306160.152488] cma: cma_alloc: alloc failed, req-size: 142 pages, ret: -16 | |||
[306160.152498] [vc_sm_cma_ioctl_alloc]: dma_alloc_coherent alloc of 581632 bytes failed | |||
[306160.152501] [vc_sm_cma_ioctl_alloc]: something failed - cleanup. ret -12 | |||
[317686.623989] [drm:vc4_bo_create [vc4]] *ERROR* Failed to allocate from CMA: | |||
[317686.623998] [drm] dumb: 74752kb BOs (16) | |||
</pre> | |||
A workaround is to increase the pre-allocated CMA space (which, as of writing, defaults to 65M): | |||
{{file|/etc/nixos/configuration.nix|nix|<nowiki> | |||
{ config, pkgs, lib, ... }: | |||
{ | { | ||
boot. | boot.kernelParams = ["cma=320M"]; | ||
} | } | ||
</ | </nowiki>}} | ||
< | For more information see a post in raspberry pi forum<ref>https://forums.raspberrypi.com/viewtopic.php?t=285068</ref> and thios github issue<ref>https://github.com/raspberrypi/linux/issues/3861</ref>. |