자신만의 시스템 호출 Linux 구현

자신만의 시스템 호출 Linux 구현

나만의 시스템 호출을 구현하는 작업이 생겼고 최신 커널 v5.9를 사용해야 합니다. linux-5.9-rc8을 다운로드하고(안정 버전에서도 동일한 오류가 발생함) 압축을 풉니다. 그런 다음 디렉토리로 cd하십시오.

mkdir hello && cd hello

hello.c 파일을 만들고 다음 코드를 추가하세요.

#include <linux/kernel.h>
asmlinkage long sys_hello(void) 
{
    //printk prints to the kernel’s log file.
    printk("Hello world\n");
    return 0;
}

Makefile을 만들고 다음 코드를 추가했습니다.

obj-y := hello.o

그런 다음 cd .. 디렉토리의 Makefile을 열고 행을 편집하십시오.

core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/

도착하다

core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/

Arch/x86/entry/syscalls/syscall_64.tbl 파일에서 파일 끝에 추가합니다.

548     64      hello   sys_hello

include/linux/syscalls.h 파일의 끝과 #endif 문 앞에 다음을 추가합니다.

asmlinkage long sys_hello(void);

명령의 기본 구성 사용

make defconfig

마침내

make -j4

다음과 같은 오류가 발생합니다

ld: arch/x86/entry/syscall_64.o:(.rodata+0xdc0): undefined reference to `__x64_sys_hello'
make: *** [Makefile:1162: vmlinux] Error 1

제가 따라한 단계는 온라인 튜토리얼 웹사이트에서 복사한 것입니다. 거의 모든 단계를 시도했지만 커널을 컴파일하는 데 2-3시간의 대기 시간 외에는 여전히 동일한 오류가 발생했습니다. 커널을 컴파일하려면 단계에서 언급하지 않은 특정 패키지도 필요합니다.

관련 정보