Sistemul de operare este Ubuntu 20.10
Sursa kernelului este linux_5.8.0-59.66
Port modificările kernelului de la Centos 7 Rhel 7.9 la Ubuntu.
Sursa originală a nucleului Ubuntu, nemodificată, compilează și rulează curat pe această mașină. Configurarea compilatorului pare să funcționeze corect.
Problema mea actuală este legată de un apel de sistem pe care l-am adăugat. Eroarea generată este -
LD .tmp_vmlinux.btf
ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): referință nedefinită la `__x64_sys_s_enable'
BTF .btf.vmlinux.bin.o
Anomalie de segmentare (core-dumping)
LD .tmp_vmlinux.kallsyms1
.btf.vmlinux.bin.o: fișierul nu este recunoscut: formatul fișierului nu este recunoscut
make: *** [Makefile:1163: vmlinux] Eroare 1
Am căutat și am căutat pe google această eroare originală „referință nedefinită”, am găsit posibile remedieri care nu au funcționat.
Iată pașii pe care i-am folosit pentru a adăuga apelul de sistem, care a funcționat inițial pe Centos 7 și RHEL 7.9.
S-a modificat /SOURCE-DIRECTORY/include/linux/syscalls.h comentând linia originală și adăugând referința la __64 (inclusiv o linie goală deasupra acesteia)-
asmlinkage long __64_sys_s_enable(int s_enable_flag);
//asmlinkage long sys_s_enable(int s_enable_flag);
Modificat /SOURCE-DIRECTORY/arch/x86/include/asm/syscalls.h adăugând -
# ADIȚIONARE SYSCALL
440 64 s_enable sys_s_enable
Câmpurile sunt delimitate de TAB și nu am adăugat niciun rând necompletat.
Am creat directorul sursă și fișierele -
/SOURCE-DIRECTORY/s_enable care conține s_enable.c.
s_enable.c în întregime este
#include <linux/kernel.h>
extern int s_enable_flag;
asmlinkage long sys_s_enable(int i)
{
// printk(KERN_INFO "În ORIGINAL SYSCALL s_enable\n");
s_enable_flag = i;
întoarce 0;
}
Și a adăugat directorul syscall corespunzător la Makefile.
core-y += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/ s_enable/
Și a alergat „sudo make”.
Nu sunt sigur cu ce aș putea face greșit, deoarece „make” funcționează cu sursa originală a nucleului, iar apelul de sistem pe care încerc să îl adaug a funcționat pe celelalte distribuții menționate.
Vă mulțumim pentru orice contribuție pe care o puteți oferi.