Module Programming Linux Kernel 수업 4번째.

Slides:



Advertisements
Similar presentations
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Advertisements

ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Image & Video processing
Power Java 제3장 이클립스 사용하기.
공유메모리 int shmget(key_t key, size_t size, int permflags);
C 프로그래밍 I.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Cross Compiler를이용한 커널 컴파일 및 포팅
Cross Compiler를이용한 커널 컴파일 및 포팅 1
컴퓨터 프로그래밍 기초 [Final] 기말고사
Windows Server 장. 사고를 대비한 데이터 백업.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
제 3장. C보다 나은 C++ II.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
C / C++ Programming in multi platform
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
① 모든 인터넷 브라우저를 닫는다 ② uninstall_flash_player.exe 실행하여 flash player 삭제한다
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Lecture 4 Debugging Technique & LKM
Cross Compiler 설치.
Sungkyunkwan University OS Project Dongkun Shin
11장. 1차원 배열.
13. 연산자 오버로딩.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
자바응용.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
27장. 모듈화 프로그래밍.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Device Driver 임베디드 시스템 I.
메모리 관리 & 동적 할당.
영상처리 실습 인공지능연구실.
뇌를 자극하는 Windows Server 2012 R2
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
Lesson 2. 기본 데이터형.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
강의 소개 컴퓨터시뮬레이션학과 2017년 봄학기 담당교수 : 이형원 E304호,
12. 상속 : 고급.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
제 6 장 함수(functions).
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
Homework #3 (1/3) 다음을 수행한 후, 결과 파일들을 출력하여 제출한다.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Homework #7 (1/3) 1. 다음 순서에 따라 수행하고, 그 과정의 화면을 캡쳐한다.
7 생성자 함수.
6 객체.
1. 실습 시간에 수행한 avd 생성 및 실행, adb shell 접속 및 명령어 수행 결과를 제출한다.
Presentation transcript:

Module Programming Linux Kernel 수업 4번째

목 차 모듈 개발 절차 모듈 프로그램 실습 System Call Wrapping 간단한 모듈 실습 모듈 내 함수 export/import 모듈에 파라메터 전달하기 System Call Wrapping OS2 강의교재

모 듈 모듈 : 커널의 기능을 동적으로 확장하고 올리거나 내릴 수 있는 단위 모듈 개발 절차 메인 메모리 source t1.c Object t1.o load unload Kernel영역 Compile gcc –c –D__KERNEL__-DMODULE –I/usr/src/linux/include -Wall t1.c OS2 강의교재

모듈 개발 절차 1. 모듈 프로그램 작성 2. 소스 컴파일 (모듈 생성)  gcc –c –D_ _KERNEL_ _ –DMODULE –I/usr/src/linux/include –Wall filename.c 3. 적재 모듈 확인 (메모리에 적재된 모듈을 리스트 형태로 보여줌.)  lsmod 4. 모듈 적재 (생성한 모듈을 메모리에 적재)  insmod filename.o 5. 모듈 제거 (모듈을 메모리에서 제거)  rmmod filename OS2 강의교재

모듈 framework 모듈 개발 시 필요한 함수 main은 존재하지 않음 init_module: cleanup_module 모듈이 수행될 때의 시작 함수 (클래스의 생성자와 유사) cleanup_module 모듈이 제거될 때 반드시 수행되는 종료 함수 (클래스의 소멸자와 유사) #include <linux/kernel.h> #include <linux/module.h> // 헤더파일 선언 // 모듈이 올라갈 때 초기화되는 부분으로 반드시 필요. int init_module() { ..... // 각종 초기화 작업 } // 모듈이 제거될 때 사용되는 부분으로 반드시 필요. void cleanup_module() ..... // 사용한 자원 제거 등의 프로그램 마무리 작업 ...... OS2 강의교재

모듈 실습 간단한 모듈 작성 < t1.c > OS2 강의교재

모듈 실습 컴파일 및 적재된 모듈 확인 (insmod) OS2 강의교재

모듈 실습 모듈 적재 및 제거 insmod t1.o  모듈의 적재 (모듈이 적재됨을 알림) (적재된 모듈 리스트를 출력) (적재한 모듈이 출력됨) (모듈이 메모리에서 해제됨을 알림) OS2 강의교재

모듈 프로그램 시 주의사항 커널의 버전과 모듈의 버전 일치 버전이 다른 경우 커널 버전 확인 : uname –r 모듈 버전 확인 : /usr/include/linux  vi version.h 버전이 다른 경우 1. gcc 컴파일 시 참조하는 헤더파일 디렉터리 삭제 2. 커널의 헤더파일 디렉터리로 심볼링크로 생성 헤더 파일 디렉터리 삭제 rm –rf /usr/include/linux rm –rf /usr/include/asm 커널 version의 헤더 파일로 링크 ln –s /usr/src/linux/include/linux /usr/include/linux ln –s /usr/src/linux/include/asm /usr/include/asm OS2 강의교재

모듈에서 사용 가능한 함수 모듈에서 사용 가능한 함수, 변수 등이 export되어 있음 cat /proc/ksyms printk(); 함수도 export되어 있기 때문에 사용가능 그 외 함수나 변수를 사용하려면.. 아래 파일을 수정하여 export시킴 (물론 커널 컴파일을 다시 하여야 함) /usr/src/linux/kernel/ksyms.c OS2 강의교재

모듈간의 함수 export/import t1.c 파일에 함수 추가 컴파일 gcc –c –D_ _KERNEL_ _ –DMODULE –Wall t1.c OS2 강의교재 < t1.c >

모듈간의 함수 export/import t2.c 모듈 작성 모듈 컴파일 gcc –c –D_ _KERNEL_ _ –DMODULE –Wall t2.c < t2.c > OS2 강의교재

모듈간의 함수 export/import t1 모듈 적재 후 t2모듈을 적재하여 확인 OS2 강의교재

모듈에 파라메터 전달하기 Int 형 파라메터 한 개 전달 MODULE_PARM( name, type )  i :정수, s :문자 < t2.c > OS2 강의교재

모듈에 파라메터 전달하기 모듈 컴파일 후 적재 OS2 강의교재

모듈에 파라메터 전달하기 int형 파라메터 2개 전달 < t2.c > OS2 강의교재

모듈에 파라메터 전달하기 컴파일 후 모듈 적재 OS2 강의교재

모듈에 파라메터 전달하기 문자열 파라메타 전달 < t2.c > OS2 강의교재

모듈에 파라메터 전달하기 모듈 컴파일 후 적재 OS2 강의교재

System Call Wrapping System call wrapping 윈도우에서의 hooking 과 유사 sys_fork(); /* kernel/fork.c */ sys_call_table sys_exit(); sys_read(); sys_write(); ... 1 2 3 4 .. sys_my_fork(); /* my_fork.c */ OS2 강의교재

System Call Wrapping Open 함수를 wrapping 하는 예제 system call table의 포인터를 가져오기 위한 선언 (기존의 Open 을 가져오기 위한 prototype) (새로운 Open 함수) OS2 강의교재

System Call Wrapping Init module Cleanup module System call table 에서 open 함수를 다른 함수로 대체함 Cleanup module Module을 삭제 시 원래의 기능으로 복원하기 위해 open 함수를 되돌려 놓음 OS2 강의교재

System Call Wrapping 모듈 컴파일 후 insert module 후 화면 (lsmod를 위한 open된 파일) OS2 강의교재

참고 – C언어 Storage Class와 Scope 전역 변수/외부 변수 범위: 전역 수명: 프로그램이 수행되는 동안 유지 전역 변수는 자동으로 0으로 초기화된다 main() 이전에 선언해야 한다 전역변수에 static을 사용하면 해당 소스 파일 내 존재하는 함수들간에만 공유된다 지역변수 범위: 함수 안에서만 유효 수명: 함수가 종료되면 메모리 해제 함수 안에서 선언되는 변수 함수 내에서 static을 사용하면 함수가 종료된 이후에도 변수를 유지하며, 다음 호출시에 재사용된다 OS2 강의교재

참고 – gcc 최적화 옵션 커널 컴파일 시 최적화 옵션 –O2만 사용하는 이유(-O0~3) 최적화옵션 의미 -O0(기본값) 최적화를 수행하지 않는다 -O -O1 코드 크기와 실행 시간을 줄이는 것을 제외한 최적화는 실행하지 않는다 -O2 메모리 공간과 속도를 희생하지 않는 범위내의 모든 최적화를 수행한다 loop unrolling과 function inlining에 대한 최적화를 수행하지 않는다 -O3 O2 최적화에 인라인 함수와 레지스터에 대한 최적화를 추가로 수행한다 -Os -O2 최적화와 함께 코드 크기에 대한 최적화를 수행한다 OS2 강의교재

참고 – Loop Unrolling 루프안에서 실행되는 CPU 명령어 수를 줄임으로서 CPU 캐시 히트율을 높이고, 분기를 줄임으로서 수행속도를 개선하는 방법 루프안에서 수행되는 루프를 하나의 반복구문으로 결합하는 방법 단점: 하나의 반복문 수행에 필요한 레지스터 수가 증가 -> 코드 크기 증가 -> 임베디드 시스템에는 바람직하지 않음 OS2 강의교재