Hello.
I'm trying to compile libvirt from scratch on my ARM chromebook using Ubuntu 22.04 as host os where I have recompiled the kernel 5.4.244 enabling kvm, also recompiling qemu 5.1 from scratch and where I have installed these kernel sources and libraries :
dpkg -i linux-headers-5.4.244-0504244-generic_5.4.244-0504244.202305301242_armhf.deb
dpkg -i linux-headers-5.4.244-0504244_5.4.244-0504244.202305301242_all.deb
dpkg -i linux-image-5.4.244-0504244-generic_5.4.244-0504244.202305301242_armhf.deb
dpkg -i linux-modules-5.4.244-0504244-generic_5.4.244-0504244.202305301242_armhf.deb
be careful about the version of those files. It is the same version of the kernel that I'm using,5.4.244 :
# uname -a
Linux chromarietto 5.4.244 #9 SMP Mon Aug 28 16:14:27 UTC 2023 armv7l armv7l armv7l GNU/Linux
The idea behind is to place the correct files needed by libvirt to the right places.
Unfortunately I haven't reached the solution yet,as you can see below. Can you tell me which files libvirt wants to find and into which directories it wants them ? thanks :
root@chromarietto:/Dati/libvirt# ninja -C build
ninja: Entering directory `build'
[64/1485] Compiling C object src/util/libvirt_util.a.p/virhostcpu.c.o
FAILED: src/util/libvirt_util.a.p/virhostcpu.c.o
cc
-Isrc/util/libvirt_util.a.p -Isrc/util -I../src/util -Iinclude
-I../include -Isrc -I../src -I. -I.. -I/usr/include/p11-kit-1 -I/usr/
include/libnl3 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/gio-unix-2.0 -I/usr/include/libmo
unt
-I/usr/include/blkid -I/usr/include/libxml2 -I/usr/include/yajl
-fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-p
ch
-Wextra -std=gnu99 -O2 -g -Werror -fasynchronous-unwind-tables
-fexceptions -fipa-pure-const -fno-common -Wabsolute-value -Waddress
-Waddress-of-packed-member -Waggressive-loop-optimizations -Walloc-size-larger-than=2147483647 -Walloca -Warray-bounds=2 -Wattribute-al
ias=2
-Wattribute-warning -Wattributes -Wbool-compare -Wbool-operation
-Wbuiltin-declaration-mismatch -Wbuiltin-macro-redefined -Wcanno
t-profile
-Wcast-align -Wcast-align=strict -Wno-cast-function-type
-Wchar-subscripts -Wclobbered -Wcomment -Wcomments -Wcoverage-mismat
ch
-Wcpp -Wdangling-else -Wdate-time -Wdeclaration-after-statement
-Wdeprecated-declarations -Wdesignated-init -Wdiscarded-array-qualif
iers
-Wdiscarded-qualifiers -Wdiv-by-zero -Wduplicated-cond
-Wduplicate-decl-specifier -Wempty-body -Wendif-labels
-Wexpansion-to-defin
ed -Wformat-contains-nul -Wformat-extra-args
-Wno-format-nonliteral -Wformat-overflow=2 -Wformat-security
-Wno-format-truncation -Wform
at-y2k -Wformat-zero-length
-Wframe-address -Wframe-larger-than=2048 -Wfree-nonheap-object -Whsa
-Wif-not-aligned -Wignored-attributes
-Wignored-qualifiers -Wimplicit -Wimplicit-fallthrough=5 -Wimplicit-function-declaration -Wimplicit-int -Wincompatible-pointer-types -W
init-self
-Winline -Wint-conversion -Wint-in-bool-context -Wint-to-pointer-cast
-Winvalid-memory-model -Winvalid-pch -Wjump-misses-init
-Wlogical-not-parentheses -Wlogical-op -Wmain -Wmaybe-uninitialized
-Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentatio
n
-Wmissing-attributes -Wmissing-braces -Wmissing-declarations
-Wmissing-field-initializers -Wmissing-include-dirs -Wmissing-parameter-
type
-Wmissing-profile -Wmissing-prototypes -Wmultichar
-Wmultistatement-macros -Wnarrowing -Wnested-externs -Wnonnull
-Wnonnull-compar
e -Wnormalized=nfc -Wnull-dereference -Wodr
-Wold-style-declaration -Wold-style-definition -Wopenmp-simd -Woverflow
-Woverride-init -Wp
acked-bitfield-compat -Wpacked-not-aligned
-Wparentheses -Wpointer-arith -Wpointer-compare -Wpointer-sign
-Wpointer-to-int-cast -Wpragm
as -Wpsabi -Wrestrict
-Wreturn-local-addr -Wreturn-type -Wscalar-storage-order
-Wsequence-point -Wshadow -Wshift-count-negative -Wshift
-count-overflow
-Wshift-negative-value -Wshift-overflow=2 -Wno-sign-compare
-Wsizeof-array-argument -Wsizeof-pointer-div -Wsizeof-point
er-memaccess
-Wstrict-aliasing -Wstrict-prototypes -Wstringop-overflow=2
-Wstringop-truncation -Wsuggest-attribute=cold -Wno-suggest-at
tribute=const
-Wsuggest-attribute=format -Wsuggest-attribute=noreturn
-Wno-suggest-attribute=pure -Wsuggest-final-methods -Wsuggest-fin
al-types
-Wswitch -Wswitch-bool -Wswitch-enum -Wswitch-unreachable -Wsync-nand
-Wtautological-compare -Wtrampolines -Wtrigraphs -Wtype-
limits
-Wuninitialized -Wunknown-pragmas -Wunused -Wunused-but-set-parameter
-Wunused-but-set-variable -Wunused-const-variable=2 -Wunus
ed-function
-Wunused-label -Wunused-local-typedefs -Wunused-parameter
-Wunused-result -Wunused-value -Wunused-variable -Wvarargs -Wvari
adic-macros
-Wvector-operation-performance -Wvla -Wvolatile-register-var
-Wwrite-strings -fstack-protector-strong -Wdouble-promotion -f
PIC -pthread -DIN_LIBVIRT '-Dabs_top_builddir="/Dati/libvirt/build"' '-Dabs_top_srcdir="/Dati/libvirt"' -MD -MQ src/util/libvirt_util.a
.p/virhostcpu.c.o -MF src/util/libvirt_util.a.p/virhostcpu.c.o.d -o src/util/libvirt_util.a.p/virhostcpu.c.o -c ../src/util/virhostcpu.
c
../src/util/virhostcpu.c: In function ‘virHostCPUGetKVMMaxVCPUs’:
../src/util/virhostcpu.c:1212:26: error: ‘KVM_CHECK_EXTENSION’ undeclared (first use in this function); did you mean ‘G_GNUC_EXTENSION’
?
1212 | if ((ret = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_NR_VCPUS)) > 0)
| ^~~~~~~~~~~~~~~~~~~
| G_GNUC_EXTENSION
../src/util/virhostcpu.c:1212:26: note: each undeclared identifier is reported only once for each function it appears in
../src/util/virhostcpu.c:1212:47: error: ‘KVM_CAP_NR_VCPUS’ undeclared (first use in this function)
1212 | if ((ret = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_NR_VCPUS)) > 0)
| ^~~~~~~~~~~~~~~~
[66/1485] Compiling C object src/util/libvirt_util.a.p/virhostmem.c.o
ninja: build stopped: subcommand failed.So. ok. If I understood correctly : In my system the
file kvm.h is missing. I should install the kernel headers file if I
want it. I could do this if the kernel in use was 6.1,but I'm forced to
use 5.4. I can't install the kernel headers for the kernel 5.4 on top of
debian bookworm. Or at least,at the moment I don't know how to do this.
I'm not sure that the kernel headers for the 5.4 kernel are present
between the packages. Or maybe I can build it from scratch or I can find
it somewhere ? Even in this case, I'm not sure that they will work on a
system that has been compiled on top of a 6.x kernel.
I think that I should re-compile libvirt and QEMU on top of the 5.4
kernel and for this reason I should use an older version of Debian,maybe
8 or 9. Maybe later,I can upgrade the userland from 8/9 to 12,keeping
intact the same kernel. What do you think ? Do you see a shorter
solution ? for sure I don't like to reinstall and recompile everything
on an older version of Linux.
ok. I've copied this file :
/home/marietto/Desktop/Dati/virt/qemu-v5.1.0/linux-headers/linux/kvm.h
to this directory :
/usr/include/linux
the previous error is gone,but it still doesn't work :
# virsh domcapabilities --machine virt --emulatorbin /usr/local/bin/qemu-system-arm
error: failed to get emulator capabilities
error: KVM is not supported on this platform: Function not implemented
this time there isn't any specific error :(
Ok. thanks. Yes,I'm obliged to use a kernel minor than 5.7 and I've chosen 5.4. These are the places where I've found the kvm.h file that I need.
/home/marietto/Desktop/Dati/virt/qemu-v5.1.0/include/sysemu/kvm.h
/home/marietto/Desktop/Dati/virt/qemu-v5.1.0/linux-headers/asm-arm/kvm.h
/home/marietto/Desktop/Dati/virt/qemu-v5.1.0/linux-headers/linux/kvm.h
/home/marietto/Desktop/Dati/200/Si/linux-5.4.244/tools/include/uapi/linux/kvm.h
/home/marietto/Desktop/Dati/200/Si/linux-5.4.244/tools/arch/arm/include/uapi/asm/kvm.h
/home/marietto/Desktop/Dati/200/Si/linux-5.4.244/include/uapi/linux/kvm.h
/home/marietto/Desktop/Dati/200/Si/linux-5.4.244/include/config/kvm.h
/home/marietto/Desktop/Dati/200/Si/linux-5.4.244/include/trace/events/kvm.h
/home/marietto/Desktop/Dati/200/Si/linux-5.4.244/arch/arm/include/uapi/asm/kvm.h
Basically it seems that I can get it from the qemu 5.1 or from the kernel 5.4 source code files. Can you tell me what's the correct one ? You talked about linux-headers,so it might be this :
/home/marietto/Desktop/Dati/virt/qemu-v5.1.0/linux-headers/linux/kvm.h
?
where should I copy it ? to /usr/include/linux is the right place ?
thanks.
On Tue, Aug 29, 2023 at 09:22:35PM +0200, Mario Marietto wrote:
> Hello.
>
> I'm running Debian bookworm on my ARM Chromebook,model "xe303c12" and
> I've recompiled the kernel (5.4) to enable KVM,so now my system sounds like
> this :
That's surely not the default kernel that comes with Debian bookworm,
as that 5.4 version is many years old.
IIUC the standard bookworm kernel will be 6.4
> root@chromarietto:~# virsh domcapabilities --machine virt
> --emulatorbin /usr/local/bin/qemu-system-arm
>
> 2023-08-29 10:17:59.110+0000: 1763: error : virHostCPUGetKVMMaxVCPUs:1228 :
> KVM is not supported on this platform: Function not implemented ;
> error: failed to get emulator capabilities
> error: KVM is not supported on this platform: Function not implemented
This shows libvirt was built against a kernel that lacks the
kvm.h header file.
This is expected for armv7 as support for KVM on 32-bit arm was
deleted in the 5.7 kernel. I expect libvirt was built against
the kernel headers from Debian's default 6.4 kernel and thus
lacks KVM support.
Your booting of the old 5.4 kernel doesn't solve this - you
would actually need to build libvirt (and QEMU) against this
outdated kernel too.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
--
Mario.
--
Mario.
--
Mario.
Mario.