1 / 26

임베디드시스템 1 10 주차 . 커널 이미지 생성과 시스템 호출

임베디드시스템 1 10 주차 . 커널 이미지 생성과 시스템 호출. 수원과학대학 정보통신과. 커널 컴파일과 포팅 [1]. 커널 (kernel) 운영체제의 핵심을 이루는 요소로서 컴퓨터 내의 자원을 사용자 프로그램이 사용할 수 있도록 관리하는 프로그램 컴파일 (compile) Compiler 를 이용하여 program source 로부터 수행가능한 binary code 를 만드는 과정 Linux source 는 대부분 C 언어로 작성되어 있음 커널 포팅 (kernel porting)

cuyler
Download Presentation

임베디드시스템 1 10 주차 . 커널 이미지 생성과 시스템 호출

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 임베디드시스템110주차. 커널 이미지 생성과 시스템 호출 수원과학대학 정보통신과

  2. 커널 컴파일과 포팅 [1] • 커널(kernel) • 운영체제의 핵심을 이루는 요소로서 컴퓨터 내의 자원을 사용자 프로그램이 사용할 수 있도록 관리하는 프로그램 • 컴파일(compile) • Compiler를 이용하여 program source로부터 수행가능한 binary code를 만드는 과정 • Linux source는 대부분 C 언어로 작성되어 있음 • 커널 포팅(kernel porting) • 커널 소스를 타겟 시스템에 적합하게 프로그래밍 및 컴파일해 생성된 커널 이미지를 타겟 시스템에 적재하는 과정 • 이번 실습의 목적  커널 컴파일과 포팅 • X-Hyper270-TKU target board에 맞게 커널 환경을 설정하고 커널을 컴파일하여 target board에 포팅함 수원과학대학 정보통신과

  3. 커널 컴파일과 포팅 [2] • 커널 환경 설정 유틸리티 • 텍스트 기반의 make config • 텍스트 메뉴 기반의 make menuconfig  우리는 이것을 사용함 • X 윈도우 기반의 make xconfig • 커널 컴파일과 포팅의 전체적인 과정 • make xhyper270tku_defconfig • 처음 커널을 컴파일할 때 필요한 옵션을 기본적으로 X-Hyper270-TKU에 맞추어 줌 • make menuconfig • 메뉴를 통해 kernel의 configuration을 수행함 • 커널을 built-in(*) 할것인지 module(M) 형태로 할 것인지 등을 선택 • 새로운 메뉴 추가도 가능 • make zImage • Kernel image 생성 • tftp zImage kernel • flash kernel 수원과학대학 정보통신과

  4. 커널환경설정 <linux>/arch/arm/Kconfig 주어진 화면에 모두 표시할 수 없으면 나타나는 표식임 수원과학대학 정보통신과

  5. 실습 10-1 커널 이미지 생성 • 커널 압축 파일이 있는 디렉토리로 이동해 압축 해제 • 압축을 푼 파일을 포함하는 디렉토리와 설정 관련 파일의 존재 여부 확인

  6. 실습 10-1 커널 이미지 생성 • autoconf.h 파일이 생성되었는지 조사하고 메뉴 설정 단계를 시행

  7. 실습 10-1 커널 이미지 생성 • 커널 메뉴 설정 화면이 나타나면 [Tab] 키를 사용해 <Exit> 컨트롤로 이동한 후 [Enter] 키 입력 • 새로운 커널 설정을 저장하기 위해 <Yes>를 선택한 후 [Enter] 키 입력

  8. 실습 10-1 커널 이미지 생성 • .config 파일과 autoconf.h 파일을 다시 확인 후 make로 커널 이미지 생성 • 커널 이미지 생성을 확인한 후 생성된 zImage를 /tftpboot 디렉토리로 복사 • 부트로더 명령을 사용해 타겟 시스템에 전송한 후 퓨징 • hybus> tftp zImage kernel • hybus> flash kernel • 타겟 시스템을 재부팅 ① ② ③ ① ②

  9. 10.3 시스템 호출의 개요 • 시스템 자원을 사용자가 함부로 잘못 사용할경우 시스템 오류 발생 • 대책 • 권한 레벨을 설정하여 시스템 공간을 사용자 공간과 커널 공간 구분 • 사용자가 커널 공간에 대한 접근은 시스템 호출(system call)로만 가능하도록 제한 • 효과: 컴퓨팅 자원을 안전하게 보호하고 커널 수행을 안전하게 유지 • 시스템 호출(system call)이란? • 사용자 영역에서 커널 영역의 자원을 사용하기 위하여 사용하는 함수 • 시스템 호출 시 소프트웨어 인터럽트(interrupt)인 트랩(trap)이 발생하여 특권 레벨로 모드가 변경됨 시스템 자원 수원과학대학 정보통신과

  10. 리눅스에서 지원하는 시스템 호출들 • 프로세스 관리 • fork(), execve(), getpid(), signal() 등 • 파일 시스템 • open(), read(), write() close() 등 • 메모리 관리 • brk() 등 • 네트워크 관리 • socket(), bind(), connect() 등 • 기타 시스템 정보나 제어 • time() 등 수원과학대학 정보통신과

  11. 10.4 시스템 호출 동작 과정 • 사용자 프로그램의 번역 과정 수원과학대학 정보통신과

  12. fork 시스템 호출 과정 참고: fork() 함수 –자식 프로세스 생성 ① fork() 시스템 호출 함수를 사용하려면 fork() 함수 정보가 있는<linux>/include/linux/unistd.h 헤더 파일을 include. 링커로 라이브러리에서 대응하는 함수와 연결 ② 라이브러리 내부의 fork() 함수: “swi 900002” ③ 호출 번호 2에 해당하는 시스템 호출 함수 sys_fork() 실행 ④가상 파일 시스템을 통해 커널 자원인 파일, 디렉토리, 디바이스 등을 하나의 파일처럼 접근 수원과학대학 정보통신과

  13. 10.5 시스템 호출 구현 수원과학대학 정보통신과

  14. 시스템 호출 함수 정의 • 시스템 호출 함수는 특정 디렉토리에 저장 • 프로세스 관련 함수: <linux>/kernel • 파일 시스템 관련 함수: <linux>/fs • 특정 프로세서 관련 함수: <linux>/arch • ARM 프로세서 관련 함수: <linux>/arch/arm/kernel • 시스템 호출 함수는 “sys_함수명”이라는 이름으로 정의, 사용자 프로그램에서는 접두사 없이 함수명만 사용 • 시스템 호출 함수는 커널 함수이므로 헤더 파일은 <linux>/include 디렉토리에 존재 수원과학대학 정보통신과

  15. 시스템 호출 함수 구현 절차 • 시스템 호출 번호 할당 • <linux>/include/asm-arm/unistd.h 헤더 파일에 새로운 시스템 호출 함수 번호를 할당 • 시스템 호출 함수 등록 • <linux>/arch/arm/kernel/ 디렉토리에 존재하는 calls.S에 새로운 시스템 호출 함수 등록 • 커널 빌드 및 타겟 시스템에 퓨징 • 시스템 호출 함수 파일이 존재하는 동일한 디렉토리의 Makefile을 수정한 후 커널 이미지를 다시 빌드 • 빌드된 커널 이미지를 타겟 시스템의 플래시에 퓨징 • 시스템 호출 함수의 검증 • 시스템 호출 스텁 함수(system call stub function) 사용 • _syscallx (type, name, type1, arg1, type2, arg2, …, typex, argx); 수원과학대학 정보통신과

  16. 실습 10-2 ~ 10-5 시스템 호출 함수 작성 및 커널 빌드 • 10-2 시스템 호출 함수 정의 • 에디터를 사용해 <linux>/kernel/hello.c 작성 • 10-3 시스템 호출 번호 할당 • <linux>/include/asm-arm/unistd.h 헤더 파일의 마지막 부분에 새로운 시스템 호출 함수에 대한 고유 번호를 추가 • 10-4 시스템 호출 함수 등록 • <linux>/arch/arm/kernel/calls.S 파일에 시스템 호출 함수를 마지막 행에 추가 • 10-5 커널 재컴파일 및 타겟 시스템에 퓨징 • 에디터를 사용해 <linux>/kernel/Makefile 을 수정 • 커널을 다시 빌드하고 커널 이미지를 /tftpboot로 복사 • 빌드한 커널을 타겟 시스템에 탑재하고 재부팅 수원과학대학 정보통신과

  17. 실습 10-2 시스템 호출 함수 정의 • hello.c 작성((<linux>/kernel/hello.c)) 01 #include <linux/kernel.h> 02 03 asmlinkage void sys_hello() 04 { 05 printk ("Hello, this is new system call!\n"); 06 }

  18. 실습 10-3 시스템 호출 번호 할당 • <linux>/include/asm-arm/unistd.h 헤더 파일을 염. • 새로운 시스템 호출 함수에 대한 고유 번호 추가 ②

  19. ② 실습 10-4 시스템 호출 함수 등록 • <linux>/arch/arm/kernel/calls.S에 시스템 호출 함수 추가

  20. 실습 10-5 커널 재컴파일 및 타겟 시스템에 퓨징 • 에디터를 사용해 <linux>/kernel/Makefile 수정 • <linux> 디렉토리로 이동

  21. 실습 8-4 커널 재컴파일 및 타겟 시스템에 퓨징 • 커널을 다시 빌드하고 커널 이미지를 /tftpboot로 복사 • 빌드한 커널을 타겟 시스템에 탑재하고 재부팅

  22. 10.5.5 시스템 호출 함수의 검증 • 시스템 호출을 사용하는 두 가지 방법 • 응용 프로그램에서 시스템 호출 직접 사용 • 라이브러리를 통해 시스템 호출 사용  라이브러리 구축 필요 • 응용프로그램에서 시스템 호출을 직접 사용하려면 _syscall0와 같은 매크로(시스템 호출 스텁 함수, system call stub function)를 사용한다. • System call stub function의 형식 • _syscallx(type, name, type1, arg1, type2, arg2, ..., typex, argx); • syscallx, typex, argx의 x: 인자(argument)의 개수임 • type: 시스템 호출 함수의 반환 형식 • name: 시스템 호출 함수 이름으로 sys_접두사를 제거한 이름 • arg1, arg2 등은 인자. • type1, type2 등은 대응하는 인자의 형식 • 예 • _syscall0(void, hello) • 시스템호출함수이름 hello, 반환값 void, 인자없음 • 문자열 형식 인자 2개, 정수를 반환하는 testcall()이라는시스템 호출함수를 사용하는 매크로 _syscallx의 형식 • _syscall2(int, testcall, char *, argc1, char *, arg2) 수원과학대학 정보통신과

  23. 실습 10-6 시스템 호출 함수 테스트 • test-hello.c 프로그램 작성(08/hello/test-hello.c ) 01 #include <linux/unistd.h> 02 #include <errno.h> 03 04 /* system call stub function */ 05 _syscall0 (void, hello); 06 07 int main() 08 { 09 hello(); 10 return 0; 11 }

  24. 실습 10-6 시스템 호출 함수 테스트 • Makefile 작성 및 컴파일(08/hello/Makefile ) 01 # Modify /embed/kernel/linux to your kernel home directory 02 KDIR := /embed/kernel/linux/include 03 CFLAGS := -I$(KDIR) 04 05 test-hello : test-hello.c 06 arm-linux-gcc $(CFLAGS) -o test-hello test-hello.c 07 08 clean: 09 rm -f test-hello

  25. ② ③ 실습 10-6 시스템 호출 함수 테스트 • Make 유틸리티를 이용해 응용프로그램 컴파일 • 컴파일된 응용 프로그램을 타겟 시스템으로 전송 • 타겟 시스템에서 시스템 호출을 사용하는 응용프로그램 테스트

  26. 실습문제 자기이름을 호출하는 시스템 호출 함수 whoami를 작성한 후 타깃 시스템에서 이를 호출하는 테스트 프로그램을 검증하시오. 실행예) [root@xhyper ~]#./test-whoami My name is Myung-Moon Lee. 수원과학대학 정보통신과

More Related