unistd.h, unistd_32.h, unistd_64.h file들의 정체가 무엇인가 해서요..
제목에 적은대로, unistd.h, unistd_32.h, unistd_64.h 등의 file에 대해
몇가지 질문을 드리고 싶어서요..
지금 제가 사용하고 있는 Kernel은 2.6.24인데요,,
Kernel의 include/asm을 보면 unistd.h, unistd_32.h, unistd_64.h와
같은 file들이 보입니다..
하지만 또 /usr/include/asm에 보면 또 다른 unistd.h라는 file이 보이는데,,
내용은 거의 비슷해 보이네요..
이 두 file의 용도가 각각 다른 것일까요? 그런데 왜 이렇게 비슷한 모습으로 존재하는지..궁금합니다.
그리고 예전 version의 kernel은 어땠었는지를 비교해 봤는데,,
제가 비교해 본 예전 version이라 함은 2.6.11.4, 2.6.16.57 입니다.
뭐 특별한 이유가 있어서 이 두 version을 더 비교해 본건 아니고요 ..
회사에서 사용하는 version이어서 비교해 봤는데요..
예전 version의 unistd.h file에는 아래와 같은 define문이 존재하는데,
2.6.24에는 존재하질 않더라고요..
#define _syscall0(type,name) \
type name(void) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
: "=a" (__res) \
: "0" (__NR_##name)); \
__syscall_return(type,__res); \
}
#define _syscall1(type,name,type1,arg1) \
type name(type1 arg1) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
: "=a" (__res) \
: "0" (__NR_##name),"b" ((long)(arg1)) : "memory"); \
__syscall_return(type,__res); \
}
그럼..이러한 define을 사용하던 code들은 2.6.24에서 어떻게 porting을 해야할지..
잘 이해가 되지 않아서,,,도움을 부탁드립니다..
그리고,,_syscall() macro의 용도에 대해서도 언급해 주시면 감사하겠습니다..
_syscall0, _syscall1....
제목과 같은 macro들이 Kernel 2.6.24 에서는 다른 걸로 바뀌었나요???
댓글 달기