Po merrem me thirrjet e sistemit. Kam shtuar dy të reja dhe kam verifikuar se funksionojnë duke përdorur telefonatat në syscall
.
Do të doja që numrat e syscall-it të ishin në një kokë, në mënyrë që hapësira e përdoruesve të mos ketë nevojë ta dijë në mënyrë eksplicite numrin e syscall-it.
Në arch/x86/syscalls/syscall_64.tbl
kam:
317 64 krun_read_msrs sys_krun_read_msrs
318 64 krun_reset_msrs sys_krun_reset_msrs
Dhe disa grepping sugjerojnë që kbuild ka gjeneruar automatikisht makrot për sistemet e reja:
$ ag __NR_krun *
arch/x86/include/generated/uapi/asm/unistd_64.h
321:#define __NR_krun_read_msrs 317
322:#define __NR_krun_reset_msrs 318
Emri i skedarit sugjeron që nuk kam nevojë t'i shtoj shënimet me dorë, por kjo është në kundërshtim me atë që duhet të thonë dokumentet e kernel Linux:
Some architectures (e.g. x86) have their own architecture-specific syscall tables, but several other architectures share a generic syscall table. Add your new system call to the generic list by adding an entry to the list in include/uapi/asm-generic/unistd.h:
#define __NR_xyzzy 292
__SYSCALL(__NR_xyzzy, sys_xyzzy)
Epo, sistemet e mia janë specifike x86_64, pasi ato lexojnë dhe shkruajnë MSR që gjenden vetëm në çipat Intel. Kështu që pas kësaj, unë shkova duke gërmuar për të parë nëse mund të gjeja kokën specifike të harkut për sistemin tim amd64.
Ju do të prisni që të jetë nën arch/x86_64
, por nuk ka fare përfshirje atje. Pra, supozoj se x86_64 trashëgon nga x86
. Duke qenë kështu, titulli specifik i harkut duhet të jetë:
arch/x86/include/uapi/asm/unistd.h
Nëse e hapni atë, është vetëm një mbështjellës i vogël për t'u dërguar në bazë të harkut:
# ifdef __i386__
# include <asm/unistd_32.h>
# elif defined(__ILP32__)
# include <asm/unistd_x32.h>
# else
# include <asm/unistd_64.h>
# endif
Pra, me sa duket është projektuar për të marrë /usr/include/x86_64-linux-gnu/asm/unistd.h
, por kjo nuk përfshin ende numrat e mi të ri syscall.
Unë do të prisja që objektivi headers_install
të instalonte titujt e rinj (ndoshta), por mjerisht jo.
Jam konfuz. A duhet t'i shtoj syscal-et e mia të reja në një skedar manualisht apo jo? Nëse po, cili skedar? Nëse jo, si mund t'i ekspozoj makrot __NR_*
të krijuara automatikisht në hapësirën e përdoruesit në një vendndodhje standarde?
Faleminderit