Я хочу добавить документацию по системному вызову, и у меня есть одна функция asmlinkage. Функция должна принимать 2 параметра. Эти параметры поступают из документации, которую я называю системным вызовом. Ниже я показал документы c:
#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main(int argc,char*argv[])
{
long int amma = syscall(335,argc,argv);
printf("System call functions returned %ld\n", amma);
return 0;
}
Как видите, я хочу передать массивы argc
и argv
char для выполнения некоторых файловых операций.
Сначала я написал asmlinkageвот так:
asmlinkage long function(int argc,char *argv[]){
if(argc==2)
printk(KERN_INFO "Hello world"); // but it can not take argc
}
Кроме того, я добавил в строку к syscalls.h:
asmlinkage function(int,char*[]);
Затем я правильно скомпилировал, но когда я начал запускать свой код в пространстве пользователя, мой системный вызов был убит.
Я нашел ссылку на этом сайте, но не смог ее скомпилировать. Владелец темы использовал "SYSCALL_DEFINE", но я столкнулся со многими ошибками кода, которые я не мог понять.