NixOS on ARM/Raspberry Pi 4: Difference between revisions
m add udev rule for non-root access through libgpiod |
|||
| (3 intermediate revisions by 2 users not shown) | |||
| Line 79: | Line 79: | ||
</nowiki>}} | </nowiki>}} | ||
=== <code>config.txt === | === <code>config.txt</code> === | ||
{{warning|Since 24.11, the option <code>boot.loader.raspberrypi</code> which included <code>firmwareConfig</code> is removed from <code>nixpkgs</code>, therefore changes have to be written to <code>config.txt</code> directly<ref>https://github.com/NixOS/nixpkgs/pull/241534</ref>}} | {{warning|Since 24.11, the option <code>boot.loader.raspberrypi</code> which included <code>firmwareConfig</code> is removed from <code>nixpkgs</code>, therefore changes have to be written to <code>config.txt</code> directly<ref>https://github.com/NixOS/nixpkgs/pull/241534</ref>}} | ||
To edit options only available through <code>config.txt</code>, as of May 12, 2025, you can only do so non-declaratively: | To edit options only available through <code>config.txt</code>, as of May 12, 2025, you can only do so non-declaratively: | ||
| Line 86: | Line 86: | ||
$ sudo mount /dev/disk/by-label/FIRMWARE /mnt | $ sudo mount /dev/disk/by-label/FIRMWARE /mnt | ||
$ sudo vim /mnt/config.txt # <-- make changes here | $ sudo vim /mnt/config.txt # <-- make changes here | ||
</nowiki> | </nowiki>}} | ||
}} | |||
For example, | For example, [https://www.raspberrypi-spy.co.uk/2020/11/overclocking-the-raspberry-pi-400/ overclocking] the Raspberry Pi 400 can be done by adding the following: | ||
{{file|config.txt|text|<nowiki> | {{file|config.txt|text|<nowiki> | ||
| Line 186: | Line 185: | ||
The <code>extraRules</code> changes the owner of <code>gpiomem</code> and all other files needed for GPIO to work to <code>root:gpio</code> and changes the permissions to <code>0660</code>. | The <code>extraRules</code> changes the owner of <code>gpiomem</code> and all other files needed for GPIO to work to <code>root:gpio</code> and changes the permissions to <code>0660</code>. | ||
Therefore, the root user and anyone in the gpio group can now access the GPIO pins. | Therefore, the root user and anyone in the gpio group can now access the GPIO pins. | ||
Permissions on the <code>/dev/gpiochip*</code> devices are needed to support access through the newer '''GPIO character device''' interface (see [https://libgpiod.readthedocs.io/en/latest/ libgpiod]). | |||
<syntaxHighlight lang="nix"> | <syntaxHighlight lang="nix"> | ||
| Line 196: | Line 196: | ||
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", RUN+="${pkgs.bash}/bin/bash -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'" | SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", RUN+="${pkgs.bash}/bin/bash -c 'chown root:gpio /sys/class/gpio/export /sys/class/gpio/unexport ; chmod 220 /sys/class/gpio/export /sys/class/gpio/unexport'" | ||
SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add",RUN+="${pkgs.bash}/bin/bash -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'" | SUBSYSTEM=="gpio", KERNEL=="gpio*", ACTION=="add",RUN+="${pkgs.bash}/bin/bash -c 'chown root:gpio /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value ; chmod 660 /sys%p/active_low /sys%p/direction /sys%p/edge /sys%p/value'" | ||
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", RUN+="${pkgs.bash}/bin/bash -c 'chown root:gpio /dev/gpiochip* && chmod 0660 /dev/gpiochip*'" | |||
''; | ''; | ||
| Line 234: | Line 235: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
The the <code>spi0- | The the <code>spi0-0cs.dtso</code> file can be downloaded [https://github.com/raspberrypi/firmware/blob/master/boot/overlays/spi0-0cs.dtbo here]. | ||
You might have to change the <code>compatible</code> field to "raspberrypi" in the dtbo file. | You might have to change the <code>compatible</code> field to "raspberrypi" in the dtbo file. | ||