임베디드 리눅스 커널 프로그래밍(3) - 시스템 호출 함수 구현
글 작성자: _rian

시스템 호출(System Call)이란?
시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.
시스템 호출 과정

시스템 호출의 구현

시스템 호출을 구현하는 sequence는 위와 같다. 아래는 sys_hello라는 시스템 호출 함수를 만드는 예시이다.
1) 시스템 호출 함수 정의
Kernel 소스의 kernel 디렉토리에 시스템 호출 함수를 정의한 프로그램 파일 (hello.c) 생성
#include <linux/kernel.h> asmlinkage void(sys_hello(){ printk("Hello, this is new system call!\n); }
- asmlinkage : stack을 통하여 parameter 전달
- fastcall : 몇개의 parameter는 register를 통하여 전달
2) 시스템 호출 번호 할당
include/asm-arm/unistd.h 파일 편집 (추가함)

unistd.h 파일의 시스템 호출 번호의 마지막에 sys_hello()를 위한 번호 322를 추가함.

sys_hello 함수는 SWI 0x900322로 호출되어 수행됨.
3) 시스템 호출 함수 등록
arch/arm/kernel/call.S 파일에 등록

마지막에 sys_hello 함수 엔트리 추가

4) Makefile 수정 및 커널 재 컴파일
추가된 hello.c가 위치한 디렉토리(kernel)의 makefile 수정
obj-y에 hello.o를 추가함.

커널 재 컴파일 및 타겟 시스템 설치
시스템 호출을 수행하는 사용자 프로그램 작성
사용자 프로그램 test-hello.c 작성하기
#include <linux/unistd.h> #include <errno.h> #define __NR_hello (__NR_SYSCALL_BASE+322) /* system call stub function */ _syscall0 (void, hello); // hello 함수 선언 – 인수 없음 int main() { hello(); return 0; }
사실, 커널에 시스템 호출을 추가하는 경우는 많지 않다고 한다. (그냥 있는거대로 쓰는 모양)
'Computer Engineering > 임베디드 시스템' 카테고리의 다른 글
리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍 (0) | 2019.06.12 |
---|---|
리눅스 디바이스 드라이버 프로그래밍(1) - 디바이스 드라이버 개요, 디바이스 드라이버 종류 (0) | 2019.06.12 |
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수 (0) | 2019.06.11 |
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항 (2) | 2019.06.11 |
ABI와 EABI (0) | 2019.06.11 |
댓글
이 글 공유하기
다른 글
-
리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍
리눅스 디바이스 드라이버 프로그래밍(2) - 모듈 프로그래밍
2019.06.12 -
리눅스 디바이스 드라이버 프로그래밍(1) - 디바이스 드라이버 개요, 디바이스 드라이버 종류
리눅스 디바이스 드라이버 프로그래밍(1) - 디바이스 드라이버 개요, 디바이스 드라이버 종류
2019.06.12 -
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수
임베디드 리눅스 커널 프로그래밍(2) - 커널 데이터타입, 커널 인터페이스 함수
2019.06.11 -
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항
임베디드 리눅스 커널 프로그래밍(1) - application 프로그래밍과 커널프로그래밍의 차이점, 커널프로그래밍 시 주의사항
2019.06.11
댓글을 사용할 수 없습니다.