나만의 시스템 호출을 구현하는 작업이 생겼고 최신 커널 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시간의 대기 시간 외에는 여전히 동일한 오류가 발생했습니다. 커널을 컴파일하려면 단계에서 언급하지 않은 특정 패키지도 필요합니다.