A portable way to query kernel configuration on a live system (/boot/config-*
or /proc/config.gz).
It provides:
- A CLI (
kconfq) - A C-API library (
libkconfq.so,kconfq.h,kconfq.pc) - A Rust crate
Instaling via cargo:
cargo install kconfqInstaling via Nix:
nix profile install github:synalice/kconfqRunning without installation:
nix run github:synalice/kconfqEven though the core of the library is written in Rust, it can be compiled as a
cdynlib with C ABI.
The project will generate:
libkconfq.sokconfq.hkconfq.pc
All of this makes it possible to use library as any normal C dependency. Here is an example of how this would look like in Meson
kconfq = dependency('kconfq')You can see the example of how to use the C-API in the examples/libkconfq/ directory.
To build and run the example, run the following commands:
cd examples/libkconfq/
nix develop
meson setup builddir/
meson compile -C builddir/
./builddir/exampleTo build and install library from source you have to use cargo-c.
cargo cbuild --release --destdir=${D} --prefix=/usr --libdir=/usr/lib64
cargo ctest
cargo cinstall --release --destdir=${D} --prefix=/usr --libdir=/usr/lib64This is how you would add this library to your flake.nix and then reference it
inside your derivation's buildInputs
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
flake-utils.url = "github:numtide/flake-utils";
kconfq = {
url = "github:synalice/kconfq";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, flake-utils, kconfq }:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
{
packages.default = pkgs.clangStdenv.mkDerivation {
pname = "example";
version = "0.1.0";
src = ./.;
buildInputs = [ kconfq.packages.${system}.libkconfq ];
};
}
);
}The project was created with easy cross-compilation in mind.
Here is how you can cross-compile libkconfq for aarch64-unknown-linux-gnu
using Nix
./scripts/cross-compile.sh aarch64-multiplatform ./nix/libkconfq.nix outTip
To cross-compile for different host architectures, replace
aarch64-multiplatform with riscv64 or something else. Read more
here.
- Add tests.
This project is under the MIT license.