기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.


Linux kernel을 분석중인데 

코드를 아무리 봐도 System call Process가 이해가 안됩니다.


high vector에서 점프해서 

system call table을 이용하여


/arm/arm/kernel/calls에 있는 

sys_xxx() 함수를 호출하는 부분까지는 이해가 됬는데

문제는 sys_xxx() 함수들의 원형잉 도대체 어디있는지를 모르겠네요


Xen에서 ioctl system call을 이용하길레

sys_ioctl로 분기하는 부분까지는 이해는 되었는데

sys_ioctl의 정의가 어디있는지를 모르니 분석이 안되고 있는상태입니다...


루비니

2014.07.22 23:35:37
*.218.12.26

ARM의 경우 시스템콜을 하면 SWI 명령에 의해 software interrupt (exception) 이 발생하고,

User 영역에서 내려온 콜번호와 말씀하신 시스템콜 테이블을 이용해 해당함수로 가죠..

sys_xxx() 들은 성격에 따라 여기저기 있는걸로 아는데,

(arch/arm/kernel, fs, net, ..) ctags로 찾아봐도 나올겁니다.

sys_ioctl의 경우 fs/ioctl.c 에 있는거 같네요..


Supsupi

2014.07.23 00:45:18
*.254.202.140

답변 감사드립니다.


ctag, cscope, grep으로 다 뒤져봐도 안나옵니다. ㅠ

예전 커널을 볼때는 sys_ioctl()함수를 fs/ioctl.c에서 본거 같은데


제가 분석하고 있는 kernel의 fs/ioctl.c에는 sys_ioctl()함수가 없습니다.

당황스럽습니다.

루비니

2014.07.24 02:14:44
*.218.12.26

fs/ioctl.c 안에

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)

위와 같이 매크로를 이용해 정의되어 있네요..

include/linux/syscalls.h 에 관련 매크로들이 있고요..

결국 'ioctl' 이라는 name 과 3개의 arguments 들이 결합되어 기존의 sys_ioctl 이 되네요.. 

Supsupi

2014.07.24 18:16:43
*.254.202.140

으허~!! 감사드립니다.(_ _)

List of Articles
번호 제목 글쓴이 날짜 조회 수

사용자 로그인