You are not logged in.
Pages: 1
Hey guys,
I'm currently trying to get an older kernel to run. I successfully downloaded the source (5.7 and even older versions) and followed the instructions of the arch-wiki. When it comes to
make modules
it fails with the following error (in the end):
make[1]: *** [scripts/Makefile.build:500: drivers/net] Error 2
make: *** [Makefile:1691: drivers] Error 2
The
make
command seems to finish its task successfully.
As I'm quite unexperienced with kernel related stuff, I don't know where to start searching for a fix. Any suggestions would be great!
Thanks in advance.
P.S.: I hope this is the right sub.
Offline
Do you actually need to recompile or will the copy in the archive still just work?
https://archive.archlinux.org/packages/l/linux/
Offline
i actually have to recompile, as i have to apply some minor changes.
Offline
Be mindful of https://archlinux.org/news/moving-to-zs … kinitcpio/ and post the build log - nobody can tell *what* the error is (just about where)
Offline
Ok, thanks so far!
Im not getting to the point where i use mkinitcpio yet. Just to make things clear, i did the following steps with Kernel 5.4.41:
$ make mrproper
-> no output at all
i set the config with:
$ zcat /proc/config.gz > .config
and then i ran
$ make -j8
I got asked in the first place what modules i want to have / how they have to be configured. I just passed these questions with ENTER, as i just wanted the default (or recommended) settings.
P.S.: @seth, your footer is really helpfull, 0bin has a maximum file size i exceeded with my log
P.P.S: The "minor changes" i mentioned above are NOT applied yet. the errors occure with the normal kernel source.
Last edited by Simulacrum (2021-11-17 14:56:14)
Offline
The uploaded log doesn't seem to include stderr?
Ftr, ix.io has a quota as well, in doubt tail the last MB or so.
Offline
Thanks for the hint - the upload is actually incomplete.
When it comes to STDERR, its not included in the file at all (at least as it appears).
I now used
[user@machine linux-5.4.41]$ make -j8 > >(tee /home/user/make.log) 2>&1
without running mrproper or copying the config beforehand. So the output is shortend. If you nee the full log, I'll start from scratch.
Offline
https://github.com/torvalds/linux/commi … f76ee47d62
Which was backported to 5.4.59 and newer. So is included in 5.4.160 as used by https://aur.archlinux.org/packages/linux-lts54/
Edit:
What are these minor changes you need to make to the kernel? Why can they not be made to the current kernel?
Last edited by loqs (2021-11-17 16:05:51)
Offline
@loqs
Thanks for the info. I'll try 5.4.160 soon. I'll report afterwards.
The "minor changes" are related to kvm for rdtsc spoofing. For Details, please refer to this github page.
Offline
It should apply to the current Arch kernel as well. This is the diff for the Intel changes against 5.15.2
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index dcd4f43c23de..be08197c7a4f 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -2502,7 +2502,8 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf,
CPU_BASED_MWAIT_EXITING |
CPU_BASED_MONITOR_EXITING |
CPU_BASED_INVLPG_EXITING |
- CPU_BASED_RDPMC_EXITING;
+ CPU_BASED_RDPMC_EXITING |
+ CPU_BASED_RDTSC_EXITING;
opt = CPU_BASED_TPR_SHADOW |
CPU_BASED_USE_MSR_BITMAPS |
@@ -5641,6 +5642,41 @@ static int handle_bus_lock_vmexit(struct kvm_vcpu *vcpu)
return 0;
}
+static u32 print_once = 1;
+
+static int handle_rdtsc(struct kvm_vcpu *vcpu)
+{
+ static u64 rdtsc_fake = 0;
+ static u64 rdtsc_prev = 0;
+ u64 rdtsc_real = rdtsc();
+
+ if(print_once)
+ {
+ printk("[handle_rdtsc] fake rdtsc vmx function is working\n");
+ print_once = 0;
+ rdtsc_fake = rdtsc_real;
+ }
+
+ if(rdtsc_prev != 0)
+ {
+ if(rdtsc_real > rdtsc_prev)
+ {
+ u64 diff = rdtsc_real - rdtsc_prev;
+ u64 fake_diff = diff / 16; // if you have 4.2Ghz on your vm, change 16 to 20
+ rdtsc_fake += fake_diff;
+ }
+ }
+ if(rdtsc_fake > rdtsc_real)
+ {
+ rdtsc_fake = rdtsc_real;
+ }
+ rdtsc_prev = rdtsc_real;
+ vcpu->arch.regs[VCPU_REGS_RAX] = rdtsc_fake & -1u;
+ vcpu->arch.regs[VCPU_REGS_RDX] = (rdtsc_fake >> 32) & -1u;
+
+ return skip_emulated_instruction(vcpu);
+}
+
/*
* The exit handlers return 1 if the exit was handled fully and guest execution
* may resume. Otherwise they set the kvm_run parameter to indicate what needs
@@ -5698,6 +5734,7 @@ static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = {
[EXIT_REASON_PREEMPTION_TIMER] = handle_preemption_timer,
[EXIT_REASON_ENCLS] = handle_encls,
[EXIT_REASON_BUS_LOCK] = handle_bus_lock_vmexit,
+ [EXIT_REASON_RDTSC] = handle_rdtsc,
};
static const int kvm_vmx_max_exit_handlers =
Offline
Also, last sentence of the readme
... Latest kernel modification for Arch linux uses the same vmx and svm files as official repository, so it should work too.
Online
Sorry, it took my way too long to reply. I caught a nasty cold and had to catch up with my work.
It should apply to the current Arch kernel as well. This is the diff for the Intel changes against 5.15.2
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index dcd4f43c23de..be08197c7a4f 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -2502,7 +2502,8 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf, CPU_BASED_MWAIT_EXITING | CPU_BASED_MONITOR_EXITING | CPU_BASED_INVLPG_EXITING | - CPU_BASED_RDPMC_EXITING; + CPU_BASED_RDPMC_EXITING | + CPU_BASED_RDTSC_EXITING; opt = CPU_BASED_TPR_SHADOW | CPU_BASED_USE_MSR_BITMAPS | @@ -5641,6 +5642,41 @@ static int handle_bus_lock_vmexit(struct kvm_vcpu *vcpu) return 0; } +static u32 print_once = 1; + +static int handle_rdtsc(struct kvm_vcpu *vcpu) +{ + static u64 rdtsc_fake = 0; + static u64 rdtsc_prev = 0; + u64 rdtsc_real = rdtsc(); + + if(print_once) + { + printk("[handle_rdtsc] fake rdtsc vmx function is working\n"); + print_once = 0; + rdtsc_fake = rdtsc_real; + } + + if(rdtsc_prev != 0) + { + if(rdtsc_real > rdtsc_prev) + { + u64 diff = rdtsc_real - rdtsc_prev; + u64 fake_diff = diff / 16; // if you have 4.2Ghz on your vm, change 16 to 20 + rdtsc_fake += fake_diff; + } + } + if(rdtsc_fake > rdtsc_real) + { + rdtsc_fake = rdtsc_real; + } + rdtsc_prev = rdtsc_real; + vcpu->arch.regs[VCPU_REGS_RAX] = rdtsc_fake & -1u; + vcpu->arch.regs[VCPU_REGS_RDX] = (rdtsc_fake >> 32) & -1u; + + return skip_emulated_instruction(vcpu); +} + /* * The exit handlers return 1 if the exit was handled fully and guest execution * may resume. Otherwise they set the kvm_run parameter to indicate what needs @@ -5698,6 +5734,7 @@ static int (*kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = { [EXIT_REASON_PREEMPTION_TIMER] = handle_preemption_timer, [EXIT_REASON_ENCLS] = handle_encls, [EXIT_REASON_BUS_LOCK] = handle_bus_lock_vmexit, + [EXIT_REASON_RDTSC] = handle_rdtsc, }; static const int kvm_vmx_max_exit_handlers =
I checked the kernel manually, and the changes haven't been made there? What the hell?
Also, last sentence of the readme
I saw that one but had problems compiling the (back then current) kernel. Maybe i should retry for now, as my knowledge base has improved since i started.
Further more: I tried compiling the kernel 5.4.160 (as mentioned by loqs) without any changes. The compilation and module installation ran without any errors but trying to boot the kernel brought up the following error:
https://imgur.com/kgDdwlc (Sorry for the poor quality)
I tried fixing this by:
- re-checking if all build tools are installed (which they where)
- changing the ext4 parameter in the .config of the kernel to
CONFIG_EXT4_FS=y
as my FS on /boot is ext4 and it has been loaded as module before.
I also checked the /etc/mkinitcpio.conf and saw the following entries:
# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
What makes me wonder is that neither of my files in /boot/ seem to be compressed as gz..?
[user@machine linux-5.4.160]$ file /boot/initramfs-linux.img
/boot/initramfs-linux.img: Zstandard compressed data (v0.8+), Dictionary ID: None
[user@machine linux-5.4.160]$ file /boot/vmlinuz-linux
/boot/vmlinuz-linux: Linux kernel x86 boot executable bzImage, version 5.15.4-arch1-1 (linux@archlinux) #1 SMP PREEMPT Sun, 21 Nov 2021 21:34:33 +0000, RO-rootFS, swap_dev 0X9, Normal VGA
Last edited by Simulacrum (2021-11-25 14:08:49)
Offline
For the initramfs, you're either on a very old version or you didn't merge your .pacnew files. https://github.com/archlinux/mkinitcpio … 04f3a130e6
Edit: Actually, if you were on an old version, it wouldn't be zstd, so it's definitely a .pacnew issue.
Last edited by Scimmia (2021-11-25 15:06:30)
Offline
Wow. I don't know what actually happend (or why i haven't done this for a longer time), but i think I got some merge work to do
[user@machine ~]$ sudo find / -type f -name "*.pacnew" 2>/dev/null | wc -l
9
Thanks for the hint so far, maybe that fixes something. I'll report afterwards.
Last edited by Simulacrum (2021-11-25 16:46:31)
Offline
Pages: 1