어제에 이어 리눅스 커널 시스템 콜 구현 사용자 부분에 관한 글을 써보겠습니다.
#include <linux/unistd.h>
#include <linux/errno.h>
_syscall0(int, newsyscall);
main()
{
int i;
i = newsyscall();
}
이런식으로 작성하시고요.. 위치는 아무곳이나 상관없음.. 참고로 저는 제 홈디렉터리에 넣었음.
컴파일 하믄되고여.. gcc -o 실행시킬 이름 만든파일이름.c 이런식으로여..
그리고 실행시키시믄 되고여.. 만약 에러가 뜬다면 에러를 읽어보세여..
아마 대부분 헤더파일을 찾을수 없다고 나올거구여.. 그런경우는
cd /usr/include 로 이동 : 리눅스는 기본으로 include를 헤더파일 기본으로 보는거 아시져?
rm -rf asm
ln -s /usr/src/linux-2.4/inlcude/asm-i386 /usr/include/asm : 흠 이부분은 위코드랑은 상관이 없네여.. 그치만 include <asm/ >이 있다면 이부분 링크여..
ln -s /usr/src/linux-2.4/include/linux /usr/include/linux : 실제 이부분 링크걸어주셈..
이러고 컴파일 하믄 되겠네여.. 근데 혹시 리눅스 커널 프로그래밍 이라는 책을 보시는 분중 시스템 콜 구현 관련해서 시스템 콜을 이용해서 테스크 정보구하기 소스를 돌려보려는데 안되시는 분들은여 아마도 이책 커널 버전이 낮은듯 하네여.. 그러니까 몇가지 부분을 수정해 주셔야 합니다.
이유는 task_struct 부분이 커널 2.4.20-8은 책의 내용과 다르거든요.. 혹시 의문이 드시는 분은
/usr/src/linux/include/linux/sched.h를 참조하셔서 task_struct 구조체를 한번 찾아보세여..
수정하실 부분을 잠시 꼽아보면..(참고로 책상으로 71페이지내여..)
헤더파일부터여 #include <linux/slab.h>를 포함시키셈..
그리고 나서 while 문안에 search = search->next_task;를 search = next_task(search);로 바꾸시거여. : 테스크 검색 부분이져..
다음은 실제 구조체 안에 ppid 즉 parent id를 얻는부분을 search->p_pptr->pid를 search->parent->pid로 바꾸셈.
그리고.. 음.. 우선순위 부분을여 policy라고 되있는걸 rt_policy로 바꾸면 되네여..
음 이젠 없는듯...
혹시 이상이 있으시면 제가 아까 말한 unistd.h에서 찾아보세여.. 변경된 부분이 있을거에여..
이상 허접의 리눅스 커널 시스템 콜 구현에 관한 몸으로 느낀 사실들이었습니다.
내일은 허접의 몸으로 느낀 모듈 프로그램에 관한 글을 쓰져..ㅎㅎ 에휴 겅부 열심히 해야겠당.
블로그에 글 올리기도 힘드넹..헐... 그럼 다들 열공하셈...
'System > Linux' 카테고리의 다른 글
[펌] 리눅스 커널 모듈 프로그래밍 안내서 (0) | 2005.01.18 |
---|---|
[펌] Module programming (0) | 2005.01.18 |
[펌] 리눅스명령어 (상세설명, for example) (0) | 2005.01.18 |
[펌] 리눅스 커널에서 모듈 프로그래밍 구현 (0) | 2005.01.18 |
[펌] LKM (Linux Kernel Module) Backdooring (by TrueFinder) (0) | 2005.01.14 |