Microsoft PowerPoint - 10-EmbedSW-11-모듈

Similar documents
PowerPoint 프레젠테이션

교육지원 IT시스템 선진화

untitled

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

Chapter #01 Subject

<4D F736F F F696E74202D205BBAB0C3B75D20B8AEB4AABDBA20B5F0B9D9C0CCBDBA20B5E5B6F3C0CCB9F620B8F0B5A82E >

망고100 보드로 놀아보자 -13

로봇SW교육원 강의자료

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

PowerPoint 프레젠테이션

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

슬라이드 1

KEY 디바이스 드라이버

K&R2 Reference Manual 번역본

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

PowerPoint 프레젠테이션

Microsoft Word doc

Lab 3. 실습문제 (Single linked list)_해답.hwp

Adding a New Dev file

PowerPoint 프레젠테이션

11장 포인터

Embeddedsystem(8).PDF

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

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

Microsoft Word doc

Microsoft PowerPoint - CSharp-10-예외처리

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - ch09_파이프 [호환 모드]

2009년 상반기 사업계획

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

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

PowerPoint 프레젠테이션

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

Microsoft PowerPoint APUE(Intro).ppt

06Àå

Microsoft PowerPoint - e9.pptx

(Microsoft PowerPoint - Device Driver [\310\243\310\257 \270\360\265\345])

교육지원 IT시스템 선진화

윤성우의 열혈 TCP/IP 소켓 프로그래밍

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

(Microsoft PowerPoint - Device Driver [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

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

chap7.key

Microsoft PowerPoint - chap06-2pointer.ppt

UI TASK & KEY EVENT

PowerPoint 프레젠테이션

Abstract View of System Components

ECE30076 Embedded System Programming - LED Device Driver

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

로봇SW교육원 강의자료


Microsoft PowerPoint - chap13-입출력라이브러리.pptx

PowerPoint 프레젠테이션

The Pocket Guide to TCP/IP Sockets: C Version

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

Microsoft PowerPoint - Chapter 1-rev

10.

본 강의에 들어가기 전

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - chap12-고급기능.pptx

03_queue

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

좀비프로세스 2

PowerPoint Template

컴파일러

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

/chroot/lib/ /chroot/etc/

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

PowerPoint 프레젠테이션

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C4C656D70656C2D5A69762E637070>

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

2009년 상반기 사업계획

슬라이드 1

Microsoft PowerPoint - [2009] 02.pptx

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

untitled

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

歯9장.PDF

chap 5: Trees

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

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

Abstract View of System Components

Transcription:

11. 개요 proc 파일시스템 순천향대학교컴퓨터학부이상정 1 개요 순천향대학교컴퓨터학부이상정 2

개요 커널프래그래밍 커널의일부변경시커널전체를다시컴파일해야하는번거로움 해당모듈만컴파일하고필요할때만동적으로링크시켜커널의일부로사용할수있어효율적 자주사용하지않는커널기능은메모리에상주시키지않아도됨 확장성과재사용성을높일수있음. 순천향대학교컴퓨터학부이상정 3 모듈 (module) 소개 (1) 리눅스의특징중하나는커널이동작중에기능을추가 수행중에커널에부가되는코드의부분을모듈 실행중인커널에동적으로적재되거나제거 이벤트 - 기반 (event-driven program) 방식으로작성 main() 함수가없다 주로파일시스템과디바이스드라이버구현시 커널에적재 / 제거하기위한규칙과유틸리티가필요 각모듈은동적으로링크될수있는목적코드로 insmod 로커널에링크되고 rmmod 로링크가해제 순천향대학교컴퓨터학부이상정 4

모듈소개 (2) 모듈프로그램의이점 효과적인메모리사용 커널전체를다시컴파일하지않고커널의일부분을교체할수있음 모듈프로그램의단점 커널에삽입되어확장된커널이됨 기존커널의광역변수혹은함수명이충돌가능성 주의사항 커널모드에서는메모리접근에대한보호없이모든영역의접근이가능하므로메모리접근에주의 실수연산이나 MMX 명령은사용할수없음 커널이사용하는스택크기는제한되어있으므로가능하면스택혹은재귀함수를사용하지않는것이좋음 순천향대학교컴퓨터학부이상정 5 의예 hello.c /* Module example hello.c */ #include <linux/kernel.h> // 커널에서수행될때필요한헤더파일 #include <linux/module.h> // 모듈에필요한헤더파일 #include <linux/init.h> // module_init(), module_exit() 매크로정의 MODULE_LICENSE("GPL"); // 라이선스표시 int module_begin(void) /* 모듈이설치될때초기화수행, insmod 할때수행되는함수 */ { printk("<1> Hello, world n ); return 0; } void module_end(void) /* 모듈이제거될때반환작업수행, rmmod 할때수행되는함수 */ { printk("<1> Goodbye, world n ); } module_init(module_begin); module_exit(module_end); d l d) 순천향대학교컴퓨터학부이상정 6

코드설명 모듈등록및해제 등록시 module_begin() 실행 해제시 modue_end() 실행 예제코드 insmod로모듈을로드하고커널에링크된후 printk() 를호출 rmmod 로모듈을제거할때도 printk() 를호출 printk() 함수 리눅스커널은 C 라이브러리없이자체고유의함수지원 따라서 printf() 는지원되지않고비슷한기능의 printk() 함수지원 <1> 은메시지의우선순위를나타내며번호가낮을수록우선순위가높음 콘솔에서실행된경우화면에출력되고 xterm 등에서는 /var/log/messages 등과같은시스템로그파일에출력 순천향대학교컴퓨터학부이상정 7 의예 Makefile obj-m KDI PWD := hello.oo := /lib/modules/$(shell uname -r)/build := $(shell pwd) default: make -C $(KDI) SUBDIRS=$(PWD) modules clean: rm rf *.ko *.mod.*.cmd *.o /lib/modules/$(shell uname -r)/build 모듈을생성하기위해필요한커널디렉토리위치지정 uname r 은현재커널버전을출력, 따라서커널버전에상관없이동작 SUBDIRS=$(PWD) 을수행하는현재디렉토리 순천향대학교컴퓨터학부이상정 8

모듈의호스트실행예 (1) 1. ~/test/module 디렉토리에 hello.c, Makefile 작성 $ su # cd ~/test; mkdir module; cd module # gedit hello.c # gedit Makefile 순천향대학교컴퓨터학부이상정 9 모듈의호스트실행예 (2) 2. 컴파일하여 hello.ko 모듈생성 # make 순천향대학교컴퓨터학부이상정 10

모듈의호스트실행예 (3) 3. 모듈적재 (insmod) 후적재된모듈확인 (lsmod) 하고 /var/log/messages(dmesg) 메시지출력 # insmod hello.ko # lsmod h head n 3 # dmesg tail n 3 순천향대학교컴퓨터학부이상정 11 모듈의호스트실행예 (4) 4. 커널심볼테이블에있는 hello.c 심볼을확인 # cat /proc/kallsyms grep hello 순천향대학교컴퓨터학부이상정 12

모듈의호스트실행예 (5) 5. 모듈제거 (rmmod) 후확인 # rmmod hello # lsmod head n 3 # dmesg tail n 3 순천향대학교컴퓨터학부이상정 13 모듈의타겟실행예 (1) 1. ~/test/target 디렉토리에 hello.c, Makefile 복사 $ cd ~/test; mkdir target; cd target $ cp../module/hello.c. $ cp../module/makefile 순천향대학교컴퓨터학부이상정 14

모듈의타겟실행예 (2) 2. Makefile 을교차컴파일로수정 $ gedit Makefile 순천향대학교컴퓨터학부이상정 15 모듈의타겟실행예 (3) 3. 컴파일하여 hello.ko 모듈생성 $ make 순천향대학교컴퓨터학부이상정 16

모듈의타겟실행예 (4) 4. hello.ko 모듈을 NFS 공유디렉토리로복사 $ sudo cp hello.ko /mnt/nfs_host/. 순천향대학교컴퓨터학부이상정 17 모듈의타겟실행예 (5) 5. 타겟보드에서 hello.ko 모듈복사및적재 (insmod) 후적재된모듈확인 (lsmod) 하고제거 $ cp /mnt/nfs_target/hello.ko. $ insmod hello.ko $ lsmod head n 3 $ rmmod hello 순천향대학교컴퓨터학부이상정 18

proc 파일시스템 순천향대학교컴퓨터학부이상정 19 proc 파일시스템개요 (1) 운영체제의현재정보를사용자에게제공하기위하여소프트웨어로생성된특수한파일시스템 시스템정보를파일처럼볼수있게해주는램파일시스템 /proc 디렉토리에마운트됨 응용프로그램이 /proc 디렉토리하부에디렉토리나파일을새로만들수없고, 삭제나이름변경불가능 proc 파일시스템에채워질데이터의크기는 PAGE_SIZE보다작아야함 프로세스정보, CPU 사용률, 인터럽트, 네트워크패킷전송량, 적재된모듈, IDE SCSI와같은디바이스정보등과같은데이터를제공 셀에서동작하는대부분의유틸리티프로그램은 /proc 디렉토리를이용하여시스템상태점검및처리 디바이스드라이버의디버깅, 상태관찰, 제어할때유용 순천향대학교컴퓨터학부이상정 20

proc 파일시스템개요 (2) 응용프로그램 /dev 모듈프로그램 /proc 커널정보 커널정보에접근하기위해사용되는파일 proc 파일시스템내용

순천향대학교컴퓨터학부이상정 23 proc 파일시스템의함수와구조체 proc 파일시스템지원을위한함수와구조체 #include <linux/proc_fs.h> struct proc_dir_entry : proc 디렉토리표현을위한변수구조체 proc_mkdir() : 디렉토리생성함수 create_proc_entry() : 파일생성함수 remove_proc_entry() : 디렉토리또는파일제거함수 순천향대학교컴퓨터학부이상정 24

proc_dir_entry 구조체 (1) struct proc_dir_entry { unsigned short low_ino; // 파일의 i-노드값 unsigned short namelen; // 파일이름길이 const char *name; // 생성될파일이름 mode_t mode; // 파일접근모드 nlink_t nlink; uid_t uid; gid_t gid; unsigned long size; struct inode_operations * proc_iops; // i-노드조작연산 struct file_operations * proc_fops; // 파일조작연산 get_info_t *get_info; struct t module *owner; struct proc_dir_entry *next, *parent, *subdir; void *data; read_proc_t *read_proc; // read 함수핸들러 write_proc_t *write_proc; // write 함수핸들러 atomic_t count; /* use count */ int deleted; /* delete flag */ kdev_t rdev; }; 순천향대학교컴퓨터학부이상정 25 proc_dir_entry 구조체 (2) struct proc_dir_entry 구조체 void *data read_proc 이나 write_proc 필드에선언된함수에전달할데이터가필요할경우데이터의주소를지정 read_proc_t *read_proc 생성된 proc 파일을응용프로그램에서읽을때디바이스드라이버가파일데이터를제공하는함수주소지정 read_proc에지정된함수는파일을읽을때마다새로호출 write_proc_t t *write_proc 응용프로그램에서 proc 파일에데이터를써넣을때디바이스드라이버가이데이터를처리하기위한함수주소지정 write_proc에지정된함수는파일에데이터를써넣을때마다새로호출 순천향대학교컴퓨터학부이상정 26

proc 파일시스템의함수 (1) proc_mkdir() : 디렉토리생성함수 extern struct proc_dir_entry *proc_mkdir ( const char *dir_name; sturct proc_dir_entry *parent; ) create_proc_entry() entry() : 파일생성함수 struct proc_dir_entry *create_proc_entry { const char *name; mode_t mode; struct proc_dir_entry *parent; } name : name을이름으로 proc 파일생성 mode : 생성될때의파일모드 ( 일반파일모드와동일 ) parent : name으로만들어진 proc파일이위치할디렉토리 순천향대학교컴퓨터학부이상정 27 proc 파일시스템의함수 (2) remove_proc_entry() entry() : 디렉토리또는파일제거함수 extern void *remove_proc_entry entry ( const char *name; struct proc_dir_entry *parent; ) 순천향대학교컴퓨터학부이상정 28

proc 파일시스템구현예 proc 파일시스템만들기 struct proc_dir_entry *entry; entry = create_proc_entry( entry( testfile testfile, S_IFREG S_IRUGO, NULL); 핸들러지정 entry->read_proc = read_func; entry->write_proc = write_func; 핸들러구현 int read_func(char* page, char** start, off_t off, int count, int* eof, void* data) { } int write_func(struct file* file, const char *buffer, unsigned long count,void *data) { } proc 파일예 helloproc.c (1) #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/proc_fs.h> #define PROC_FILENAME "helloproc" " /* Function Prototypes */ static int hello_read_proc(char *buf, char**start, off_t offset, int count, int *eof, void *data); static int module_begin(void) { struct proc_dir_entry *entry; } printk("hello, /proc File System! n"); if ((entry = create_proc_entry(proc_filename, S_IRUGO, NULL)) == NULL) return EACCES; entry >read_proc = hello_read_proc; return 0; 순천향대학교컴퓨터학부이상정 30

proc 파일예 helloproc.c (2) static void module_end(void) { printk("good bye. n"); remove_proc_entry(proc_filename, NULL); } static int hello_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *data) { int len; } len = sprintf(buf, "Hello, I'm in /proc file system. n"); return len; EXPORT_NO_SYMBOLS; module_init(module_begin); module_exit(module_end); 순천향대학교컴퓨터학부이상정 31 proc 파일타겟실행예 (1) 1. ~/test/target /proc 디렉토리에 helloproc.c, c Makefile 작성 $ gedit helloproc.c $ gedit Makefile 순천향대학교컴퓨터학부이상정 32

proc 파일타겟실행예 (2) 2. 컴파일하여 hello.ko 모듈생성 $ make 3. hello.ko 모듈을 NFS 공유디렉토리로복사 $ sudo cp helloproc.ko /mnt/nfs_host/. 4. 타겟보드에서 hello.ko 모듈복사및적재 (insmod) 후적재된모듈확인 (lsmod) 하고제거 $ cp /mnt/nfs_target/helloproc.ko. $ insmod helloproc.ko $ ls /proc $ cat /proc/helloproc $ rmmod helloproc 순천향대학교컴퓨터학부이상정 33 proc 파일타겟실행예 (3) 순천향대학교컴퓨터학부이상정 34

과제 타겟시스템에서자기영문이름을콘솔이나 /var/log/messages에출력하도록모듈작성후타겟시스템에적용 타겟시스템에서자기영문이름정보를출력하는 /proc 파일시스템프로그램작성 순천향대학교컴퓨터학부이상정 35