patches and low-level development discussion
 help / color / mirror / code / Atom feed
From: Ivan Nikolaenko <ivan.nikolaenko@unikie.com>
To: devel@spectrum-os.org
Subject: Overriding Linux kernel in host/rootfs/default.nix
Date: Wed, 21 Dec 2022 13:18:36 +0200	[thread overview]
Message-ID: <4d41315a-05d2-747c-3708-37f7c8c34684@unikie.com> (raw)

Hello everyone.

Recently I faced an issue with overriding Linux kernel in rootfs recipe:

Rootfs has an attribute kernel in the `let ... in` section, which is 
used for
setting up correct paths to kernel modules in rootfs derivation. But this
attribute is also used by the derivation `packagesSysroot` which is used
by the derivation `packagesTar`, whiсh, in its turn, used by rootfs 
derivation.

All that derivations introduced in the scope of rootfs derivation (the same
`let ... in` section) and are anonymous.
What happens when I override kernel attribute of the rootfs derivation:
1. Nix evaluates original host/rootfs/default.nix  file and replaces all
${kernel} occurences with the actual value of kernel attribute (which is 
linux_latest  at this moment).
2. Nix sets linux_latest  as the input for rootfs and packagesSysroot 
derivations.
3. Nix evaluates overlay with kernel override and overrides (in fact, 
introduces new) kernel attribute.
4. Nothing happens after that.
Now we have:
- `kernel` attribute of rootfs derivation pointing to the imx8 kernel.
- `MODULES_ALIAS` and `MODULES_ORDER` variables of rootfs derivation are 
pointing to linux_latest modules.
The root of the issue - line `ln -s ${kernel}/lib/modules 
${firmware}/lib/firmware $out/lib`
from `packagesSysroot` derivation build command, which creates the /lib 
link in the rootfs
pointing to linux_latest modules. As I found, kernel attribure is not 
even passed as an attribute to
the rootfs derivation file. But it is possible to override MODULES_ALIAS 
and MODULES_ORDER with correct kernel modules path instead.

This also touches initramfs
The possible solution is just to override linux_latest, but in this case 
all VMs will use host kernel version, and we need to avoid this.

I would propose something like this for rootfs' default.nix, because 
this approach solves all kernel issues in an easy and clear way:

diff --git a/host/rootfs/default.nix b/host/rootfs/default.nix
index ad6ea1f..7bf16d2 100644
--- a/host/rootfs/default.nix
+++ b/host/rootfs/default.nix
@@ -7,7 +7,7 @@ pkgs.pkgsStatic.callPackage (

  { lib, stdenvNoCC, nixos, runCommand, writeReferencesToFile, s6-rc, 
tar2ext4
  , busybox, cloud-hypervisor, cryptsetup, execline, jq, kmod
-, mdevd, s6, s6-linux-init, socat, util-linuxMinimal, xorg
+, mdevd, s6, s6-linux-init, socat, util-linuxMinimal, xorg, kernel ? 
linux_latest
  }:

  let
@@ -73,8 +73,6 @@ let
      imports = [ (modulesPath + "/profiles/all-hardware.nix") ];
    });

-  kernel = pkgs.linux_latest;
-
    appvm = import ../../img/app {
      inherit config;
      inherit (foot) terminfo;

I played a bit with this, and seems that it worked.

Thanks.



             reply	other threads:[~2022-12-21 11:18 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-21 11:18 Ivan Nikolaenko [this message]
2022-12-21 11:32 ` Alyssa Ross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4d41315a-05d2-747c-3708-37f7c8c34684@unikie.com \
    --to=ivan.nikolaenko@unikie.com \
    --cc=devel@spectrum-os.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://spectrum-os.org/git/crosvm
	https://spectrum-os.org/git/doc
	https://spectrum-os.org/git/mktuntap
	https://spectrum-os.org/git/nixpkgs
	https://spectrum-os.org/git/spectrum
	https://spectrum-os.org/git/ucspi-vsock
	https://spectrum-os.org/git/www

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).