교육지원 IT시스템 선진화

Size: px
Start display at page:

Download "교육지원 IT시스템 선진화"

Transcription

1 Module 10: 디바이스드라이버기초 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부

2 주차별목표 디바이스드라이버란? 디바이스드라이버주요함수알아보기 디바이스드라이버기본골격구성하기 2

3 디바이스드라이버프로그래밍 리눅스커널의구조 커널프로그래밍 리눅스커널의핵심 (core) 기능추가 리눅스커널알고리즘개선 리눅스커널모듈프로그래밍 ( 또는디바이스드라이버프로그래밍 ) 3

4 디바이스드라이버란? 디바이스 (device) 하드디스크, USB, 프린터, 단말기, 스캐너, 네트워크어댑터, 터치스크린, 오디오등컴퓨터시스템이외의다른주변장치들을말함 디바이스드라이버 (device driver, 이하 DD 라고도함 ) 위의디바이스들을동작시키기위해서는구동용소프트웨어가필요하며, 이러한프로그램을디바이스드라이버라고함 응용프로그램에서하드웨어장치를이용해서데이터를직접읽고쓰거나제어해야하는경우에 device driver 이용 하드웨어를구동하기위한디바이스뿐만아니라, 소프트웨어적인디바이스를만들어디바이스드라이버를만들수도있음 4

5 디바이스드라이버의주요특징 주요특징 디바이스와시스템사이에데이터를주고받기위한인터페이스를제공하는커널내부기능중의하나임 일반적으로위쪽으로는파일시스템과인터페이스를가지며, 아래쪽으로는실제디바이스하드웨어와인터페이스를가짐 커널의일부분으로내장되어커널모드에서실행 메모리에상주하면서스왑되지않음 디바이스드라이버는디바이스를하나의파일로추상화시켜줌 이를통해사용자는디바이스를디바이스파일 (/dev/ ) 을통해파일처럼액세스가능 따라서사용자는파일에대한연산 (File Operation) 만하면됨 디바이스의고유한특성을내포하고있음 5

6 디바이스드라이버의주요특징 디바이스마다고유의번호를가지고있고, 이번호로각각의디바이스를구분 이번호는 32 비트로구성되어있음 ( 커널 2.6) 주번호 (Major number, 12-bit) 부번호 (Minor number, 20-bit) 디바이스드라이버는커널함수로모듈로커널에로딩 디바이스드라이버를만들기위해전체커널을컴파일할필요는없음 모듈방식으로드라이버를추가 / 제거할수있음 % insmod [ 드라이버명 ].ko % rmmod [ 드라이버명 ] 6

7 커널모듈 모듈 (Module) 리눅스에서디바이스드라이버는모듈로커널에 loading 됨 여러함수와자료구조로이루어진하나의독립된프로그램 설치과정을통해커널에링크되어커널에서실행되는함수역할을함 리눅스모듈은처음커널이시작될때설치되는정적로딩방법과커널이실행되는중간에설치되는동적로딩방법에의해커널에 loading 됨 /proc/modules 현재시스템에설치되어져있는모듈을보여줌 커널모듈빌드 ( 커널 2.4) gcc를사용하여커널모듈을생성함. 모듈은컴파일된오브젝트코드 (.o) 임 커널모듈빌드 ( 커널 2.6) 커널모듈생성시 kbuild를사용함. 컴파일된모듈의확장자는.ko임 커널소스헤더파일지정 -I/usr/src/linux-`uname r`/include 또는 makefile 내에다음과같은커널디렉토리를가르키는변수명을지정하여사용하면편리함 KERNELDIR=/lib/modules/$(shell uname r)/build 위의파일은커널빌드과정에서 % make module_install 을실행했을때생성되며, 커널소스를가르키도록소프트링크되어있음 -I$(KERNELDIR)/include 7

8 커널과응용프로그램과의차이 Address Space Application Program 과 Kernel Program 은서로다른메모리매핑법을가지고있으며, 프로그램코드는서로다른 address space 를가지고있다. Kernel address space 1 G byte 4 G byte User address space 3 G byte 8

9 커널과응용프로그램과의차이 Namespace pollution Application Program: 현재개발하는프로그램에서만각함수와변수의이름을구별하여주면된다. Kernel Program: 현재개발하는모듈외에도커널전반적으로함수와변수의이름이충돌하지않도록하여야한다. 9

10 커널프로그래밍시주의사항 Namespace pollution 외부파일와 link 하지않을모든심볼을 static 으로선언또는외부파일과 link 할 symbol 을 symbol table 등록 EXPORT_NO_SYMBOLS; EXPORT_SYMBOL(name); 전역변수는잘정의된 prefix 를붙여준다. Ex: sys_open() /proc/ksyms Symbol table 을가지고있는텍스트형태의파일 Library stdio.h 와같은일반프로그램에서사용하는헤더파일을 include 해서는안된다. 오직 /usr/include/linux 와 /usr/include/asm 아래에선언된헤더파일만을 include 한다. 10

11 커널프로그래밍시주의사항 Fault handling Kernel 은하드웨어접근에대해어떠한제한도없기때문에커널에서의에러는시스템에치명적인결과를발생시킨다. 함수호출등의작업시모든에러코드를검사하고처리해야한다. Address space 커널이사용하는 stack 의크기는제한되어있고, 인터럽트핸들러도동일한스택을사용하므로큰배열을사용하거나, recursion 이많이일어나지않도록주의해야한다. 응용프로그램과데이터를주고받기위해 (call by reference) 특별한함수를사용하여야한다. ( 뒷부분에서이를위한몇가지함수를소개한다.) 기타 실수연산이나 MMX 연산을사용할수없다. 11

12 디바이스구분 문자디바이스 (Character device) 자료의순차성을지닌장치로버퍼를사용하지않고바로읽고쓸수있는장치 직렬포트, 병렬포트, 마우스, PC 스피커, 터미널등 블록디바이스 (Block device) 버퍼캐시 (cache) 를통해블록단위로입출력되며, 랜덤액세스가가능하고, 파일시스템을구축할수있음 플로피디스크, 하드디스크, CD-ROM, RAM 디스크등 네트워크디바이스 (Network device) 네트워크통신을통해네트워크패킷을주고받을수있는디바이스 Ethernet, PPP, ATM, ISDN, NIC (Network Interface Card) 등 12

13 디바이스드라이버작성하려면 하드웨어에대한분명한이해가있어야함 소프트웨어구조에대한이해 예를들어직렬디바이스 (UART) 에대한 device driver 를작성한다면다음의사항들을분명히알아야함 ( 일부나열 ) UART 는세종류의레지스터를가지고있음 Data registers, control registers, status registers 하나의디바이스주소에하나이상의디바이스레지스터들이있을수있음 디바이스는 control register 의 bit 들을설정함으로써초기화하거나, 설정을변경할수있음 디바이스는 control register 의 bit 들을리셋함으로써 close 하거나리셋을할수있음 13

14 디바이스드라이버작성하려면 Control register 비트들은 UART 의모든동작을제어할수있음 따라서 control register 의각비트들의목적정확히알아야함 Status register 비트들은디바이스의현재상태 (status) 에대한정보를가지고있고, action 이일어날때마다해당플래그의값들이변경됨 ( 예 )TRH 버퍼레지스터의내용이모든전송된후새로전송할비트가생긴다고할경우, 두상태사이에 transmitter empty flag 의설정이변함 Status register 에서각 status flag 의목적이무엇인지정확히알아야함 각레지스터에대한주소를알아야함 예를들어 IBM PC 의경우 Timer : 0x0040 ~ 0x005F Serial COM1: 0x03F8 ~ 0x03FF Serial COM2: 0x02F8 ~ 0x02FF 14

15 디바이스드라이버관련리눅스명령어 명령어 insmod rmmod lsmod mknod depmod modinfo modprobe ksyms nm 기능 커널에모듈을올림 ( 예 ) % insmod test_dd.ko 커널에서모듈을삭제함 ( 예 ) % rmmod test_dd 커널에적재된모듈목록보여줌장치특수파일을만듦 ( 예 ) % mknod /dev/test_dd c 커널모듈간의의존성을검사함모듈들을검사하여관련된정보보여줌 depmod 명령으로생성된종속성정보를이용하여지정된디렉토리의모듈들과연관된모듈들을자동으로로딩함 Export되어있는커널의심볼목록 (/proc/ksyms) 을보여줌오브젝트파일에있는심볼들의목록을보여줌 15

16 간단한모듈프로그래밍 디바이스드라이버프로그래밍이무엇인지를알아보기위해가장간단한커널프로그래밍해보기 커널에모듈이로딩될때 Loading my first device driver 라는문자열출력되게하기 커널에서모듈을삭제할때 Unloading my first device driver 라는문자열출력하기 16

17 hello.c % cd ~/work/dd/hello % vi hello.c 17 /* filename: hello.c */ #include <linux/module.h> MODULE_LICENSE("GPL"); int init_module(void) /* module_init() */ { printk("loading my first device driver...\n"); return 0; 모듈초기화성공을의미함 } void cleanup_module(void) /* module_exit() */ { printk("unloading my first device driver..\n"); }

18 컴파일 % vi Makefile % make obj-m = hello.o #KDIR = /usr/src/linux-headers generic #KDIR = /usr/src/linux-headers-`uname -r` KDIR = /lib/modules/$(shell uname r)/build PWD = $(shell pwd) all: module module: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.ko rm -rf *.o rm -rf *.symvers *.order *.mod.o 18

19 실행 커널에로드하기 % insmod hello.ko 커널에서모듈제거하기 % rmmod hello ( 주의 ) 모듈을제거할때는 hello.o 가아닌 hello 를사용해야함 모듈 load/unload 시메시지가출력되었는가? 19

20 Warning: loading driver will taint the kernel: no license 문제해결 리눅스커널 2.4 이상버전부터라이센스정의를위한방법을고안하였고, 이러한내용은 linux/module.h 파일에정의되어있고, MODULE_LICENSE() 매크로를통해수행됨 이러한문제를해결하는간단한방법은프로그램의앞부분에다음한줄을추가하기 MODULE_LICENSE( GPL ); 20

21 커널에서출력하는메시지보기 커널에서출력하는메시지는 console 화면 (standard out) 에나타나지않는다 /var/log/messages 커널에서출력하는메시지를담고있는파일 % tail /var/log/messages 파일의맨뒷부분의내용을출력해줌. Foreground 로동작 % tail f /var/log/messages 계속추가되는모든메시지보기 중단하려면 ctrl+c 를누른다 % tail f /var/log/messages & Background mode 로동작. Messages 파일이변경될때마다그내용을화면에출력해줌. 백그라운드수행을종료하고싶을경우 jobs, kill 이라는명령어를이용하여프로그램종료시킴 dmesg 21

22 C 프로그램과커널프로그램의차이 [hello.c] #include <linux/module.h> #include <linux/kernel.h> MODULE_LICENSE( GPL ); int init_module(void) { printk( Loading my first device driver \n ); return 0; } void cleanup_module(void) { printk( Unloading my first device driver!!!\n ); } C 프로그램에서의실행시작점은 main() 함수가없음. 그러나커널프로그램에는 main() 함수가없음. 그렇다면이프로그램은어떻게실행되는것일까? 22

23 디바이스드라이버구성요소 초기화인터페이스 초기화함수 <linux/init.h> int init_module(void), void cleanup_module(void) 또는 module_init(), module_exit() 디바이스등록및해제함수 등록 : register_mmmdev(), 해제 : unregister_mmmdev() 여기에서 mmm 은 chr, blk, net 파일시스템인터페이스 리눅스에서는모든장치 (device) 들을파일로간주하며, 이파일들은일반적으로 /dev 디렉토리밑에있음. 따라서어떤장치를 open 한다고하는것은파일구조를다루는것과동일 커널에서는디바이스드라이버에액세스하기위해 file_operations 라는구조체를사용함 파일구조체 file_operations 에대한선언은 <linux/fs.h> 에되어있으며, 이구조체의주요멤버로는 open(), release(), read(), write(), ioctl(), mmap() 등임 하드웨어인터페이스 Memory mapped I/O: 메모리연산 Special in/out instruction: in(), out() 23

24 디바이스등록및해제함수 함수명 int register_chrdev (unsigned int major, const char *nam e,struct file_operations *fops) int unregister_chrdev (unsigned int major, const char *na me) int register_blkdev (unsigned int major, const char *nam e,struct file_operations *fops) int unregister_blkdev (unsigned int major, const char *na me) int register_netdev(const char *name) 설명 문자 (character) 디바이스를주어진주번호로등록주어진주번호에등록되어있는문자디바이스등록을해제블록 (block) 디바이스를주어진주번호로등록주어진주번호에등록되어있는블록디바이스등록을해제네트워크디바이스를등록 int unregister_netdev(const char *name) 네트워크디바이스등록을해제 MAJOR(kdev_t dev) MINOR(kdev_t dev) 장치번호 dev로부터주번호구하기장치번호 dev로부터부번호구하기 24

25 file 구조체 (/usr/src/linux/include/linux/fs.h) struct file { struct list_head struct dentry struct vfsmount struct file_operations atomic_t unsigned int mode_t loff_t unsigned long struct fown_struct unsigned int int unsigned long f_list; *f_dentry; *f_vfsmnt; *f_op; f_count; f_flags; f_mode; f_pos; f_reada, f_ramax, f_raend, f_ralen, f_rawin; f_owner; f_uid, f_gid; f_error; f_version; /* needed for tty driver, and maybe others */ void *private_data; }; /* preallocated helper kiobuf to speedup O_DIRECT */ struct kiobuf *f_iobuf; long f_iobuf_lock; 25

26 file_operations 구조체 26 struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, struct dentry *, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *); ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *); ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int); unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); };

27 응용프로그램에서의시스템콜함수와디바이스드라이버함수와의관계 struct file_operations test_fops = { open: device_open, read: device_read, write: device_write, ioctl: device_ioctl, release: device_release, }; struct file_operations test_fops = {.open = device_open,.read = device_read,.write = device_write,.ioctl = device_ioctl,.release = device_release, }; ANSI C99 에서표준으로제공 응용프로그램에서의시스템콜 open() close() read() write() ioctl() 디바이스드라이버에서의실행함수 device_open() device_release() device_read() device_write() device_ioctl() 27

28 Device Driver 에서사용하는함수들 open() 해당디바이스에연산을가하기위해해당디바이스파일을열기위한함수. 사용수증가 read() 해당디바이스로부터데이터를얻은데이터를커널영역에서사용자영역으로복사하기위한함수 write() 사용자영역의데이터를커널영역으로복사하기위한함수 release() 해당드라이버가응용프로그램에의해닫힐때호출하는함수. 사용수감소 ioctl() 읽기 / 쓰기이외의부가적인연산을위한인터페이스 - 디바이스설정및하드웨어제어 ( 향상된문자드라이버작성가능 ) 28

29 open() 응용프로그램에서의함수선언 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); 디바이스드라이버에서의함수선언 int (*open) (struct inode *, struct file *); 응용프로그램에서 open() 함수는시스템콜을통해 sys_open() 을호출하며, sys_open() 내부에서는가상파일시스템 (VFS) 과관련된여러처리과정을통해디바이스드라이버함수에필요한 inode 와파일구조체정보로변환하여전달된다. 그다음단계는 file_operations 구조체의 open() 함수포인터에등록된함수를사용하여요청한파일시스템에맞는연산을수행한다. 응용프로그램에서의함수인자 pathname 은생성하고자하는파일이름 flags 는파일을어떤한모드로 open 할것인지를결정하기위해사용함. 읽기전용 (O_RDONLY), 쓰기전용 (O_WRONLY), 읽기 / 쓰기 (O_RDWR) 모드로열수있음 성공하면해당파일을지시하는 int 형의파일지시자 (file descriptor) 를되돌려줌 29

30 read() 응용프로그램에서의함수선언 ssize_t read(int fd, void *buf, size_t count); 디바이스드라이버에서의함수선언 ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*read) (struct file *filp, char *buf, size_t count, loff_t *f_pos); 함수인자 응용프로그램에서의 read() 함수는파일기술자인 fd 로부터 count 바이트만큼읽어서그값을 buf 에저장하는시스템콜이다. 성공하면읽어들인바이트크기를반환하며, 실패하면 -1 을반환하고 errno 를설정한다. 디바이스드라이버에서의함수선언중파일구조체포인터 filp 는디바이스파일이어떤형식으로열렸는가에대한정보를가지고있다. loff_t 타입은 64 비트길이의 long offset 으로, (32-bit 플랫폼의경우에도 ) 메모리접근주소를지정하며현재의읽기와쓰기위치를저장한다. 문자디바이스드라이버에서는특성상큰의미가없다. 30

31 write() 응용프로그램에서의함수선언 ssize_t write (int fd, const char *buf, size_t count); 디바이스드라이버에서의함수선언 ssize_t (*write) (struct file *, const char *, size_t, loff_t *); ssize_t (*write) (struct file *filp, const char *buf, size_t count, loff_t *f_pos); 응용프로그램에서 write() 함수는 buf 로부터 count 바이트만큼읽어서 fd 가가리키는파일에쓰는시스템콜이다. 성공하면쓴바이트크기를반환하고, 실패하면 -1 을반환한다. f_ops 는메모리접근주소를가리킨다. 함수인자 char *buf : 응용프로그램에서전달한버퍼의주소 size_t count : 응용프로그램에서요청한데이터의크기 struct file *filp : 디바이스파일이어떤형식으로열렸는가에대한정보를저장 loff_t *f_pos : 메모리접근주소 31

32 ioctl() 응용프로그램에서의함수선언 int ioctl (int fd, int request, ); 디바이스드라이버에서의함수선언 int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); ioctl() 시스템콜은디바이스를제어하기위해특별한명령을주고자할때사용한다. 예를들어디스크를포맷 ( 읽기 / 쓰기동작아님 ) 하거나직렬포트의통신속도등을설정하는것이다. 이외에도 ioctl() 은시스템콜을추가하지않고커널영역과상호작용하는다양한함수들을개발하는데사용하기도한다. 응용프로그램에서의파일기술자 fd 는해당파일에대한 inode 와 file 구조체로변환되어디바이스드라이버함수로전달된다. 응용프로그램함수선언부분에서세번째인자부분은 으로표시되어있는데이는인자의개수가여러개일수있다는것을의미한다. 시스템콜이성공적으로실행되면음수아닌값을반환하며, 반환된값은요청했을때사용한값과동일하다. 32

33 release() 응용프로그램에서의함수선언 int close(int fd); 디바이스드라이버에서의함수선언 int (*release) (struct inode *, struct file *); 시스템콜 close() 함수는파일기술자를닫을때사용한다. 응용프로그램에서사용자에의해 close() 함수가호출되면디바이스드라이버내에서는해당파일구조체내에선언된 release() 함수가실행된다. 참고 : Note that release isn t invoked every time a process calls close. Like open, release can be missing. Whenever a file structure is shared (for example, after a fork or a dup), release won t be invoked until all copies are closed. If you need to flush pending data when any copy is closed, you should implement the flush method. 33

34 커널인터페이스함수 주의사항 Kernel program 은일반적인 library 를사용하지못하고 kernel 에서 export 해준함수들만을사용할수있다. Kernel interface 함수분류 Kernel 에서제공하는함수중 kernel programming 에자주사용되는함수는다음과같이분류할수있다. Port I/O Interrupt Memory Synchronization Kernel message 출력 Device Driver register 34

35 커널인터페이스함수 : 입출력디바이스 I/O device 와 data 를주고받기위한함수들 unsigned inb(unsigned port) Port 에서 1byte 를읽는다. unsigned inw(unsigned port) Port 에서 2byte 를읽는다. unsigned inl(unsigned port) Port 에서 4byte 를읽는다. unsigned outb(char value, unsigned port) Port 에 1byte value 를쓴다. unsigned outw(short int value, unsigned port) Port 에 2byte value 를쓴다. unsigned outl(long int value, unsigned port) Port 에 4byte value 를쓴다 35

36 커널인터페이스함수 : 입출력디바이스 I/O device 와 data 를주고받기위한함수들 void insb(unsigned port, void *addr, unsigned long count) Port 에서 count bytes 를읽어서메모리의 addr 주소부터저장 void insw(unsigned port, void *addr, unsigned long count) Port 에서 16bit * count 만큼읽어서메모리의 addr 주소부터저장 void insl(unsigned port, void *addr, unsigned long count) Port 에서 32bit * count 만큼읽어서메모리의 addr 주소부터저장 void outsb(unsigned port, void *addr, unsigned long count) Memory 의 addr 번지에서부터 count bytes 를읽어서 port 에쓴다. void outsw(unsigned port, void *addr, unsigned long count) Memory 의 addr 번지에서부터 count * 16bit 를읽어서 port 에쓴다. void outsl(unsigned port, void *addr, unsigned long count) Memory 의 addr 번지에서부터 count * 32bit 를읽어서 port 에쓴다. 36

37 커널인터페이스함수 : 입출력디바이스 I/O device 와 data 를주고받기위한함수들 Pausing I/O 입출력이너무빠르면 device 에서처리할수없는경우가발생할수있기때문에한번의입출력후잠시멈추어줄수있다. 앞에설명한함수의이름뒤에 _p 를붙인이름의함수로구현되어있다. 예 ) inb() 함수의경우 inb_p() 37

38 커널인터페이스함수 : 인터럽트설정 인터럽트의설정및처리에관한함수 (or 매크로 ) cli()/sti() 전체인터럽트를금지하거나가능하게해주는매크로 (clear/set interrupt enable) save_flags(unsigned long flag), restore_flags(unsigned long flag) 상태레지스터 (status register) 의내용을저장하고복원 Status register 는시스템의각상태를가지고있는레지스터로서, 일반적으로인터럽트가 enable 상태인지또는직전연산에서올림수 (carry) 가발생했는지등에대한정보를가지고있다 save_flags(), restore_flags() 두매크로는같은함수안에서호출되어야한다. flag 를다른함수로 pass 해서는안된다. 38

39 커널인터페이스함수 : 인터럽트설정 인터럽트의설정및처리에관한함수 (or 매크로 ) int request_irq(unsigned int irq, void (*handler)(int),unsigned long flags, const char *device) 사용자가인터럽트를추가하고자할때사용 커널에현재사용하고있지않은 IRQ 를요청하여등록하고, 이러한인터럽트가발생했을때수행될이 IRQ 에대한 interrupt handler 함수 ( 또는 interrupt service routine) 를등록 void free_irq(unsigned int irq) request_irq() 에서획득한 irq 를반납함 39

40 커널인터페이스함수 : 인터럽트설정 동기화 void sleep_on(struct wait_queue **q) q 의번지를 event 로 sleep 하며, uninterruptible 여기에서 uninterruptible 은 wake_up 함수호출외의다른 signal 에의해 process 가깨어날수없음을의미 void sleep_in_interruptible(struct wait_queue **q) q 의번지를 event 로 sleep 하며, interruptible Interruptible 은 wake_up 함수가호출되지않아도임의로 process 에서 signal 을주어깨어나게할수있다는의미 void wake_up(struct wait_queue **q) sleep_on(q) 로 sleep 된 task 를 wakeup void wake_up_interruptible(struct wait_queue **q) sleep_on_interruptible(q) 로 sleep 된 task 를 wakeup 40

41 커널인터페이스함수 : 메모리할당 Kernel 에서동적메모리를할당할때사용하는함수들 void * kmalloc(unsigned int len, int priority) 커널메모리할당. 128~131056byte 까지가능 priority: GFP_KERNEL, GFP_BUFFER, GFP_ATOMIC, GFP_USER GFP_KERNEL : 일반적인커널메모리할당. 할당가능한 Memory 가부족할경우 sleep 할수도있다. GFP_BUFFER : 버퍼캐쉬를관리할때사용되므로할당자가 sleep 상태로갈수있다. I/O 서브시스템이스스로메모리를필요로할때데드락을피하도록하기위해디스크에 dirty page 를 disk 에플러쉬함으로서메모리를 free 한다는점에서 GFP_KERNEL 과다르다. GFP_ATOMIC : 인터럽트핸들러등프로세스컨텍스트외부코드에서메모리를할당할때사용한다. 결코 sleep 상태가되지않는다. GFP_USER : 사용자들에게메모리할당할때사용. 낮은우선순위를가진다. GFP_HIGHUSER High memory 에서할당할때사용한다. 물리적으로연속적인메모리를할당한다. void kfree(void *obj) kmalloc() 에서할당받은커널메모리를반납 41

42 커널인터페이스함수 : 메모리할당 Kernel 에서동적메모리를할당할때사용하는함수들 void * vmalloc(unsigned int len) 커널메모리할당 크기제한없음 가상주소공간에서연속적인메모리영역을할당 void vmfree(void *addr) vmalloc() 에서할당받은커널메모리를반납 42

43 커널인터페이스함수 : 데이터공유 사용자공간과커널공간사이에데이터를공유하기위한함수 unsigned long copy_from_user(void *to, const void *from, unsigned long n) 사용자주소공간에서 n byte 만큼 data 복사. unsigned long copy_to_user(void *to, const void *from, unsigned long n) 사용자주소공간에 n byte 만큼 data 복사 void * memset(void *s, char c, size_t count) 메모리 s 에 c 를 count 만큼복사 put_user(void *datum, const void *addr) 사용자공간에 datum 을전달 get_user(void *datum, const void *addr) 사용자공간의 datum 을커널영역으로전달 43

44 커널인터페이스함수 : 메시지출력 Standard out 으로메시지를출력하기위한함수 printk(const char *fmt,.) 예 printf 의커널버전 printk(log_level message) LOG_LEVEL» KERN_EMERG, KERN_ALERT, KERN_ERR,KERN_WARNING, KERN_INFO, KERN_DEBUG» console_loglevel 의값보다우선순위가낮다면 console 에출력되지않는다. console_loglevel 은 sys_syslog 시스템콜로값을바꿀수있다.» LOG_LEVEL 은 <include/linux/kernel.h> 헤더에정의되어있다. printk( <1>Hello, World ); printk(kern_warning warning \n ); 44

45 커널인터페이스함수 : 디바이스등록 / 해제 디바이스드라이버등록및해제함수 int register_xxxdev (unsigned int major, const char *name,struct file_operations *fops) character/block driver 를 xxxdev[major] 에등록 xxx: chr/blk int unregister_xxxdev (unsigned int major, const char *name) xxxdevs[major] 에등록되있는 device driver 를제거 int register_netdev(const char *name) int unregister_netdev(const char *name) MAJOR(kdev_t dev)/minor(kdev_t dev) 장치번호 dev 로부터 major/minor 번호를구함 45

46 Device Driver 에서주로사용하는헤더파일 #include <linux/kernel.h> printk() 에서사용되는 LOG_LEVEL 에대한정의 ( 예 : KERNEL_ALERT) #include <linux/module.h> MODULE_LICENSE( GPL ); #include <linux/init.h> module_init(), module_exit(), init, exit #include <linux/fs.h> struct file_operations #include <linux/fcntl.h> 파일제어관련 ( 예 : O_RDWR, O_RDONLY, O_WRONLY) #include <linux/errno.h> 에러에관한헤더파일 ( 에러번호관리 ) 46

47 커널에모듈올리기 / 내리기 커널에제작한디바이스드라이버올리기 % insmod 드라이버명.ko 예 ) insmod led_dd.ko init_module() 또는 module_init() 함수실행 디바이스드라이버삭제 % rmmod 드라이버명 예 )rmmod led_dd cleanup_module() 또는 module_exit() 함수실행 적재된디바이스드라이버목록보기 % lsmod 47

48 디바이스접근용노드파일생성 커널에적재된디바이스드라이버에사용자가접근할수있도록스페셜디바이스노드생성 일반적으로 /dev 밑에만듬 사용자는이파일을통해해당디바이스에액세스함 노드생성하기 % mknod /dev/ 파일이름드라이버특성주번호부번호 예 ) mknod /dev/iom_led c 생성후속성변경 : chmod ug+w /dev/iom_led 48

49 디바이스드라이버에연결된장치파일 % ls -l /dev/hd[ab][12] /dev/tty[01] /dev/fb[01] brw-rw root disk 3, 1 1월 /dev/hda1 brw-rw root disk 3, 2 1월 /dev/hda2 brw-rw root disk 3, 65 1월 /dev/hdb1 brw-rw root disk 3, 66 1월 /dev/hdb2 crw--w root root 4, 0 1월 /dev/tty0 crw root root 4, 1 9월 25 13:44 /dev/tty1 crw root root 29, 0 1월 /dev/fb0 crw root root 29, 1 1월 /dev/fb1 디바이스종류 주번호 (major number) 부번호 (minor number) 장치파일명 49

50 디바이스번호 각디바이스들은주번호 (major number) 와부번호 (minor number) 로구성된고유의 32-bit 번호를가짐 Major number (12-bit) 물리적인디바이스를구분하는데사용 [KERNEL_DIR]/include/linux/major.h 헤더파일에정의되어있음 Minor number (20-bit) 부번호는동일한디바이스가여러개인경우, 이들디바이스들을구분하는용도로사용함. 즉같은종류의디바이스의경우주번호는같고, 부번호를다르게할당 부번호는커널에서사용하지않고디바이스드라이버내에서디바이스를구분하기위해사용 커널 2.6 typedef u32 kernel_dev_t; typedef kernel_dev_t dev_t; /* 32 비트 */ 디바이스번호에 32 비트를할당하며, 주번호는 12 비트로, 부번호는 20 비트로표현함. 따라서커널 2.6 에서는 4096 개의주번호를사용할수있음 50

51 [KERNEL]/include/linux/major.h #define MAX_CHRDEV 255 #define MAX_BLKDEV 255 #define UNNAMED_MAJOR 0 #define MEM_MAJOR 1 #define RAMDISK_MAJOR 1 #define FLOPPY_MAJOR 2 #define PTY_MASTER_MAJOR 2 #define IDE0_MAJOR 3 #define PTY_SLAVE_MAJOR 3 #define HD_MAJOR IDE0_MAJOR #define TTY_MAJOR 4 51

52 Device Driver 와응용프로그램과의호출관계 Application Device Driver % insmod % rmmod open() close() read() write() ioctl() struct file_operations open release read write ioctl module init() module exit() ccd_open() ccd_release() ccd_read() ccd_write() ccd_ioctl() 52

53 디바이스드라이버호출 응용프로그램 insmod open, close 장치파일파일핸들주번호, 부번호 read, write, ioctl rmmod 디바이스드라이버 주번호 module_init request_region register_chrdev struct file_operations open, release read, write, ioctl module_exit release_region unregister_chrdev 53

54 디바이스드라이버의기본골격 (1) % vi /root/work/dd/basic_device.c /* basic_device.c */ #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/module.h> #define IOM_MYDEVICE_MAJOR_NUM 0 #define DEV_NAME "/dev/mydevice" MODULE_LICENSE("GPL"); MODULE_AUTHOR("HGU"); int mydevice_init(void); void mydevice_exit(void); module_init(mydevice_init); module_exit(mydevice_exit); int mydevice_open (struct inode *, struct file *); int mydevice_release (struct inode *, struct file *); ssize_t mydevice_read (struct file *, char user *, size_t, loff_t *); ssize_t mydevice_write (struct file *, const char user *, size_t, loff_t *); int mydevice_ioctl (struct inode *, struct file *, unsigned int, unsigned long); 54

55 디바이스드라이버의기본골격 (2) struct file_operations mydevice_fops = {.owner = THIS_MODULE,.open = mydevice_open,.release = mydevice_release,.read = mydevice_read,.write = mydevice_write,.ioctl = mydevice_ioctl, }; int mydevice_open (struct inode *inode, struct file *filp) { return 0; } int device_release (struct inode *inode, struct file *filp) { return 0; } ssize_t device_read (struct file *filp, char user *buf, size_t count, loff_t *f_pos) { return 0; } 55

56 디바이스드라이버의기본골격 (3) 56 ssize_t device_write (struct file *filp, const char user *buf, size_t count, loff_t *f_pos) { return 0; } int device_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) { return 0; } int init mydevice_init(void) { int major_num; major_num = register_chrdev(iom_mydevice_major_num, DEV_NAME, &mydevice_fops); if ( major_num < 0 ) { printk(kern_warning"%s: can't get or assign major number %d\n", DEV_NAME, IOM_MYDEVICE_MAJOR_NUM ); return major_num; } printk("success to load the device %s. Major number is %d\n", DEV_NAME, IOM_MYDEVICE_MAJOR_NUM ); return 0; } void exit mydevice_exit(void) { unregister_chrdev(iom_mydevice_major_num, DEV_NAME); printk("success to unload the device %s...\n", DEV_NAME); }

57 장치등록과해제 Char Device Driver 등록방법 외부와 device driver 는 file interface (node 를의미 ) 를통해연결 Device driver 는자신을구별하기위해고유의 major number 를사용 장치등록과해제 등록 : int register_chrdev (unsigned int major, const char *name, stuct file_operations *fops) major: 등록할 major number. 0 이면사용하지않는번호중자동으로할당 name: device 의이름 fops: device 에대한 file 연산함수들 해제 : int unregister_chrdev (unsigned int major, const char *name) 57

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

More information

<4D F736F F F696E74202D205BBAB0C3B75D20B8AEB4AABDBA20B5F0B9D9C0CCBDBA20B5E5B6F3C0CCB9F620B8F0B5A82E >

<4D F736F F F696E74202D205BBAB0C3B75D20B8AEB4AABDBA20B5F0B9D9C0CCBDBA20B5E5B6F3C0CCB9F620B8F0B5A82E > 안드로이드환경에서의 리눅스디바이스드라이버 문자디바이스드라이버설명 Table of contents 디바이스드라이버구조 시스템구조 모듈의기본골격 드라이버 IO 제어 안드로이드환경에서의 한백전자교육사업부 리눅스디바이스드라이버 시스템구조 쉘 응용프로그램 표준라이브러리 시스템콜 가상파일시스템 (VFS) 버퍼캐시 네트워크시스템 문자디바이스드라이버 블럭디바이스드라이버 네트워크디바이스드라이버

More information

교육지원 IT시스템 선진화

교육지원 IT시스템 선진화 Module 11: 가상디바이스드라이버작성 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 디바이스드라이버의실행과정이해하기 크로스컴파일러를이용하여가상의디바이스드라이버생성하기 Kbuild 에대해이해하기 2 file_operations 구조체 struct file_operations {

More information

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

(Microsoft PowerPoint - Device Driver [\310\243\310\257 \270\360\265\345]) Device Driver 커널프로그램 Kernel program 목차 Kernel program 유의사항 Kernel module 디바이스드라이버 Character/Block device driver Device driver 구조 Device driver 작성절차및 module 등록 LED 디바이스드라이버 Kernel Program (1) 커널프로그램과응용프로그램과비교

More information

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

(Microsoft PowerPoint - Device Driver [\310\243\310\257 \270\360\265\345]) 목차 Device Driver 커널프로그램 Kernel program Kernel program 유의사항 Kernel module 디바이스드라이버 Character/Block device driver Device driver 구조 Device driver 작성절차및 module 등록 LED 디바이스드라이버 Kernel Program (1) 커널프로그램과응용프로그램과비교

More information

슬라이드 1

슬라이드 1 / 임베디드시스템개요 / 임베디드운영체제 / 디바이스드라이버 01 Linux System Architecture Application Area Application System Call Interface BSD Socket Virtual File System INET(AF_INET) Kernel Area Buffer Cache Network Subsystem

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

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

망고100 보드로 놀아보자 -13 리눅스디바이스드라이버개요 http://cafe.naver.com/embeddedcrazyboys http://www.mangoboard.com 디바이스드라이버개요 디바이스 (Device ) 네트워크어댑터, LCD 디스플레이, PCMCIA, Audio, 터미널, 키보드, 하드디스 크, 플로피디스크, 프린터등과같은주변장치들을말함 디바이스의구동에필요한프로그램, 즉디바이스드라이버가필수적으로요구

More information

교육지원 IT시스템 선진화

교육지원 IT시스템 선진화 Module 16: ioctl 을활용한 LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 ioctl() 을활용법배우기 커널타이머와 ioctl 을활용하여 LED 제어용디바이스드라이브작성하기 2 IOCTL 을이용한드라이버제어 ioctl() 함수활용 어떤경우에는읽는용도로만쓰고,

More information

ECE30076 Embedded System Programming - LED Device Driver

ECE30076 Embedded System Programming - LED Device Driver Module 12: LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 하드웨어제어를위한디바이스드라이버작성방법알아보기 LED 제어용디바이스드라이버작성하기 ioremap 을이용한 LED 제어디바이스드라이버 mmap 을이용한 LED 제어디바이스드라이버 2 디바이스구분

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Linux Kernel and Device Driver Jo, Heeseung 커널과의관계 시스템이지원하는하드웨어를응용프로그램에서사용할수있도록커널에서제공하는라이브러리 응용프로그램이하드웨어를제어하려면커널에자원을요청 - 응용프로그램에서는 C 라이브러리같은함수를호출 - 라이브러리내부에서는커널에게시스템콜을호출 - 커널로제어가넘어가게되면 ( 커널모드 ) 를통해서하드웨어를제어

More information

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

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Microsoft PowerPoint - e9.pptx

Microsoft PowerPoint - e9.pptx Kernel Programming 이란? 커널모드에서수행하는프로그램을작성하는것 임베디드리눅스커널프로그래밍 커널프로그래밍종류 Linux kernel core 기능추가 Linux kernel 알고리즘개선 Linux kernel 모듈프로그래밍 커널컴파일필요없음 2 Kernel Program vs. Application Program (1) Kernel Program

More information

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

디바이스드라이버 (Device Driver) Driver is literally a subject which drive a object. 응용프로그램에서하드웨어장치를이용해서데이터를직접읽고쓰거나제어해야하는경우에디바이스드라이버를이용 하드웨어를제어하는프로그램과애플리케이션에서 임베디드시스템설계강의자료 7 Device Driver (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 디바이스드라이버 (Device Driver) Driver is literally a subject which drive a object. 응용프로그램에서하드웨어장치를이용해서데이터를직접읽고쓰거나제어해야하는경우에디바이스드라이버를이용 하드웨어를제어하는프로그램과애플리케이션에서디바이스를제어하기위한자료구조와함수의집합

More information

Adding a New Dev file

Adding a New Dev file Adding a New Dev file - 김성영, 이재혁, 김남현 - 발표자 : 김남현 목차 01 Progress 02 Device file 03 How create dev file 04 Example Progress 4 월 1 일 프로젝트방향설정 4 월 8 일 device file 추가방법조사 mem.c 파일분석 4 월 10 일 알고리즘제시필요한함수분석

More information

Microsoft PowerPoint - 10-EmbedSW-11-모듈

Microsoft PowerPoint - 10-EmbedSW-11-모듈 11. 개요 proc 파일시스템 순천향대학교컴퓨터학부이상정 1 개요 순천향대학교컴퓨터학부이상정 2 개요 커널프래그래밍 커널의일부변경시커널전체를다시컴파일해야하는번거로움 해당모듈만컴파일하고필요할때만동적으로링크시켜커널의일부로사용할수있어효율적 자주사용하지않는커널기능은메모리에상주시키지않아도됨 확장성과재사용성을높일수있음. 순천향대학교컴퓨터학부이상정 3 모듈 (module)

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

Embeddedsystem(8).PDF

Embeddedsystem(8).PDF insmod init_module() register_blkdev() blk_init_queue() blk_dev[] request() default queue blkdevs[] block_device_ops rmmod cleanup_module() unregister_blkdev() blk_cleanup_queue() static struct { const

More information

KEY 디바이스 드라이버

KEY 디바이스 드라이버 KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

untitled

untitled Block Device Driver in Linux Embedded System Lab. II Embedded System Lab. II 2 Define objective of applications using device Study Hardware manual (Registers) (vector number) Understand interface to related

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

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

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지

More information

Microsoft Word doc

Microsoft Word doc 2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED

More information

Chap 6 모듈프로그래밍및 디바이스드라이버구현

Chap 6 모듈프로그래밍및 디바이스드라이버구현 Chap 6 모듈프로그래밍및 디바이스드라이버구현 Chap 6. 모듈프로그래밍및디바이스드라이버구현 1. 모듈프로그래밍 1.1. Kernel Module 1.1.1. Kernel Module 모듈은커널의구성요소로서, 리눅스시스템이부팅된후에동적으로 load, unload 할수있다. 이런특징으로인해커널을다시컴파일하거나시스템을재부팅하지않고도커널의일부분을교체할수있다.

More information

04디바이스드라이버

04디바이스드라이버 Linux Device Drivers ETRI ETRI 2 ETRI 3 File operation special file(=device file) (Character Device Driver) (Block Device Driver) (Network Device Driver) ETRI 4 Ex. (/dev/console), (/dev/ttys0) open, close,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

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

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

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

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

로봇SW교육원 강의자료

로봇SW교육원 강의자료 UNIT 06 커널모듈 로봇 SW 교육원 3 기 학습목표 2 커널모듈의장점을설명핛수있다. 커널모듈을작성핛수있다. 커널모듈을리눅스시스템에로딩하고해제핛수있다. 커널모듈 3 커널모듈이란무엇인가? 모듈을이용해커널의기능을확장핛수있음 디바이스드라이버추가또는커널기능확장 커널모듈의장점은무엇인가? 커널이미지를재컴파일하지않고기능을추가핛수있음 커널모듈은어떻게작성핛수있는가? 커널소스트리필요

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

Microsoft Word doc

Microsoft Word doc 1. 디바이스드라이버 [ GPIO ] 1.1. GPIO 란 GPIO(General Purpose Input/Output) 란일반적인용도로사용가능한디지털입출력기능의 Port pins 이다. S3C2410의 GPIO는총 117개이며각각이 pin 들은 input/output으로프로그램되거나인터럽트 source로사용될수있다. S3C2410의대부분의 GPIO는단순히디지털입출력뿐만아니라부가적인기능을갖고있다.

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 (Host) set up : Linux Backend RS-232, Ethernet, parallel(jtag) Host terminal Target terminal : monitor (Minicom) JTAG Cross compiler Boot loader Pentium Redhat 9.0 Serial port Serial cross cable Ethernet

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - lab14.pptx Mobile & Embedded System Lab. Dept. of Computer Engineering Kyung Hee Univ. Keypad Device Control in Embedded Linux HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착되어있다. 2 Keypad Device Driver

More information

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

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

Abstract View of System Components

Abstract View of System Components Operating System 4 주차 - System Call Implementation - Real-Time Computing and Communications Lab. Hanyang University jtlim@rtcc.hanyang.ac.kr yschoi@rtcc.hanyang.ac.kr shpark@rtcc.hanyang.ac.kr Contents

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

Microsoft PowerPoint APUE(File InO).pptx

Microsoft PowerPoint APUE(File InO).pptx Linux/UNIX Programming 문양세강원대학교 IT대학컴퓨터과학전공 강의목표및내용 강의목표 파일의특성을이해한다. 파일을열고닫는다. 파일로부터데이터를읽고쓴다. 기타파일제어함수를익힌다. 강의내용 파일구조 (UNIX 파일은어떤구조일까?) 파일관련시스템호출 시스템호출의효율과구조 Page 2 What is a File? A file is a contiguous

More information

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

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서 커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 4 장파일 컴퓨터과학과박환수 1 2 4.1 시스템호출 컴퓨터시스템구조 유닉스커널 (kernel) 하드웨어를운영관리하여다음과같은서비스를제공 파일관리 (File management) 프로세스관리 (Process management) 메모리관리 (Memory management) 통신관리 (Communication management) 주변장치관리 (Device

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

Microsoft Word - MPC850 SPI Driver.doc

Microsoft Word - MPC850 SPI Driver.doc MPC850 SPI Driver 네트워크보드에서구현한 SPI Device Driver 제작및이용방법입니다. 문서작성 : 이재훈 (kingseft.lee@samsung.com) 이용한 SPI EEPROM - X5043/X5045 512 x 8 bit SPI EEPROM (4Kbits = 512bytes) - 제조사 : XICOR (www.xicor.com) -

More information

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

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint APUE(Intro).ppt 컴퓨터특강 () [Ch. 1 & Ch. 2] 2006 년봄학기 문양세강원대학교컴퓨터과학과 APUE 강의목적 UNIX 시스템프로그래밍 file, process, signal, network programming UNIX 시스템의체계적이해 시스템프로그래밍능력향상 Page 2 1 APUE 강의동기 UNIX 는인기있는운영체제 서버시스템 ( 웹서버, 데이터베이스서버

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

Adobe Flash 취약점 분석 (CVE-2012-0754)

Adobe Flash 취약점 분석 (CVE-2012-0754) 기술문서 14. 08. 13. 작성 GNU C library dynamic linker $ORIGIN expansion Vulnerability Author : E-Mail : 윤지환 131ackcon@gmail.com Abstract 2010 년 Tavis Ormandy 에 의해 발견된 취약점으로써 정확한 명칭은 GNU C library dynamic linker

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

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

Microsoft PowerPoint - ch09_파이프 [호환 모드] 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 파이프 IT CookBook, 유닉스시스템프로그래밍 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 파이프 IT CookBook, 유닉스시스템프로그래밍 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 3/20 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

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

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

06Àå

06Àå Chapter 5 Chapter 6 Chapter 7 chapter 6 Part 1 6.1 Part 2 Part 3 145 146 Chapter 5 Chapter 6 Chapter 7 Part 1 Part 2 Part 3 147 148 Chapter 5 Chapter 6 Chapter 7 Part 1 Part 2 Part 3 149 150 Chapter 5

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

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

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

제12장 파일 입출력

제12장 파일 입출력 제 4 장파일입출력 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 1 시스템호출 (system call) 파일 (file) 임의접근 (random access) 주요학습내용 2 4.1 절 커널의역할 (kernel) 커널 (kernel) 은운영체제의핵심부분으로서, 하드웨어를운영관리하는여러가지서비스를제공함 파일관리 (File management) 디스크 프로세스관리

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

Mango220 Android How to compile and Transfer image to Target

Mango220 Android How to compile and Transfer image to Target Mango220 Android How to compile and Transfer image to Target http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys

More information

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

- 코드로읽는리눅스디바이스드라이버 강남용 - 코드로읽는리눅스디바이스드라이버 - 2011.1.3 강남용 (nykang@ssu.ac.kr) 커널스레드 스레드란? 스레드종류 도우미인터페이스 연결리스트 해시리스트 작업큐 통지연쇄 완료인터페이스 kthread 도우미 오류처리지원 ( 원시코드살펴보기 ) 2 스레드란? - 하나의프로그램내에서실행되는함수를의미 - 일반적인프로세서의경우는한순간에하나의함수만실행되지만,

More information

Chap06(Interprocess Communication).PDF

Chap06(Interprocess Communication).PDF Interprocess Communication 2002 2 Hyun-Ju Park Introduction (interprocess communication; IPC) IPC data transfer sharing data event notification resource sharing process control Interprocess Communication

More information

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

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Sensor Device Jo, Heeseung Sensor 실습 HBE-SM5-S4210 에는근접 / 가속도 / 컴파스센서가장착 각센서들을사용하기위한디바이스드라이버와어플리케이션을작성 2 근접 (Proximity) 센서 HBE-SM5-S4210 Camera Module 근접센서디바이스 근접센서는사물이다른사물에접촉되기이전에가까이접근하였는지를검출할목적으로사용 일반적으로생활에서자동문이나엘리베이터,

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 LED Device Control - mmap() Jo, Heeseung 디바이스제어 디바이스제어 HBE-SM5-S4210 에장착된 Peripheral 들은다양한인터페이스로연결되어있음 베이스보드에있는 LED 와 7-Segment 는 GPIO 로직접 CPU 에연결 M3 모듈인 FPGA 모듈은 FPGA 에의해서제어되며 CPU 와호스트버스로연결되어있어서프로그램에서는메모리인터페이스로인식

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

Microsoft PowerPoint - IOControl [호환 모드]

Microsoft PowerPoint - IOControl [호환 모드] 목차 Input/Output Control I/O Control Mechanism mmap function munmap function RAM Area Access LED Control 4 digits 7 Segment Control Text LCD Control 1 2 I/O Control Mechanism (1) I/O Control Mechanism (2)

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

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

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

좀비프로세스 2

좀비프로세스 2 Signal & Inter-Process Communication Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 좀비프로세스 2 좀비프로세스 (zombie process) 좀비프로세스란프로세스종료후메모리상에서사라지지않는프로세스 좀비프로세스의생성이유. 자식프로세스는부모프로세스에게실행결과에대한값을반환해야한다.

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

untitled

untitled Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard

More information

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

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information