구현 방법을 이해하기 위해 XV6 (documentation available here 및 Github here)에서 간단한 시스템 호출을 작성하려고합니다. 나는 user.h
에서 22 XV6에서 UNIX 시스템 호출을 이해하려고 시도합니다.
int hello (void);
syscall.c
에서
- 을 사용
extern int sys_hello(void)
을 선언syscall.h
에서 - 는, 전화 번호 등
SYS_hello
정의static int (*syscalls[])(void)
배열에[SYS_hello] sys_hello
을 추가 한usys.S
에SYSCALL(hello)
을 매크로에 추가했습니다. , 단순히
Makefile
에hello()
시스템 호출- 추가
hello.c
를 호출hello.c
만든 바닥int sys_hello(void) { cprintf ("Hello World System Call\n"); return 0; }
의 기능
sys_hello(void)
을 추가하고 예상대로 작동 코드
을 달렸다.
지금 내 질문에 syscall.c의 배열이 명령의 색인과 syscall.h 파일의 시스템 호출 번호가 일치하는 것 같습니다. 그러나 hello 위치를 두 번째 자리로 이동하면 syscall.c를 사용하고 syscall.h의 시스템 명령 번호를 22로 유지 시키려면 이전과 같이 시스템 명령이 작동합니다. 어디에서 나는 그것이 깨질 것이라고 예상했다. 배열 syscall.c가 syscall.h 시스템 호출 번호에 어떻게 매핑되는지 이해하도록 도와 줄 수 있습니까?
저는이 질문이 어리석은 것처럼 보이면 제게 XV6와 C에 상당히 익숙하지 않아 제발 화를 내지 않으려합니다. 당신이 값을 할당하는 인덱스에 지정할 수있는 github.com/AdityaSingh/XV6는