gpt4 book ai didi

linux - 为 linux 编写系统调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:50 24 4
gpt4 key购买 nike

我试着写一个系统调用。我遵循了以下步骤:

linux/arch/x86/kernel/syscall_table_32.S ----> 。长系统mycall

linux/include/linux/syscalls.h --------> asmlinkage int sys mycall (int i , int j );

linux/arch/x86/include/asm/unistd_32.h ----> #define NR mycall 333

我把linux/Makefile改成了core-y += kernel/mm/fs/ipc/security/crypto/block/mycall/

我创建了一个名为 mycall 的目录。 ---->linux/mycall

在该文件中,我放置了 mycall.c :

#include <linux/kernel.h>
asmlinkageintsysmcall(int i,int j )
{
return i + j ;
}

6) 我创建 Makefile。 ---> linux/mycall/Makefile.

obj−y := mycall.o

然后当我尝试这个系统调用时,它总是返回 -1。这些行是我在 Desktop 中的测试代码。测试mycall.c

#include <stdio.h>
#include <sys/syscall.h>
#define __NR_mycall 333

int main(void)
{
int x1=10, x2=20, y ;
y = syscall (__NR_mycall, x1, x2 );
printf (”%d\n”,y );
return 0 ;
}

然后我重新编译内核。如果我编译代码,没有错。当我运行这个程序时,它不会对两个值求和。它总是返回-1。我的系统调用有什么问题? (当我重新编译内核时,系统没有浪费时间超过3秒。我认为这里可能有问题)

最佳答案

重新编译内核并重启。还是内核模块?

关于linux - 为 linux 编写系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com