Portál AbcLinuxu, 20. července 2025 12:03
Podívejte se na konfiguraci kernelu a oveřte, zda je nastaveno
CONFIG_X86_CMOV=nto by snad mělo pomoci. Pravda je, že tato volba závisí na CONFIG_MK7, takže by rozhodně neměla být povolená.
Kde jádro kompilujete by mělo být jedno, pokud při překladu nenastavíte např. -march=native nebo tak.
Pokud se volba v configu nenachází, měla by být vypnutá. Kdybyste volbu CONFIG_X86_CMOV=y dopsal ručně, měl by vás překladač vyřvat, že není splněna závislost.
Můžete zkusit jádro přeložit pomocí (jestli to bude mít nějaký vliv se ale jistý nejsem)
KCFLAGS="-march=k6" make bzImage modules
Vyčíst konfiguraci běžícího jádra lze z
zcat /proc/config.gzpokud bylo jádro přeloženo s povoleným CONFIG_IKCONFIG_PROC.
arch/x86/include/asm/required-features.h
:
#if defined(CONFIG_X86_CMOV) || defined(CONFIG_X86_64) # define NEED_CMOV (1<<(X86_FEATURE_CMOV & 31)) #else # define NEED_CMOV 0 #endifTakze by to melo fungovat.
.config
, vystup z make clean && make V=1 > make_log.txt(soubor
make_log.txt
) a vystup z
gcc -isystem /usr/lib64/gcc/*/*/include -nostdinc -Iarch/x86/include -Iarch/x86/include/generated -Iinclude -include include/linux/kconfig.h -c arch/x86/boot/cpucheck.c -D__KERNEL__ -D_SETUP -E -o cpucheck.txt(soubor
cpucheck.txt
- pozor mozna bude nutne upravit cestu po -isystem a taky je treba to poustet az po kompletnim make) - tady je zajimavych par radek po static const u32 req_flags[10] =
.
Pokud tam je (1<<((0*32+15) & 31)
pak kernel pri startu bude chtit, aby procesor umel CMOV - ukol je tedy aby to tam nebylo. Priklad spatne situace:
static const u32 req_flags[10] = { ((1<<((0*32+ 0) & 31))|(1<<((0*32+ 3)) & 31)|(1<<((0*32+ 5) & 31))|(1<<((0*32+ 6) & 31))| (1<<((0*32+ 8) & 31))|(1<<((0*32+13)) & 31)|(1<<((0*32+24) & 31))|(1<<((0*32+15) & 31))| (1<<((0*32+25) & 31))|(1<<((0*32+26) & 31))), ((1<<((1*32+29) & 31))|0), 0, 0, 0, 0, 0, 0, };
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.