KernelProgramming-printk

커널의 나만의 함수를 시스템 콜(함수)로 만들어보기

1시스템 콜을 등록하자

리눅스 커널 2.4버전이 /usr/src/linux-2.4.32 의 디렉토리에 있다고 하면

/usr/src/linux-2.4.32/include/asm-i386/unistd.h
파일에서 내가 만들 함수를 추가한다

#define __NR_exit_group 252
아래에 추가할것(커널 2.4 일때)
만약 거기에 글자가 있더라도 수정해도 된다
(라인수가 맞게 작성하자 예를들어서 252밑 라인에)

ex>
#define __NR_cpuinfo 253

다음에는
/usr/src/linux-2.4.32/arch/i386/kernel/entry.S 파일에 역시 전거와 비슷하게
라인수를 맞춰서 적는다

ex>
.long SYMBOL_NAME(sys_cpuinfo)
참고로 라인수는 위쪽라인에 옆 주석에 대충 5인가 10사이마다 나와있다
그것을 잘 맞춰서 할것(앞에서 253이었다면 이번에도 253 맞춰서 적어주어야함)

Plus...C에서는 인수가 6개 정도 밖에 안된다고 한다나

2함수가 될 본제를 작성한다

/usr/src/linux-2.4.32/kernel/cpuinfo.c(편의상 kenel 디렉토리에 작성)

#include<linux/linkage.h>
#include<linux/unistd.h>

asmlinkage int sys_cpuinfo()
{
   printk("CPU INFO\n");//C에서 printf 함수와 사용법이 비슷하다
   return 0;
}

3/usr/src/linux-2.4.32/kernel/Makefile 에다가 오브젝트?를 추가해준다
obj-y = sched.o dma.o fork.o exec_domain.o panic.o printk.o \
         module.o exit.o itmer.o info.o time.o softirq.o resource.o
         중략....
         signal.o sys.o kmod.o ......(맨뒤에다가)  cpuinfo.o 추가(아마도 c파일이랑 같은 파일명으로 해야하는거 같다)

4 unistd.h 파일을 복사해 준다

cp /usr/src/linux-2.4.32/include/asm-i386/unistd.h /usr/include/asm/unistd.h

5 시스템 콜을 이용할 프로그램을 작성한다

#include<linux/unistd.h>
_syscall0(int,cpuinfo);

main()
{
  int i;
  i=cpuinfo();
}

6 컴파일
7 출력이 되지 않으면 로그 파일을 확인해본다
ex>/var/log/message.log



쏫스의 자세한 내용은 본인도 모름... 니마~ 이 라인 어떻게 되는거삼~ 하고 물으면 본인은 좌절할수 밖에 없음.;
예>main함수가 왜 저따위로 생겼삼? 이런거.. 내용은..C언어 안다면 대충 무슨짓하는지는 알수 있을듯

'Programming > Kernel' 카테고리의 다른 글

확실히 다르잖아!!  (4) 2008.04.15
ctags 설정  (4) 2008.03.11
본체 전원키로 시스템 off 시키기  (4) 2007.04.22
운영체제 없이 화면에 A를 찍어보아요...  (6) 2007.04.06
KernelProgramming-printk  (5) 2006.07.24
Kernel Panic!  (2) 2006.07.21
Trackback 0 Comment 5
  1. Favicon of http://blog.naver.com/khmirage.do BlogIcon 환상경 2006.07.25 08:34 address edit & del reply

    음...저건 뭐하는걸까요~~~?

    • Lowid 2006.07.25 22:43 address edit & del

      커널을 이용한 print 함수 실습 ...
      정도 된다랄까요..
      그저 책 & 인터넷에서 하는 방법을
      나름대로 정리한거 뿐이랍니다 .

  2. Favicon of http://blog.naver.com/faust2nd BlogIcon Faust2nd 2006.07.25 21:33 address edit & del reply

    저도 몰라요^^ 어려운거네요

    • Lowid 2006.07.25 22:44 address edit & del

      저두 잘 몰라요~
      한번 시도는 해봐야 겠는데..
      하면서 대충 끄적인거 뿐인걸요 ㅡ

  3. Favicon of http://lsm1987.tistory.com BlogIcon 에그 2009.03.11 16:16 address edit & del reply

    숙제로 구글링하다 들어와보니 또 자네 블로그구만 이런 대단한 살람 =_=ㅋㅋㅋ
    2.6.24 버전에서 시스템콜 추가하고, 커널을 컴파일하고 시스템콜 부르는 파일을 컴파일 하는데, 새로 추가한 시스템콜 상수(본문에서는 __NR_cpuinfo)가 정의가 안되어있다고 하는구려 =_=;;
    /usr/include/asm/unistd.h에다가 __NR_cpuinfo를 추가하면 돌아가긴 하는데... 그냥 본문의 4번처럼 소스의 unistd.h를 복사해서 옮겨줘버려도 동작엔 지장이 없을까? =_=;;;

prev 1 2 3 4 5 6 7 next