Install-iso: waiting for /dev/root on boot then fails
Hi , I encountered issue where I'm cross compiling for aarch64 to create a bootable USB drive.
However, on target (Lenovo x13s) when booting I endup failing mounting the rootfs.
With error waiting for /dev/root.
I tried also the iso where I have the same issue.
I wanted to use the raw-efi but there it fails due to memory when copying content to the image. Tried to increase memory without any change.
Also tried sdcard but that will not boot due to missing EFI.
Could you please help?
{
description = "NixOS aarch64 bootable USB with EFI boot";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixos-generators = {
url = "github:nix-community/nixos-generators";
inputs.nixpkgs.follows = "nixpkgs";
};
x13s-nixos = {
url = "github:BrainWart/x13s-nixos";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, nixos-generators, x13s-nixos, ... }@inputs:
let
system = "x86_64-linux";
targetSystem = "aarch64-linux";
pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
crossSystem = {
config = targetSystem;
# Reduce build size by disabling documentation
documentation.enable = false;
documentation.doc.enable = false;
documentation.info.enable = false;
documentation.man.enable = false;
};
};
x13s-pkgs = x13s-nixos.legacyPackages.${targetSystem} or
(x13s-nixos.packages.${targetSystem} or
(import "${x13s-nixos}" {
inherit system;
crossSystem.config = targetSystem;
}));
lib = nixpkgs.lib;
in {
packages.${system} = {
bootable-usb = nixos-generators.nixosGenerate {
inherit pkgs;
format = "install-iso";
modules = [
({ config, pkgs, lib, ... }: {
nixpkgs.hostPlatform = targetSystem;
nixpkgs.buildPlatform = system;
# Enable cross-compilation
nixpkgs.crossSystem = {
config = targetSystem;
};
system.stateVersion = "25.05";
# Configure ISO image
isoImage = {
makeEfiBootable = true;
makeUsbBootable = true;
volumeID = "NIXOS_ISO";
isoName = "nixos-aarch64.iso";
};
# Disable X11 to save memory
services.xserver = {
enable = false;
displayManager.gdm.enable = false;
};
# User setup
services.openssh.enable = true;
users.users.nixos = {
isNormalUser = true;
extraGroups = [ "wheel" ];
initialPassword = "nixos";
};
# Boot configuration for aarch64 with EFI support
boot = {
# Disable grub and use systemd-boot instead
loader.grub.enable = false;
loader.generic-extlinux-compatible.enable = false;
# Enable EFI boot with systemd-boot
loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = true;
# Kernel packages
kernelPackages = x13s-pkgs.linux_jhovold or
(x13s-pkgs.linuxPackages_jhovold or
(x13s-pkgs.linuxPackages-jhovold or pkgs.linuxPackages));
# Make sure initrd has all needed modules
initrd = {
availableKernelModules = [
# Filesystems
"ext4" "vfat"
# Storage
"usbhid" "usb_storage" "uas" "sd_mod" "sr_mod"
"mmc_block" "sdhci" "sdhci_pci" "sdhci_acpi"
# ARM/aarch64 specific
"virtio_pci" "virtio_blk" "virtio_scsi"
"ahci" "nvme" "xhci_pci" "xhci_hcd"
];
# Force inclusion of important firmware paths in the initrd
includeDefaultModules = true;
kernelModules = [
# Basic display drivers
"drm" "drm_kms_helper" "gpu_sched"
# For arm64 platforms
"qcom_geni_serial" "arm_smmu" "qcom_scm"
# Commonly needed on Qualcomm devices (like X13s)
"msm" "pinctrl_msm"
];
# Enable verbose output during boot
verbose = true;
};
# Kernel parameters
kernelParams = [
"arm64.nopauth"
"clk_ignore_unused"
"pd_ignore_unused"
# Console settings
"console=tty0"
"console=ttyS0,115200"
"console=tty1"
"earlycon=ttyS0,115200"
# Prevent console/screen blanking
"consoleblank=0"
"no_console_suspend"
"fbcon=nodefer"
# Graphics settings
"nomodeset"
];
};
# Enhanced hardware and firmware support
hardware = {
enableRedistributableFirmware = true;
enableAllFirmware = true;
# Include all firmware packages
firmware = with pkgs; [
linux-firmware
firmwareLinuxNonfree
wireless-regdb
];
};
# Explicitly enable required filesystems
boot.supportedFilesystems = [ "vfat" "ext4" ];
# Add nixpkgs channel
nix.nixPath = [ "nixpkgs=${nixpkgs}" ];
# Enable flakes
nix.settings.experimental-features = [ "nix-command" "flakes" ];
# Add useful tools for debugging and setup
environment.systemPackages = with pkgs; [
git
vim
wget
htop
parted
gptfdisk
e2fsprogs
usbutils
pciutils
];
})
];
};
default = self.packages.${system}.bootable-usb;
};
};
}
Called with sudo dd bs=4M conv=fsync oflag=direct status=progress if=nixos.iso of=/dev/sda and run sync after
Have you had any luck with this? I've made some attempts at making a bootable ISO for the x13s a few times and haven't had much luck. Going to make another attempt.
Looking over the back chat for some of the IRC channels, it looks like there have been a few attempts since I've tried as well.
I have not been able to get the USB bus working. For the x1e, it appears a kernel module needs to be disabled for NixOS usb boot. I'm giving that a whack now.
Looks like one of the issues is related to https://github.com/NixOS/nixpkgs/pull/291750. This has been merged and systemd based initrd should work now. Part of my issue previously is that the USB device does not show up in /dev when poking around after the boot fails