시스템콜 hello world 프린트 하기
안녕하세요 밑에 도움을 요청했는데 제가 아직 많이 미숙해서 이해가 안가서 다시 한번 올립니다.
제가 처리한 순서대로 한번 오려보겠습니다. 어디가 잘못되었는지 알려주세요~~
리눅스 2.4.20-8 버전에서의 Hello World 나타내기
환경 : VMware에서의 레드헷을 사용
레드헷을 설치후 커널 bzImage를 만든다 //단지 현제 커널이 잘 돌아가는지 실험
레드헷을 설치후 처음 컴파일 하는것인데 단지 커널이미지만 만들어도 무관한지 궁굼함.
menuconfig에서 설정은 해주었습니다.
linux-2.4>make menuconfig // 각 설정을 해주었다.
linux-2.4>make bzImage
이후 linux-2.4/arch/i386/boot/bzImage파일을 이름을 mybzImage로 바꾸어 /boot 로 복사한다
linux-2.4>make /arch/i386/boot/bzImage /boot/mybzImage
이후 /boot/grub/brub.conf파일을 설정해준다.
linux-2.4>reboot
안전하게 실행된것을 확인후
시스템콜을 추가한다.
/usr/src/linux-2.4/include/asm-i386/unistd.h 파일에 mysyscall을 추가한다
/usr/src/linux-2.4/arch/i386/kernel/entry.S 파일에 mysyscall을 추가한다.
/usr/src/linux-2.4/kernel/안에 newsys.c파일을 만들고
/usr/src/linux-2.4/kernel/안에 Makefile에 newsys.o를 추가한다.
linux-2.4> make bzImage
linux-2.4/arch/i386/boot/bzImage파일을 이름을 mybzImage로 바꾸어 /boot 로 복사한다
linux-2.4>make /arch/i386/boot/bzImage /boot/mybzImage
이후 /boot/grub/brub.conf파일을 설정해준다.
linux-2.4>reboot
home 디렉토리에서 hello폴더를 만들고 그안에 hello.c파일 만들었다.
#include
#include
_syscall0(int,mysyscall);
main()
{
int i;
i=mysyscall();
}
그리고 헤더파일앞에 linux는 무엇을 의미하는지도 알려주세요~ 저렇게 쓰면 __NR_mysyscall 선언안되었다고 해서
제가 절대 경로/usr/src/linux-2.4/include/asm-i386/ 이렇게 인클루드 하니깐 컴파일시 errno.h가 선언되어있지 않다고 나옵니다. 분명 인클루드 했는데
그리고 한가지만 더요~
usr/include 안에 있는 헤더파일들과
/usr/src/linux-2.4/include/asm-i386/안에 있는 헤더파일의 차이가 뭐예여??
파일 이름은 같은데 내용이 틀려서요
많이 초보자라 고수님들이 보시면 부끄~~
부탁드립니다.
댓글 달기