Three breakages handled:
- hardware.opengl → hardware.graphics (renamed in 24.11). Touches
upboard.nix, douro.nix, batm3.nix, live.nix.
- vaapiIntel dropped — legacy pre-Broadwell driver, removed in
nixpkgs. UP Board (Cherry Trail) and OptiPlex 9030 (Haswell) both
use intel-media-driver, which stays.
- vaapiVdpau renamed → libva-vdpau-driver.
system.stateVersion stays 24.05 — convention is to never bump after
install. Existing Sintra and fresh flashes keep the 24.05 state
semantics; that's correct.
All 8 nixosConfigurations (4 models × {live,installed}) evaluate
clean with zero deprecation warnings on 24.11.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
154 lines
5.7 KiB
Nix
154 lines
5.7 KiB
Nix
# Tejo (UP Board / UP4000) Hardware Configuration
|
|
# Intel Atom/Celeron boards used in Lamassu Tejo ATM machines.
|
|
# Supports both UP Board and UP4000 variants — udev rules for both
|
|
# are included since they match different kernel paths and don't conflict.
|
|
#
|
|
# Serial port mapping:
|
|
# ttyJ4 = Printer (Nippon NP-2511D-2)
|
|
# ttyJ5 = Validator (iVizion, ID003 protocol)
|
|
# ttyJ7 = Dispenser (Fujitsu F53/F56)
|
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
{
|
|
boot = {
|
|
loader = {
|
|
systemd-boot.enable = true;
|
|
efi.canTouchEfiVariables = true;
|
|
timeout = 3;
|
|
};
|
|
|
|
initrd.availableKernelModules = [
|
|
"xhci_pci"
|
|
"ahci"
|
|
"usb_storage"
|
|
"sd_mod"
|
|
"sdhci_pci"
|
|
"sdhci-acpi" # UP Board sintra: eMMC controller is ACPI-enumerated, not PCI
|
|
"mmc_block" # creates /dev/mmcblk* block-device nodes
|
|
"i915"
|
|
];
|
|
|
|
# Force-load the eMMC stack in stage 1 so root-by-label resolves before
|
|
# the kernel hands off to switch_root. Without this, initramfs panics
|
|
# with "An error occurred in stage 1 of the boot process" because
|
|
# /dev/disk/by-label/nixos never materialises in time.
|
|
initrd.kernelModules = [
|
|
"sdhci-acpi"
|
|
"mmc_block"
|
|
];
|
|
|
|
kernelModules = [
|
|
"kvm-intel"
|
|
"i2c-dev"
|
|
"spi-dev"
|
|
"usbserial" # USB-to-serial adapters
|
|
"ftdi_sio" # FTDI USB serial
|
|
"cp210x" # CP210x USB serial
|
|
];
|
|
|
|
kernelParams = [
|
|
"i915.enable_psr=0"
|
|
# NOTE: do NOT route the kernel console through ttyS4 on Sintra.
|
|
# ttyS4 is the SoC's MMIO 16550A (the only real UART besides the
|
|
# legacy ttyS0 at I/O 0x3f8) and is wired to the Fujitsu F56
|
|
# dispenser's RS-232 header on Sintra. Holding it as console
|
|
# prevents userspace from opening it at 9600 baud and HAL fails
|
|
# with "Input/output error setting custom baud rate of 9600".
|
|
# If you want serial debug, point console at ttyS0 instead.
|
|
"console=tty0"
|
|
"quiet"
|
|
"splash"
|
|
];
|
|
};
|
|
|
|
# Disk layout: GPT with ESP + ext4 root (eMMC on UP Board).
|
|
# Labels match what make-disk-image.nix with partitionTableType="efi"
|
|
# produces — ESP for the FAT partition, nixos for the ext4 root. We
|
|
# previously expected `by-label/boot` here and had to manually
|
|
# `fatlabel` the partition post-flash; aligning the label avoids
|
|
# that hand-step on future re-flashes. (douro.nix already uses ESP.)
|
|
fileSystems."/" = {
|
|
device = "/dev/disk/by-label/nixos";
|
|
fsType = "ext4";
|
|
};
|
|
|
|
fileSystems."/boot" = {
|
|
device = "/dev/disk/by-label/ESP";
|
|
fsType = "vfat";
|
|
};
|
|
|
|
hardware = {
|
|
graphics = {
|
|
enable = true;
|
|
extraPackages = with pkgs; [
|
|
intel-media-driver
|
|
libva-vdpau-driver
|
|
libvdpau-va-gl
|
|
];
|
|
};
|
|
enableRedistributableFirmware = true;
|
|
cpu.intel.updateMicrocode = true;
|
|
};
|
|
|
|
powerManagement = {
|
|
enable = true;
|
|
cpuFreqGovernor = "performance";
|
|
};
|
|
|
|
# Disable suspend/hibernate for kiosk
|
|
systemd.targets = {
|
|
sleep.enable = false;
|
|
suspend.enable = false;
|
|
hibernate.enable = false;
|
|
hybrid-sleep.enable = false;
|
|
};
|
|
|
|
# Serial port permissions + tejo-specific symlinks
|
|
services.udev.extraRules = lib.mkAfter ''
|
|
# Generic serial port permissions
|
|
KERNEL=="ttyS[0-9]*", MODE="0666"
|
|
KERNEL=="ttyUSB[0-9]*", MODE="0666"
|
|
KERNEL=="ttyACM[0-9]*", MODE="0666"
|
|
|
|
# ── Tejo serial port symlinks ──────────────────────────────────────
|
|
# Both UP Board and UP4000 rules included (match different kernel paths)
|
|
|
|
# Printer (ttyJ4)
|
|
KERNELS=="1-7.2:1.0", SYMLINK+="ttyJ4"
|
|
KERNEL=="ttyUSB0", SYMLINK+="ttyJ4"
|
|
|
|
# Validator (ttyJ5)
|
|
KERNELS=="1-7.3:1.0", SYMLINK+="ttyJ5"
|
|
KERNEL=="ttyUSB1", SYMLINK+="ttyJ5"
|
|
|
|
# Dispenser (ttyJ7).
|
|
# ttyS1 / ttyS5 cover earlier UP Board variants where the dispenser
|
|
# lands on those kernel-enumerated serial nodes; ttyS4 covers the
|
|
# Sintra (UP Board Atom/Apollo Lake) where the dispenser is wired
|
|
# to the SoC's MMIO UART. Whichever device actually exists at
|
|
# runtime gets the ttyJ7 symlink.
|
|
KERNEL=="ttyS1", SYMLINK+="ttyJ7"
|
|
KERNEL=="ttyS4", SYMLINK+="ttyJ7"
|
|
KERNEL=="ttyS5", SYMLINK+="ttyJ7"
|
|
|
|
# Legacy ttyAMA0 alias
|
|
SUBSYSTEM=="tty", KERNEL=="ttyS1", SYMLINK+="ttyAMA0", GROUP="dialout"
|
|
|
|
# ── Camera devices ─────────────────────────────────────────────────
|
|
SUBSYSTEM=="video4linux", ATTR{index}=="0", KERNELS=="1-5", ATTRS{idVendor}=="0ac8", ATTRS{idProduct}=="0345", SYMLINK+="video-scan"
|
|
SUBSYSTEM=="video4linux", ATTR{index}=="0", KERNELS=="1-2", ATTRS{idVendor}=="0ac8", ATTRS{idProduct}=="0345", SYMLINK+="video-scan"
|
|
SUBSYSTEM=="video4linux", ATTR{index}=="0", KERNELS=="1-6", ATTRS{idVendor}=="0ac8", ATTRS{idProduct}=="0345", SYMLINK+="video-front"
|
|
SUBSYSTEM=="video4linux", ATTR{index}=="0", KERNELS=="1-3", ATTRS{idVendor}=="0ac8", ATTRS{idProduct}=="0345", SYMLINK+="video-front"
|
|
|
|
# ── LED SPI / peripherals ──────────────────────────────────────────
|
|
KERNEL=="spidev1.0", SYMLINK+="ledspi"
|
|
KERNEL=="spidev2.0", SYMLINK+="ledspi"
|
|
SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
|
|
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
|
|
SUBSYSTEM=="leds", KERNEL=="upboard:*", ACTION=="add|change", RUN+="${pkgs.findutils}/bin/find /sys$devpath -type f -exec ${pkgs.coreutils}/bin/chmod g+u {} + -exec ${pkgs.coreutils}/bin/chown :leds {} +"
|
|
|
|
# Disable USB autosuspend (prevents serial adapters from sleeping)
|
|
ACTION=="add", SUBSYSTEM=="usb", TEST=="power/control", ATTR{power/control}="on"
|
|
'';
|
|
}
|