'kernel'에 해당되는 글 7건

  1. 2006.07.24 KernelProgramming-printk 5
  2. 2006.07.21 Kernel Panic! 2

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
Kernel Panic!  (2) 2006.07.21

Kernel Panic!

커널 컴파일...

한 7번만에 성공~

지금 새로 컴파일된 커널에서 글을 쓰고 있어요~~ 하하하~

2.6.17커널인데.. 뭐 Archlinux에선 원래 최신 버젼을 지원하지만..

커널 프로그래밍을 하는걸 계기로 한번 해봤습니다..

커널 플그래밍 책이 2.4버전이길래... 그거 컴파일하려고 했는데.. 실패해서.. 2.6.17을 컴파일하게 됬네요

뭐 결국 2.4버전은 아직 하진 못했지만요..(커널 버젼이 틀려서 그런지 방법이 좀 다른거 같군요)..

이번 컴파일할땐.. 모듈을 안넣고.. 모두 커널에다 넣어버려서 lsmod명령어를 쳐도 모듈이 하나도 안잡히는..

모듈안쓰고 죄다 커널에다 넣으니까는.. 따로 드라이버 깔아주고 설정하구 안해도 되니까 더 편한거 같은..

속도는.. 빨라저야 하는거 같은데.. 잘 모르겠어요.. 제가 게임같은걸 하는게 아니니..

커널 컴파일... 후기

커널 컴파일 하기전에.. 현재 컴퓨터의 자세한 사항을 먼저 조사해 주세요.. 정말 중요합니다..
ex>보드,CPU,사운드카드,랜카드...등.

Kernel Panic ?? 이라면.....

VFS어쩌구 하면서 grub설정 틀렸다고 바꿔라 이렇게 비슷하게 나왔던거 같은데..

뭐 결과적으론 root 파티션을 읽을수 없다~ 이러면서 패닉 걸려버리더라는...

아마.. 이거와 비슷할겁니다

VFS: Cannot open root device "hda2" or 03:05
Please append a correct "root=" boot option
<데뱐 유저~에서 참조>

make menuconfig 에서..
Device Driver-> ATA/ATAPI/MFM/RLL support->PCI IDE chipset support(체크후,컴터에 해당하는 장치가 있으면 체크하고  다음 없으면 끝 )->Generic PCI bus-master DMA support 에서 자신에가 맞는것 선택..

에.. 이게 제일 중요한거 였어요.. 이걸 체크 해주니깐 Kernel Panic 안걸렸습니다..

자아.. 인제 사운드 카드랑.. 랜카드를 인식시켜주면 됩니다..
랜카드 선택할때 주의점은... 만약 보드안에 랜카드가 내장되어 있다면.
그 내장된 보드를 선택하셔야 합니다

예를 들어서 nforce인데 Realtek이다 하면 Realtek을 선택하는게 아니라 nforce를 선택 해야 한다는 거
입니다..(역시 설명이 좀 이상함,,,)

사운드 카드를 인식시킬때는.. 커널 디폴트로 ALSA는 선택 되더군요.
(아마 menuconfig자체가..사용자의 컴터를 조사하고 디폴트 값은 만들어 주는거 같았어요)
거기서 OSS설정을 추가해주시는게 좋을겁니다..

이외에도.. 콘솔 그래픽 설정.. 무슨 장치 설정.. 엄청 많았습니다.. 저야 다 모르지만.. 아는것 필요한것만

체크하고 make로 컴파일 했습니다..

그다음엔 모듈을 먹여야 하는데..저는 모듈을 하나도 안뒀으니~ PASS~하고 그냥 /boot에 복사하고서

grub/menu.lst에서 그냥 커널 이미지만 추가해 뒀습니다~

PS:lsmod해서 아무것도 안뜨니까 .. 기분이 이상하네요 ㅋ..(저번엔 more써서 몇페이지 정도 였는데.)

'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
prev 1 2 next