우분투에 시스템콜 추가하기
DESCRIPTION
흔한 내용이지만 커널 3.X 대에서 바뀐 내용이 있어서 다시 만들었습니다.TRANSCRIPT
리눅스 운영체제 실습 7-4시스템 콜 만들기
NHN NEXT 정호영* 나눔고딕 글꼴과 나눔고딕코딩 글꼴이 필요합니다 .
http://hangeul.naver.com/font ( 나눔글꼴 )http://dev.naver.com/projects/nanumfont/download( 나눔고딕코딩글꼴 )
강의 주제리눅스 커널에 시스템 콜을 추가해 봅시다 .
학습목표 “ 나도 리눅스 커널 소스 한 번 건드려 봤다” 라고 말할 수
있습니다 .
시스템 콜 만들기직접 OS 에 시스템 콜 하나 만들어 봅시다 .
OS 생각보다 별 거 아닐지도…OS 도 결국엔
사람이사람에 의해 사람을 위해 만든 소프트웨어입니다 .
이 문서는 ubuntu 12.04 LTS 32bit 를 기준으로 만들어 졌습니다 .
필요한 패키지 설치필요한 유틸리티 설치
$ sudo apt-get install build-essential fakeroot kernel-package
현재 버전에 가까운 리눅스 소스 설치$ sudo apt-get install linux-source
소스 압축 풀고 설정 복사하기
압출 풀기$ sudo –i $ cd /usr/src$ tar xvf linux-source-3.5.0.tar.bz2$ cd linux-source-3.5.0
리눅스 현재 버전 확인 및 설정 파일 복사$ uname -r$ ls /boot/config-$(uname –r) -l$ cp /boot/config-$(uname –r) .config
시스템콜 테이블에 함수 추가$ vi arch/x86/syscalls/syscall_32.tbl
#64bit 면 64 에서 작업아래 내용 추가
커널 헤더에 함수 추가$ vi include/linux/syscalls.h
제일 아래에 다음 내용 추가
실제 함수의 내용 작성디렉토리 추가
$ mkdir lsproc$ cd lsproc
실제 함수 작성$ vi Makefile # 아래 내용 한 줄 추가
$ vi lsproc.c # 다음 페이지에
lsproc.c 구현lsproc.c
커널의 태스크를 모두 출력해 주는 함수입니다 .
시스템 콜 만들기 기본 디렉토리의 Makefile 수정
테스트 코드지금 실행하면 어떤 결과 ?
커널 컴파일$ make menuconfig #shell 의 크기가 80 * 19
이상이어야 함여러가지 설정을 바꿀 수 있지만 바꾸지 않음실행 후 <Exit> 선택해서 종료함
커널 컴파일$ make –j 4 # 커널 컴파일 1 시간 기다립니다 .
$ ls lsprc –l #lsproc.o 가 생겼는지 확인합니다 .
$ make modules –j 4 # 또 한참 기다립니다 .
$ make modules_install
$ make install
$ vi /boot/grub.cfg # 내용만 확인
시스템콜 만들기재부팅후 커널 버전 확인
테스트 코드 재실행
실행했는데 또 아무것도 안 나옵니다 .
$ dmesg # 커널의 메시지는 여기서 확인