Вот системный вызов. Его идентификатор - 334 в таблице системных вызовов. Я также добавил 333, вызов helloworld, и он отлично работает. Вместо того, чтобы печатать сумму в системных журналах, он просто печатает Killed в терминале и внезапно заканчивается.
BUG: невозможно обработать запрос подкачки ядра в 00007ffea2ea0014
В этом, вероятно, проблема, просто из-за такой общей ошибки в интернете у меня возникают проблемы, где с ней обращаться.
#include <linux/kernel.h>
#include <linux/linkage.h>
asmlinkage long sys_cs3753_add(int a, int b, int *c){
int sum = a+b;
*c = sum;
printk(KERN_ALERT "The sum from kernel: %d", *c);
return 0;
}
Вот моя функция, вызывающая его
#include <unistd.h>
#include <sys/syscall.h>
#include <stdio.h>
#include <stdlib.h>
int main (void){
//hello world call, returns 0
printf("%ld",syscall(333));
//add call
int c;
syscall(334, 4, 5, &c);
return 0;
}
Вот некоторые из журналов успешной печати «Здравствуй, мир» вниз.
[ 55.762997] hello world
[ 55.763035] BUG: unable to handle kernel paging request at 00007ffea2ea0014
[ 55.763040] IP: sys_cs3753_add+0xf/0x20
[ 55.763041] PGD 80000000783ad067 P4D 80000000783ad067 PUD 7894b067 PMD 78bd5067 PTE 800000001d66a867
[ 55.763044] Oops: 0003 [#1] SMP PTI
[ 55.763046] Modules linked in: vmw_vsock_vmci_transport vsock crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcbc aesni_intel aes_x86_64 crypto_simd joydev input_leds mac_hid glue_helper serio_raw vmw_balloon cryptd intel_rapl_perf i2c_piix4 vmw_vmci binfmt_misc shpchp parport_pc ppdev lp parport autofs4 hid_generic usbhid hid vmwgfx ttm psmouse drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm mptspi e1000 mptscsih mptbase ahci libahci scsi_transport_spi pata_acpi
[ 55.763065] CPU: 0 PID: 1667 Comm: test Not tainted 4.15.18os3753v1add #4
[ 55.763066] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/19/2017
[ 55.763067] RIP: 0010:sys_cs3753_add+0xf/0x20
[ 55.763068] RSP: 0018:ffffb05501a9ff28 EFLAGS: 00010206
[ 55.763069] RAX: ffffffff8fa6ead0 RBX: ffffb05501a9ff58 RCX: 0000000000000000
[ 55.763070] RDX: 00007ffea2ea0014 RSI: 0000000000000009 RDI: ffffffff90ac2545
[ 55.763071] RBP: ffffb05501a9ff48 R08: 0000000000000001 R09: 00007ffea2ea0100
[ 55.763072] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
[ 55.763073] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[ 55.763074] FS: 00007f2a2f46e700(0000) GS:ffff951abb600000(0000) knlGS:0000000000000000
[ 55.763075] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 55.763076] CR2: 00007ffea2ea0014 CR3: 0000000078396005 CR4: 00000000003606f0
[ 55.763114] Call Trace:
[ 55.763118] ? do_syscall_64+0x73/0x130
[ 55.763121] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
[ 55.763123] RIP: 0033:0x7f2a2efa24d9
[ 55.763124] RSP: 002b:00007ffea2ea0008 EFLAGS: 00000202 ORIG_RAX: 000000000000014e
[ 55.763125] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f2a2efa24d9
[ 55.763126] RDX: 00007ffea2ea0014 RSI: 0000000000000005 RDI: 0000000000000004
[ 55.763127] RBP: 00007ffea2ea0020 R08: 0000000000000001 R09: 00007ffea2ea0100
[ 55.763128] R10: 0000000000000000 R11: 0000000000000202 R12: 00000000004004e0
[ 55.763128] R13: 00007ffea2ea0100 R14: 0000000000000000 R15: 0000000000000000
[ 55.763130] Code: 00 55 48 c7 c7 36 25 ac 90 48 89 e5 e8 9b f7 07 00 31 c0 5d c3 90 90 90 90 90 90 90 0f 1f 44 00 00 55 01 fe 48 c7 c7 45 25 ac 90 <89> 32 48 89 e5 e8 77 f7 07 00 31 c0 5d c3 90 90 90 0f 1f 44 00
[ 55.763148] RIP: sys_cs3753_add+0xf/0x20 RSP: ffffb05501a9ff28
[ 55.763149] CR2: 00007ffea2ea0014
[ 55.763150] ---[ end trace 520ce2a21074eada ]---