임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Similar documents
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

untitled

KEY 디바이스 드라이버

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Chapter #01 Subject

<4D F736F F F696E74202D205BBAB0C3B75D20B8AEB4AABDBA20B5F0B9D9C0CCBDBA20B5E5B6F3C0CCB9F620B8F0B5A82E >

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

Mango220 Android How to compile and Transfer image to Target

Abstract View of System Components

슬라이드 1

Microsoft PowerPoint APUE(Intro).ppt

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

Microsoft PowerPoint - e9.pptx

6주차.key

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - 03-Development-Environment-2.ppt

PowerPoint 프레젠테이션

교육지원 IT시스템 선진화

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

1217 WebTrafMon II

ABC 11장

Microsoft PowerPoint - additional01.ppt [호환 모드]

API 매뉴얼

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

The Pocket Guide to TCP/IP Sockets: C Version

슬라이드 1

Microsoft PowerPoint - chap11-포인터의활용.pptx

리눅스커널-06

제1장 Unix란 무엇인가?

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - chap10-함수의활용.pptx

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

10.

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - ch07 - 포인터 pm0415

06Àå

제12장 파일 입출력

금오공대 컴퓨터공학전공 강의자료

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

Microsoft PowerPoint - em8-리눅스설치.ppt

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

11장 포인터

Adobe Flash 취약점 분석 (CVE )

Microsoft PowerPoint APUE(File InO).pptx

PA for SWE2007

좀비프로세스 2

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

untitled

K&R2 Reference Manual 번역본

PowerPoint 프레젠테이션

2009년 상반기 사업계획

DE1-SoC Board

디바이스드라이버 (Device Driver) Driver is literally a subject which drive a object. 응용프로그램에서하드웨어장치를이용해서데이터를직접읽고쓰거나제어해야하는경우에디바이스드라이버를이용 하드웨어를제어하는프로그램과애플리케이션에서

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - Chapter8.pptx

- 코드로읽는리눅스디바이스드라이버 강남용

PowerPoint 프레젠테이션

BMP 파일 처리

설계란 무엇인가?

Microsoft PowerPoint - IOControl [호환 모드]

Microsoft PowerPoint - C++ 5 .pptx


Microsoft PowerPoint - 10_Signal

<4D F736F F F696E74202D20B8AEB4AABDBAC4BFB3CEC7C1B7CEB1D7B7A1B9D62D352E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

No Slide Title

OCW_C언어 기초

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

슬라이드 1

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

운영체제란? PC를구입하면 Windows XP, Windows 7, Linux, MS-DOS Mac OSX, ios 운영체제 : Operating System 운영체제가없는컴퓨터? 컴퓨터 : 프로세서와메모리 전원을켜면어떤일이? 휘발성메모리 - 야생마 프로그램을실행하려면

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Chapter. 5 Embedded System I Bootloader, Kernel, Ramdisk Professor. Jaeheung, Lee

Microsoft PowerPoint - chap12-고급기능.pptx

PowerPoint Presentation

Microsoft PowerPoint - o8.pptx

PowerPoint 프레젠테이션

설계란 무엇인가?

PowerPoint 프레젠테이션

교육지원 IT시스템 선진화

Microsoft PowerPoint - polling.pptx

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Transcription:

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지 사용자모드 커널모드는인터럽트 (interrupt) 또는예외 (exception) 발생을통함 - 2 - Young-Jin Kim

시스템호출개요 Interrupt and Exceptions Interrupt Communication interface between CPU and I/O devices Hardware (by external devices) Software: INT 0x80 (Intel x86), SWI (ARM) We call this system call! Exceptions Program or system error: faults, traps, and aborts Software generated: INT 3 (Intel x86) Machine-check exceptions - 3 - Young-Jin Kim

시스템호출개요 INT 0x80 (Intel x86) - 4 - Young-Jin Kim

시스템호출개요 CPL (Current Privilege Level) CPL (Current Privilege Level) CPU 에서현재실행중인특권레벨을지정 인터럽트또는시스템호출처리시특권레벨의변화를추적하기위해사용 - 5 - Young-Jin Kim

시스템호출개요 x86 Protection Rings Operating system kernel Operating system services Applications Level 0 Level 1 Level 2 Level 3 Privileged instructions can be executed only when current privileged level (CPL) is 0-6 - Young-Jin Kim

시스템호출개요 fork 시스템호출과정 1 fork() 시스템호출함수를사용하려면 fork() 함수정보가있는 <linux>/include/linux/unistd.h 헤더파일을 include. 링커로라이브러리에서대응하는함수와연결 2 라이브러리내부의 fork() 함수 : swi 900002 3 호출번호 2 에해당하는시스템호출함수 sys_fork() 실행 4 가상파일시스템을통해커널자원인파일, 디렉토리, 디바이스등을하나의파일처럼접근 - 7 - Young-Jin Kim

시스템호출개요 - 8 - Young-Jin Kim

시스템호출개요 리눅스에서지원하는시스템호출 프로세스관리 : fork(), execve(), getpid(), signal() 등 파일관리 : open(), read(), write() close() 등 메모리관리 : brk() 등 네트워크관리 : socket(), bind(), connect() 등 장치관리, 기타시스템정보나제어 : time() 등 Ref. http://www.digilife.be/quickreferences/qrc/linux%20system%2 0Call%20Quick%20Reference.pdf - 9 - Young-Jin Kim

시스템호출개요 시스템호출함수는특정디렉토리에저장 프로세스관련함수 : <kernel_4412>/kernel 파일시스템관련함수 : <kernel_4412>/fs 특정프로세서관련함수 : <kernel_4412>/arch ARM 프로세서관련함수 : <kernel_4412>/arch/arm/kernel 시스템호출함수는 sys_ 함수명 이라는이름으로정의, 사용자프로그램에서는접두사없이함수명만사용 시스템호출함수는커널함수이므로헤더파일은 <kernel_4412>/include 디렉토리에존재 - 10 - Young-Jin Kim

시스템호출프로그래밍 시스템호출구현 - 11 - Young-Jin Kim

시스템호출프로그래밍 System call 번호할당 [ 코드 ] 시스템콜처리함수할당 < kernel_4412 >/arch/arm/include/asm/unistd.h #define NR_hellocall ( NR_SYSCALL_BASE+376) Linux 커널이제공하는모든시스템호출은각각고요한번호를가지고있으며 unistd.h에각시스템호출번호가정의되어있음. unistd.h 파일의위내용을보면현재 system call 은 375개가있는것을확인할수있으며추가할 system call 은 376번으로할당 NR_ 은 System Call 고유번호를나타내는접두어이며그뒤의 hellocall이추가할 System Call 처리함수의이름 - 12 - Young-Jin Kim

시스템호출프로그래밍 System call 테이블에 system call 처리함수등록 [kernel_4412]/arch/arm/kernel/entry-comm.s 에 sys_call_table 이라는 entry 로구현 sys_call_table 에는 system call 처리함수의시작주소들이들어있고각함수들은 unistd.h 에정의되어있는 system call 번호를인덱스로하여접근 sys_call_table 에추가할 System Call 처리함수등록 entry(sys_call_table) 다음에 calls.s 를 include 시스템호출함수와할당한시스템호출번호를연관시켜줄필요가있다. [ 코드 ] 시스템콜처리함수등록 < kernel_4412 >/arch/arm/kernel/calls.s /* 376 */ CALL(sys_hellocall) unistd.h 에정의한호출번호와일치 - 13 - Young-Jin Kim

시스템호출프로그래밍 system call 처리함수구현 System Call 이발생했을때수행될함수구현 [kernel]/kernel/hellocall.c 생성 [ 코드 ] 시스템콜호출함수생성 < kernel_4412 >/kernel/hellocall.c - 14 - Young-Jin Kim

시스템호출프로그래밍 Makefile 수정 만들어진처리함수를커널이컴파일될때에함께컴파일될수있도록 Makefile을수정한다. [ 코드 ] makefile 수정 < kernel_4412 >/kernel/makefile - 15 - Young-Jin Kim

시스템호출프로그래밍 Kernel Compile Ubuntu 에서다음을수행 # make zimage Kernel fusing Windows 에서다음을수행 > fastboot.exe flash kernel zimage - 16 - Young-Jin Kim

시스템호출프로그래밍 System Call 을호출하는 User Application 제작 vi hellocall_test.c - 17 - Young-Jin Kim

시스템호출프로그래밍 User Application 컴파일하기위한 Makefile 작성 #make - 18 - Young-Jin Kim

시스템호출프로그래밍 User Application 전송 Transfer >ZMODEM > send Applicatoin File 권한설정 시스템호출실행 #./hellocall_test - 19 - Young-Jin Kim

매개변수를이용한시스템호출 사용자영역과커널영역사이에서값을교환하는커널함수들 함수 put_user(x, ptr) get_user(x, ptr) copy_to_user(void user *to, const void * from, unsigned long n) copy_from_user(void * to, void user *from, unsigned long n) 설명 커널영역의데이터를사용자영역으로복사함. (ptr 은사용자메모리영역의선두주소, x 는커널변수 ) 사용자영역의데이터를커널영역으로복사함. (ptr 은사용자메모리영역의선두주소, x 는커널변수 ) 커널영역의 n 크기만큼의데이터를사용자영역으로복사함. 사용자영역의 n 크기만큼의데이터를커널영역으로복사함. Ref. http://blog.naver.com/idthek?redirect=log&logno=90119626977-20 - Young-Jin Kim

매개변수를이용한시스템호출 사용자응용에서버퍼에대한포인터로 system call stub 함수를호출함. 호출되는 system call stub 함수에서인자로포인터를넘겨받음 넘겨받은포인터를이용하여새로이작성한 system call 함수내에서 put_user(), get_user(), copy_to_user(), copy_from_user() 를호출하여사용자 - 커널영역간의데이터교환이일어나게됨 - 21 - Young-Jin Kim

매개변수를이용한시스템호출 새로이작성한 system call 함수예 #include <linux/kernel.h> #include <asm/uaccess.h> // put_user() 사용을위함 asmlinkage int sys_mycall(int x, int *buf) { y =...; put_user(y, buf); } - 22 - Young-Jin Kim

매개변수를이용한시스템호출 매개변수를사용하는시스템콜스텁함수및응용프로그램예 #include <linux/unistd.h> _syscall2(int, mycall, int, x, int *, buf) // 매개변수가 2 개임! int main(void) { int i = 0; int temp = 2; int buff = 0; i = mycall(temp, &buff); // 주소연산자사용! } - 23 - Young-Jin Kim