Chap 6 모듈프로그래밍및 디바이스드라이버구현
|
|
- 창환 변
- 5 years ago
- Views:
Transcription
1 Chap 6 모듈프로그래밍및 디바이스드라이버구현
2 Chap 6. 모듈프로그래밍및디바이스드라이버구현 1. 모듈프로그래밍 1.1. Kernel Module Kernel Module 모듈은커널의구성요소로서, 리눅스시스템이부팅된후에동적으로 load, unload 할수있다. 이런특징으로인해커널을다시컴파일하거나시스템을재부팅하지않고도커널의일부분을교체할수있다. 우리가익히들어온디바이스드라이버, 파일시스템, 그리고네트워크프로토콜등도이런모듈로만들어져커널에포함된것이다. 커널에서는의존성이라는또다른특성이존재한다. 커널을구성하는모듈에는컴파일한커널의버전정보가들어가는데, 현재실행되고있는커널버전과같아야한다는의미이다. 버전이다르면에러가발생하게된다. 모듈의버전정보는리눅스커널소스 /include/linux/module.h에정의되어있다. #include <linux/list.h> #include <linux/stat.h> #include <linux/compiler.h> ( 중략 ) /* Not Yet Implemented */ #define MODULE_SUPPORTED_DEVICE(name) /* Some toolchains use a `_' prefix for all user symbols. */ #ifdef CONFIG_SYMBOL_PREFIX #define MODULE_SYMBOL_PREFIX CONFIG_SYMBOL_PREFIX #else #define MODULE_SYMBOL_PREFIX "" #endif #define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN struct kernel_symbol { unsigned long value; const char *name; }; struct modversion_info { unsigned long crc; char name[module_name_len]; }; struct module; 2
3 Chap 6. 모듈프로그래밍및디바이스드라이버구현 Kernel Link insmod (install module) 시, 위변수를이용하여버전검사를하게된다. 따라서모듈버전정보는전체모듈에서하나만존재해야한다. 커널에대한모듈프로그램 ( 예로서, 지금다루고있는디바이스드라이버 ) 이일반적인응용프로그램과다른점은 main() 함수대신에커널에 loading( 적재 ) 와 unloading( 삭제 ) 될때호출되는 int init_module(void) 함수와 void cleanup_module() 함수가존재한다는것이다. < 커널에모듈이 link 되는개념도 > Module Programming Test 1 module_test.c ( hello.c ) 이모듈은함수두개를정의한다. 하나는커널이모듈을로드할때 (hello_init), 다른하나는모듈을제거할때 (hello_exit) 호출한다. module_init과 module_exit는각함수의임무를나타내는커널매크로이다. MODULE_LICENSE() 매크로는모듈에대한라이선스를명시하고, MODULE_AUTHOR() 매크로는모듈의저작자를명시한다. printk 함수는리눅스커널에들어있으며, 모듈에서사용할수있다. 이함수는표준 C 함수인 printf와유사한동작한다. 커널은 C 라이브러리없이독자적으로구동하기때문에이같은함수가별도로필요하다. 모듈에서는 printk를항상호출할수있다. 이는 insmod로모듈을로드한후, 모듈이커널에링크되고나면커널의 3
4 Chap 6. 모듈프로그래밍및디바이스드라이버구현 심벌테이블을참조할수있기때문이다. KERN_ALERT라는문자열은메시지의우선순위이다. 이모듈에서는높은우선순위를지정했다. 기본우선순위를지정하면실행중인커널버전의 klogd 데몬시스템구성등에따라메시지가적재적소에나타나지않을지도모르기때문이다. /* Module example FILE : hello_module.c */ #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("Huins"); static int module_begin(void) { printk(kern_alert "Hello, Wellcome to module!!\n"); return 0; } static void module_end(void) { } printk(kern_alert "Goodbye, Exit module!!\n"); module_init(module_begin); module_exit(module_end); 아래와같이 Makefile 을만들어위에서만든소스를컴파일한다. 2 Makefile 아래와같이 Makefile을만들면된다. 다만 KDIR 은커널소스디렉터리를의미하기때문에사용자환경에맞추어서수정하면된다. obj-m := hello_module.o KDIR := /work/achroimx6q/kernel PWD := $(shell pwd) all: driver driver: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.ko rm -rf *.mod.* 4
5 Chap 6. 모듈프로그래밍및디바이스드라이버구현 rm -rf *.o 3 컴파일모듈소스디렉터리에서 make를입력하여컴파일한다. <Host PC> root@ubuntu:/# cp -a /media/achro-i.mx6q-1/dvd-1_src/examples/linux/module/module.tar.gz /root/temp root@ubuntu:/# cd /root/temp root@ubuntu:~/temp# tar xvf module.tar.gz -C /work/achroimx6q/ root@ubuntu:/# cd /work/achroimx6q/module root@ubuntu:/work/achroimx6q/module# make 4 실행임베디드보드를부팅한다음 NFS를통하여 hello.ko 파일을보드로복사한다. 복사가완료되면, insmod를통해서 hello.ko를커널에적재한다. 호스트에서컴파일된모듈을 /nfsroot 디렉터리로복사한다. <Host PC> root@ubuntu:/work/achroimx6q/examples/linux/module# mkdir /nfsroot ( 해당디렉터리가없다면생성 ) root@ubuntu:/work/achroimx6q/examples/linux/module# cp hello_module.ko /nfsroot <targt board> minicom 실행 -> board power on -> achroi.mx 진입 -> ifconfig 를이용한 ip 셋업 -> 리눅스호스트 mount Achro-i.MX6Q 에서는 mount 를통해호스트와연결한다. <TargetBoard> root@achroimx6q:/# mkdir /mnt/nfs ( 해당디렉터리가없다면생성 ) root@achroimx6q:/# mount -t { 리눅스호스트 ip}:/nfsroot /mnt/nfs o rw,rsize=1024,nolock 연결이완료되면마운트된해당경로로이동하여 insmod 를실행하거나, Achro-i.MX6Q 의파일시스템으로해당드라이버를복사한후에 insmod 를이용하 여커널에적재한다. 5
6 Chap 6. 모듈프로그래밍및디바이스드라이버구현 모듈이커널에적재되면 Hello, Wellcome to module!! 이라는문자열이출력되고, 커널에서내리게되면 "GoodBye, Exit Module!!" 이라는문자열이출력된다. <TargetBoard> cp /mnt/nfs/hello_module.ko /root cd /root insmod hello_module.ko Hello, Welcome to module!! rmmod hello_module GoodBye, Exit Module!! Usage Count 리눅스시스템은각모듈들이안전하게제거될수있도록 usage count를유지한다. 마운트된파일시스템을사용중에는제거할수없는것처럼, 시스템은 usage count 정보를가지고대상모듈이현재사용중인지판단하고, 사용중이라면제거하지못하도록한다. 이런 usage count는 <linux/module.h> 에정의되어있는아래세가지매크로를이용하여조작할수있다. 1 MOD_INC_USE_COUNT - 현재모듈의 usage count 를 1 만큼증가시킨다. 2 MOD_DEC_USE_COUNT - 현재모듈의 usage count 를 1 만큼감소시킨다. 3 MOD_IN_USE - 현재 usage count 값이 0 인지를판별한다. 만약 usage count를제대로관리하지못하면더이상필요하지않은모듈도제거할수없게된다. 개발과정에서는필요하지않은모듈을제거못하는경우를자주경험하게된다. 예를들어, 모듈의 NULL pointer 참조로인해서실행되던프로세스가갑자기죽어버리게되면 usage count를감소시키지못하는경우가발생하게된다. 이런경우실행중인프로세스가없음에도불구하고 usage count값이 0이되지않을수있다. 개발중에는 MOD_INC_USE_COUNT와 MOD_DEC_USE_COUNT를의미없는연산으로재정의 6
7 Chap 6. 모듈프로그래밍및디바이스드라이버구현 하여아예 usage count를사용하지않거나, ioctl() 함수를사용하여 usage count를강제로 0으로만드는 ( 실제완성된모듈에서는이런방법들을쓰지않지만 ) 등의방법들을써서시간을절약하기도한다. 현재모듈의 usage count는 /proc/modules 를읽어보면알수있다. 이파일은현재시스템에적재되어있는모듈들을보여주며, 다음과같은형태를가지고있다. 아래는모듈관련리눅스명령어이다. 명령어용도 insmod rmmod lsmod module 을설치 (install) 실행중인 modules 을제거 (unload) Load 된 module 들의정보를표시 depmod 커널내부에적재된모듈간의의존성을검사한다. modprobe modinfo 모듈간의존성을검사하여그결과누락된다른모듈을찾아서 적재한다. 목적파일을검사해서관련된정보를표시 7
8 2. 디바이스드라이버 2.1. 리눅스디바이스드라이버본장에서는리눅스디바이스드라이버에대한정의와종류그리고구성요소에대해기술한다 정의디바이스 (Device) 란 LCD, USB, Ethernet, PCMCIA, CF, AUDIO 등과같이컴퓨터시스템 (Flash Memory, SDRAM등의 ) 이외의주변장치를말하고, 드라이버 (Driver) 란이러한하드웨어장치를제어하고관리하는방법을컴퓨터시스템 ( 즉, 운영체제 ) 에게알려주는프로그램을말한다. 우리는보통이드라이버를디바이스드라이버라고부르는데, 디바이스를구동시키기위해서는반드시필요한프로그램이라고생각하면된다. 리눅스커널에서지원하는드라이버도있지만 ( 예를들면, 마우스, 키보드, Floppy 등 ) 그렇지않은경우에는해당드라이버를찾아설치하거나만들어주어야한다. 이런디바이스드라이버의기능을간략하게요약하면 물리적인하드웨어장치를다루고관리하는소프트웨어로서 Major number( 주번호 ) 와 Minor mumber( 부번호 ) 를이용하여각디바이스를구분하여사용하는커널의일부분이다. 응용프로그램이하드웨어 ( 즉, 디바이스 ) 를제어할수있도록인터페이스를제공해주는코드이며, 프로그래머가하드웨어에독립적인프로그램을작성하도록도와준다. 표준화된 call을이용하여디바이스와정보를주고받는역할을하며, UNIX의기본적인특징중하나인추상화장치를다루는데사용한다. 모든하드웨어장치들은보통의파일처럼보이지만파일을다루는데쓰이는표준 system call (open, read, write, close 등 ) 을사용한다 Device Driver와 Kernel 어플리케이션에서디바이스드라이버를제어하려면아래그림과같은방법으로하드웨어와통신할수있다. 어플리케이션은어플리케이션영역 (Application Area, User Area) 에서만사용된다. 사용중, 디바이스드라이버에접근할필요가있으면응용애플리케이션의프로세스는시스템콜 (System Call, trap) 을발생시킨다. 시스템콜이발생되면리눅스커널영역에서는해당장치와연결하기위해서 VFS를통해디바이스드라이버로값을전달하거나받아오게된다. 디바이스드라이버에서응용프로그램에있는데이터를가져올때는 copy_from_user() 와같은함수를이용하고, 해당장치에서받아온값을응용영역으로보낼때는 copy_to_user() 와같은함수를이용하여데이터를전달한다. 일반적인하드웨어제어는문자 (Character) 디바이스드라이버가이용되지만, 8
9 CDROM이나 HDD와같이한번에많은데이터가송수신되어야되는경우라면블록 (Block) 디바이스드라이버로구현되기때문에중간에버퍼캐시를두게된다. 네트워크디바이스드라이버는일반적인드라이버와는약간다르다. 네트워크디바이스인경우에는네트워크서브시스템을통해서네트워크장치와연결된다. 본교재에서는 Achro-i.MX6Q 의개발자보드혹은본체에부착되어있는문자 디바이스위주로진행이된다. < 리눅스디바이스드라이버등록 Block Diagram > 디바이스드라이버를커널에등록시키기위해서 insmod를실행하면, 디바이스드라이버의 init_module() 이수행된다. 해당모듈이수행되면디바이스드라이버의초기화부분이수행된다. 사용자프로그램에서장치를사용하려면 open() 을통해서해당장치를호출 (call) 하고, 해당디바이스드라이버의 dev_open() 함수가구동된다. 정상적으로장치가호출되면 return을통해장치를제어할수있는디스크립터를반환한다. 반환된스크립트가 -1이면장치호출이실패한경우이며, 표준입력, 표준출력, 표준에러를제외한값이 (3~) 이된다. 장치가정상적으로열리게되면, 응용프로그램내에서는 read(), write(), ioctl() 등을이용해서디바이스드라이버를호출한다. 응용프로그램에서호출된 read(), write(), ioctl() 은커널의파일오퍼레에션구조체에등록되어있는각각의함수를실행하고결과를리턴값으로반환한다. 응용프로그램에서 close() 함수를호출하면, 다시시스템콜이발생하고해당시 9
10 스템디바이스드라이버의 dev_release() 가실행되어장치에대한처리를한다. < 리눅스디바이스드라이버등록도식도 > 2.2. Device Driver의분류 Device Driver 구성디바이스드라이버는디바이스관리를위한인터페이스구현함수와자료구조의집합이라고할수있다. 커널은이렇게구현된인터페이스를통해물리적인디바이스에게 IO 함수를요청하고제어할수있다. 디바이스드라이버는이같은인터페이스를통해디바이스에접근하는데이터형식이다 Major number, Minor number 문자와블록디바이스드라이버는파일형태의노드를통해서사용자프로그램과데이터송 / 수신이가능하다. 때문에데이터송수신을위해서파일형태의노드정보를커널에게알려주어야하며, 그방식은다음과같다. 함수의첫번째인수는특정하드웨어장치를구분하는 Major 번호를사용한다. 따라서종류가다른하드웨어장치에는다른 Major 번호를부여한다. 예를들면, UART는 4를사용하고, SCSI Disk는 8을사용한다. Minor 번호는하드웨어특성이 ( 같은종류의하드웨어장치 ) 10
11 같지만여러개있을때, 각각의장치를분류하기위해서사용하는번호이다. UART나 SCSI 디바이스는여러개의장치를사용할수있기때문에 Minor번호로분류하게된다. 커널은이렇게만들어진각디바이스의주번호와부번호 (major, minor number) 를이용해서특정장치에접근하게된다. 새로운디바이스드라이버를만들때는 include/linux/major.h 또는 /proc/devices 파일을참조하여다른디바이스드라이버와충돌하지않도록주의해서번호를할당해야한다 Device Driver 종류 1 Character Device Driver 문자 (char) 디바이스는 ( 파일처럼 ) 바이트스트림형태로참조할수있다. 문자디바이스드라이버가이러한활동을구현할책임이있다. 대개문자드라이버는최소한 open, close, read, write 시스템호출을구현한다. 문자열콘솔 (/dev/console) 과직렬포트 (/dev/ttys0을비롯한 tty계열 ) 가문자디바이스의보기로서스트림형태의추상화를잘표현하고있다. 문자디바이스는 /dev/tty1과 /dev/lp0 과같이파일시스템노드라는수단을통해서참조한다. 문자디바이스와일반적인파일과의차이점이라면, 파일은항상앞뒤로이동이가능한반면에, 문자디바이스는데이터채널에불과하므로순차적으로만참조할수있다는사실이다. 그렇지만데이터영역처럼취급하여앞뒤로이동할수있는문자디바이스가없는것은아니다. 주로프레임그래버가여기에해당하는데, 응용프로그램은 mmap또는 lseek을이용하여가져온이미지전체를참조할수있다. 파일처럼사용. 파일접근에필요한 open, close, read, write는시스템콜로구현. 일반적으로순차적접근만허용. /dev/ttys0, /dev/lp1과같은파일시스템노드로접근. X root@ubuntu File Edit View Terminal Help root@ubuntu:/# ll /dev/ttys* crw-rw root dialout 4, 68 10월 6 09:01 /dev/ttys1 crw-rw root dialout 4, 68 10월 6 09:01 /dev/ttys2 crw-rw root dialout 4, 68 10월 6 09:01 /dev/ttys3 crw-rw root dialout 4, 68 10월 6 09:01 /dev/ttys4 crw-rw root dialout 4, 69 10월 6 09:01 /dev/ttys5 crw-rw root dialout 4, 70 10월 6 09:01 /dev/ttys6 crw-rw root dialout 4, 71 10월 6 09:01 /dev/ttys7 위출력화면에서노드파일 (/dev/ttys1) 을확인해보면다음과같은의미를가진다. 11
12 c 는 Character Device, 주번호는 4 번, 부번호는 68, 디바이스이름은 ttys1 사용자가노드파일을만들때는다음과같이하면된다. <Host PC> root@ubuntu:/# mknod /dev/ttys1 c 4 68 문자디바이스드라이버등록위에서언급한것처럼, 디바이스드라이버를추가한다는것은새로하나의주번호 (Major number) 를디바이스드라이버에할당한다는의미이다. init_ module 함수가모듈을초기화할때, 커널소스디렉터리의 /include/linux/fs.h에정의되어있는디바이스등록함수를주번호로호출함으로써이루어진다. /* fs/char_dev.c */ #define CHRDEV_MAJOR_HASH_SIZE 255 extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *); extern int register_chrdev_region(dev_t, unsigned, const char *); extern int register_chrdev(unsigned int major, unsigned int baseminor, unsigned int count, const char *name, const struct file_operations *fops); extern void unregister_chrdev(unsigned int major, unsigned int baseminor, unsigned int count, const char *name); extern void unregister_chrdev_region(dev_t, unsigned); extern void chrdev_show(struct seq_file *,off_t); static inline int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops) { return register_chrdev(major, 0, 256, name, fops); } static inline void unregister_chrdev(unsigned int major, const char *name) { unregister_chrdev(major, 0, 256, name); } - extern int register_chrdev(unsigned int, const char *, struct file_operations 12
13 *) 첫번째인수 : Major 번호로만약 0 값을주면 Major 번호중사용하지않는번호로동적할당한다. 두번째인수 : 디바이스 name 즉장치이름이며, /proc/devices에나타난다. 세번째인수 : 파일연산함수 ( 다음에자세히설명할것이다.) 리턴하는값 : 0이나양수이면정상, 음수이면실패. 내 PC 에등록되어있는디바이스드라이버를확인해보려면다음과같은명령어 를실행한다. 13
14 X File Edit View Terminal Help cat /proc/devices Character devices: 1 mem 4 /dev/vc/0 4 tty 4 ttys 5 /dev/tty 5 /dev/console 5 /dev/ptmx 5 ttyprintk 6 lp 7 vcs 10 misc ( 중략 ) 251 hidraw 252 bsg 253 watchdog 254 rtc Block devices: 1 ramdisk 259 blkext 7 loop 8 sd 9 md 11 sr 65 sd 66 sd 252 device-mapper 253 virtblk 254 mdp 문자디바이스장치해제하기 리눅스시스템에서모듈을삭제할때에는주번호도함께제거해야한다. cleanup_ module 함수에서디바이스장치해제함수를사용한다. 14
15 - extern int unregister_chrdev(unsigned int, const char *) 첫번째인자 : 해제하고자하는장치주번호 (Major nuber) 두번째인자 : 해제하고자하는장치이름 (Device name) 커널은디바이스이름을처음주번호를할당할때의이름과비교한다. 이름이 틀리거나, 제거하고자하는디바이스가없거나, 혹은, 주번호가경계를벗어난값 을가지면에러코드인 -einval 을리턴하게된다. 파일연산 (Files Operation) 사용자영역과디바이스드라이버역역, 즉커널영역은파일인터페이스를통해데이터를주고받을수있다. 디바이스드라이버는 register_chrdev() 함수로드라이버를등록할때사용하는함수인자, file_operations 구조체를이용하여서로 access 한다. file_operations 구조체는 file 구조체의일부이다. file 구조체는소스리스트중자주쓰이는것을먼저살펴보고, file_operations 구조체에대해서설명한다. 아래그림은./include/linux/fs.h 에서캡처한것이다 15
16 struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char user *, size_t, loff_t *); ssize_t (*write) (struct file *, const char user *, size_t, loff_t *); ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t); ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *, fl_owner_t id); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, int datasync); int (*aio_fsync) (struct kiocb *, int datasync); int (*fasync) (int, struct file *, int); int (*lock) (struct file *, int, struct file_lock *); 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); int (*check_flags)(int); int (*flock) (struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); int (*setlease)(struct file *, long, struct file_lock **); long (*fallocate)(struct file *file, int mode, loff_t offset, loff_t len); }; unsigned int f_flags; 응용프로그램에서 open( /dev/mem,o_rdonly) 할때사용하는플래그로서, O_RDONLY, O_RDWR, O_NONBLOCK, O_SYNC 등의플래그설정값을말한다. loff_t f_pos; read/write/lseek함수와같이파일의위치를변경하기위해사용된다. 16
17 const struct file_operations *f_op; 드라이버메서드를가리키는포인터. void *private_data; 드라이버 / 모듈의내부데이터를유지하며, 전역변수는사용을 자체해야한다. Character Device file operation 내용 loff_t (*llseek) (struct file *, loff_t, int); 파일에서현재읽고쓰는위치를이동하는함수 ssize_t (*read, *write) (struct file *, char *, size_t, loff_t *); 장치에서데이터를읽거나, 쓴다. int (*readdir) (struct file *, void *, filldir_t); 디렉터리에만사용하는함수 - 디바이스노드에서는 Null' 값을리턴한다. unsigned int (*poll) (struct file *, struct poll_table_struct *); 현재실행중인프로세스를대기 queue에넣는다. int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); 디바이스에종속적인함수나커맨드를만드는데사용한다. 각디바이스장치에대한고유한커맨드를프로그래머가임의로만들수있다. int (*mmap) (struct file *, struct vm_area_struct *); 디바이스의메모리를프로세스메모리에맵핑시키는함수 int (*open) (struct inode *, struct file *); 디바이스를 open int (*flush) (struct file *); 디바이스 flush int (*release) (struct inode *, struct file *); 디바이스해제 int (*fsync) (struct file *, struct dentry *, int datasync); 디바이스 flush int (*fasync) (int, struct file *, int); flag in fasync flag에변화가있는디바이스를확인할때쓴다. int (*lock) (struct file *, int, struct file_lock *); 파일에락을건다. - 파일연산 (File Operation) example :./driver/char/misc.c 17
18 static const struct file_operations misc_proc_fops = {.owner = THIS_MODULE,.open = misc_seq_open,.read = seq_read,.llseek = seq_lseek,.release = seq_release, }; 2 Block Device Driver 블록 (block) 디바이스도문자디바이스와마찬가지로 /dev/ 디렉터리에서파일시스템노드로참조한다. 블록디바이스는파일시스템을수용할수있는디바이스로서 CDROM과 HDD등이해당된다. 대다수유닉스시스템에서블록디바이스는완전한블록을하나이상전송하는 I/O작업만을수행할수있다. 이때블록의길이는대개 512바이트 ( 또는 2의배수로증가하는더큰값 ) 이다. 리눅스에서는응용프로그램이블록디바이스를문자디바이스처럼읽고쓸수있으며, 한번에전송할수있는바이트수에는제한이없다. 결과적으로블록디바이스와문자디바이스는커널이내부적으로데이터를관리하는방법, 즉커널의드라이버소프트웨어인터페이스에만차이가있을뿐이다. 사용자입장에서는두디바이스사이에차이점이없으나, 블록디바이스는문자디바이스와는완전히다른커널접근인터페이스에의존한다. 디스크와같이파일시스템을가질수있으며, 블록단위로만데이터를송 수신한다. Linux에서는한번에여러크기의바이트를전송할수있으며, 커널이나하드웨어인터페이스만문자디바이스와차이가있을뿐, 사용자에게는파일형태로접근하는문자디바이스와동일하게보인다. 블록디바이스드라이버는 Buffer Cache를통해 Random Access가가능하며, 예로써, HDD, Floppy disk, Ram disk, CD-ROM 등이있다. 문자디바이스드라이버와마찬가지로주번호로구분하지만문자디바이스와는별개로관리되기때문에주번호가겹쳐도상관이없다. 블록디바이스의파일시스템은버퍼캐시를통해서접근하지만버퍼캐시를이용하는일반 read/write 동작과는차이가있다. 이를위해서추가적인구조체가존재하며, 이구조체를통해서실질적인 read/write를수행하는함수를구현해야한다. 블록의크기, 섹터의크기, 전체크기등의설정은따로관리해야한다. 18
19 블록디바이스드라이버등록 블록디바이스드라이버도문자디바이스드라이버처럼주번호의해구분된다. extern int register_blkdev(unsigned int, const char *, struct block_device_operations *); 첫번째인자 : Major 번호, 0이면동적할당 두번째인자 : 블록디바이스이름 세번째인자 : 블록디바이스장치에대한파일연산함수 리턴값 : 0이나양수이면정상, 음수이면에러 블록디바이스드라이버해제 extern int unregister_blkdev(unsigned int, const char *); 첫번째인자 : Major 번호 두번째인자 : 블록디바이스이름 - 파일연산 (File Operation) 블록디바이스드라이버의파일연산은문자디바이스드라이버와차이점이있기때문에간단히언급하고자한다. 아래그림은./include/linux/fs.h 에서캡처한것이다. 19
20 struct block_device { dev_t bd_dev; /* not a kdev_t - it's a search key */ int bd_openers; struct inode * bd_inode; /* will die */ struct super_block * bd_super; struct mutex bd_mutex; /* open/close mutex */ struct list_head bd_inodes; void * bd_claiming; void * bd_holder; int bd_holders; bool bd_write_holder; #ifdef CONFIG_SYSFS struct list_head bd_holder_disks; #endif struct block_device * bd_contains; unsigned bd_block_size; struct hd_struct * bd_part; /* number of times partitions within this device have been opened. */ unsigned bd_part_count; int bd_invalidated; struct gendisk * bd_disk; struct list_head bd_list; /* * Private data. You must have bd_claim'ed the block_device * to use this. NOTE: bd_claim allows an owner to claim * the same device multiple times, the owner must take special * care to not mess up bd_private for that case. */ unsigned long bd_private; }; /* The counter of freeze processes */ int bd_fsfreeze_count; /* Mutex for freeze */ struct mutex bd_fsfreeze_mutex; Block device 의 operation 은 include/linux/blkdev.h 에기술되어있다. 20
21 struct block_device_operations { int (*open) (struct block_device *, fmode_t); int (*release) (struct gendisk *, fmode_t); int (*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); int (*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long); int (*direct_access) (struct block_device *, sector_t, void **, unsigned long *); unsigned int (*check_events) (struct gendisk *disk, unsigned int clearing); /* ->media_changed() is DEPRECATED, use ->check_events() instead */ int (*media_changed) (struct gendisk *); void (*unlock_native_capacity) (struct gendisk *); int (*revalidate_disk) (struct gendisk *); int (*getgeo)(struct block_device *, struct hd_geometry *); /* this callback is with swap_lock and sometimes page table lock held */ void (*swap_slot_free_notify) (struct block_device *, unsigned long); struct module *owner; }; < Block Device file Operation 예 > 일반적으로블록디바이스드라이버에서 read/write/fsync 함수는따로구현하지 않고 block_read(), block_write(), block_fsync() 함수를그대로사용한다. open 이 나 release 는문자디바이스드라이버처럼구현하여사용한다. 그러나 ioctl 는조금 21
22 차이가있다. 그것은수많은블록디바이스드라이버가사용할것으로예상되는공통적인 ioctl 커맨드들을지원해야한다는점이다. 보통그공통적인커맨드는 - BLKGETSIZE : 장치의크기를섹터의개수로환산해리턴 - BLKFLSBUF : 버퍼캐시를 flush - BLKRAGET : 미리읽어올데이터크기 - BLKRASET : 미리읽어올데이터셋팅 - BLKROGET : flag 얻어오기 - HDIO_GETGEO : 하드디스크의구조읽어오기등이바로그것이다. - 파일연산 (File Operation) example : floppy static const struct block_device_operations floppy_fops = {.owner = THIS_MODULE,.open = floppy_open,.release = floppy_release,.locked_ioctl = fd_ioctl,.getgeo = fd_getgeo,.media_changed = check_floppy_change,.revalidate_disk = floppy_revalidate, }; - Buffer Cache State 블록디바이스는이미언급한것처럼버퍼캐시를이용하여데이터를주고받는 다. 여기서는간단하게버퍼캐시상태에대해설명하도록하겠다. 22
23 - Device Driver 와 Buffer Cache - BH_Uptodate 현재버퍼는유효한데이터를가지고있다. - BH_Dirty 디스크에있는데이터와버퍼의데이터는다르다. - BH_Lock 현재버퍼가 Lock되어있다. ( 처리중에있다 ) - BH_Req 해당하는블록이데이터를요청. - BH_Mapped 버퍼가현재디스크에 mapping 되어있다. - BH_New 버퍼가새로운것이며아직 write 되지않았다. - BH_Protected 버퍼가보호되고있는상태. 이버퍼는 free 되지않는다. 3 Network Device Driver 모든네트워크트랜잭션은인터페이스, 즉다른호스트와데이터를교환해주는디바이스를거친다. 대개인터페이스라면하드웨어를가리키지만, 루프백인터페이스처럼순수소프트웨어디바이스일경우도있다. 네트워크인터페이스는데이터패킷을전송하는책임이있다. 이작업은커널의네트워크하위시스템이주도한다. 하지만인터페이스자체는각트랜잭션을실제전송할패킷으로사상하는방법을알지못한다. ( 특히 TCP를사용하는 ) 네트워크연결은스트림형태가많지만네트워크디바이스는대체로패킷전송과수신을위주로설계한다. 네트워크드라이버 23
24 는개별연결에대하여전혀아는바없이패킷만을처리할뿐이다. 네트워크인터페이스는스트림형태의디바이스가아니어서 /dev/tty1처럼파일시스템노드로쉽게사상할수없다. 유닉스에서는 (eth0과같은 ) 고유한이름을할당하여인터페이스를참조하지만, 파일시스템에는이이름에상응하는항목이존재하지않는다. 커널과네트워크디바이스드라이버사이에서일어나는통신은문자드라이버나블록드라이버와완전히다르다. read와 write 함수대신에커널은패킷전송에관련된함수를호출한다. 현재등록된네트워크디바이스의정보는다음에서볼수있다. <Host PC> root@ubuntu:/# cat /proc/net/dev 네트워크디바이스드라이버는내부적으로크고복잡하기때문에여기서는다루지않는다. 리눅스를사용하는가장큰이유중하나는네트워크를이용할수있기때문인데, 기본설정에관한 ifconfig, route 등의유틸리티뿐만아니라네트워크에대한기본지식을먼저습득하고네트워크디바이스드라이버를공부하기바란다.
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 informationEmbeddedsystem(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슬라이드 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 informationAdding 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 informationPowerPoint 프레젠테이션
Linux Kernel and Device Driver Jo, Heeseung 커널과의관계 시스템이지원하는하드웨어를응용프로그램에서사용할수있도록커널에서제공하는라이브러리 응용프로그램이하드웨어를제어하려면커널에자원을요청 - 응용프로그램에서는 C 라이브러리같은함수를호출 - 라이브러리내부에서는커널에게시스템콜을호출 - 커널로제어가넘어가게되면 ( 커널모드 ) 를통해서하드웨어를제어
More informationChapter #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임베디드시스템설계강의자료 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 informationuntitled
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<4D F736F F F696E74202D205BBAB0C3B75D20B8AEB4AABDBA20B5F0B9D9C0CCBDBA20B5E5B6F3C0CCB9F620B8F0B5A82E >
안드로이드환경에서의 리눅스디바이스드라이버 문자디바이스드라이버설명 Table of contents 디바이스드라이버구조 시스템구조 모듈의기본골격 드라이버 IO 제어 안드로이드환경에서의 한백전자교육사업부 리눅스디바이스드라이버 시스템구조 쉘 응용프로그램 표준라이브러리 시스템콜 가상파일시스템 (VFS) 버퍼캐시 네트워크시스템 문자디바이스드라이버 블럭디바이스드라이버 네트워크디바이스드라이버
More information망고100 보드로 놀아보자 -13
리눅스디바이스드라이버개요 http://cafe.naver.com/embeddedcrazyboys http://www.mangoboard.com 디바이스드라이버개요 디바이스 (Device ) 네트워크어댑터, LCD 디스플레이, PCMCIA, Audio, 터미널, 키보드, 하드디스 크, 플로피디스크, 프린터등과같은주변장치들을말함 디바이스의구동에필요한프로그램, 즉디바이스드라이버가필수적으로요구
More information교육지원 IT시스템 선진화
Module 11: 가상디바이스드라이버작성 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 디바이스드라이버의실행과정이해하기 크로스컴파일러를이용하여가상의디바이스드라이버생성하기 Kbuild 에대해이해하기 2 file_operations 구조체 struct file_operations {
More informationECE30076 Embedded System Programming - LED Device Driver
Module 12: LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 하드웨어제어를위한디바이스드라이버작성방법알아보기 LED 제어용디바이스드라이버작성하기 ioremap 을이용한 LED 제어디바이스드라이버 mmap 을이용한 LED 제어디바이스드라이버 2 디바이스구분
More information(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])
목차 Device Driver 커널프로그램 Kernel program Kernel program 유의사항 Kernel module 디바이스드라이버 Character/Block device driver Device driver 구조 Device driver 작성절차및 module 등록 LED 디바이스드라이버 Kernel Program (1) 커널프로그램과응용프로그램과비교
More information교육지원 IT시스템 선진화
Module 16: ioctl 을활용한 LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 ioctl() 을활용법배우기 커널타이머와 ioctl 을활용하여 LED 제어용디바이스드라이브작성하기 2 IOCTL 을이용한드라이버제어 ioctl() 함수활용 어떤경우에는읽는용도로만쓰고,
More information디바이스드라이버 (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 informationKEY 디바이스 드라이버
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슬라이드 1
/ 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file
More informationMicrosoft PowerPoint - 10-EmbedSW-11-모듈
11. 개요 proc 파일시스템 순천향대학교컴퓨터학부이상정 1 개요 순천향대학교컴퓨터학부이상정 2 개요 커널프래그래밍 커널의일부변경시커널전체를다시컴파일해야하는번거로움 해당모듈만컴파일하고필요할때만동적으로링크시켜커널의일부로사용할수있어효율적 자주사용하지않는커널기능은메모리에상주시키지않아도됨 확장성과재사용성을높일수있음. 순천향대학교컴퓨터학부이상정 3 모듈 (module)
More informationPowerPoint 프레젠테이션
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 informationPowerPoint 프레젠테이션
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 informationMicrosoft 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 informationPowerPoint 프레젠테이션
Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여
More informationPowerPoint 프레젠테이션
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 informationMicrosoft Word doc
2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.
More informationPowerPoint 프레젠테이션
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 informationPowerPoint 프레젠테이션
BOOTLOADER Jo, Heeseung 부트로더컴파일 부트로더소스복사및압축해제 부트로더소스는웹페이지에서다운로드 /working 디렉터리로이동한후, wget으로다운로드 이후작업은모두 /working 디렉터리에서진행 root@ubuntu:# cp /media/sm5-linux-111031/source/platform/uboot-s4210.tar.bz2 /working
More informationChap 5 루트파일시스템 (Root F/S)
Chap 5 루트파일시스템 (Root F/S) Chap 5. 루트파일시스템 (Root F/S) 1. Root File System 1.1. Root File system Root file system이란 / 에마운트되는 file system을말한다. 리눅스시스템에서커널이기본적인운용환경을구성해주고난다음, 루트파일시스템이리눅스시스템에서사용하는유틸리티, 라이브러리등과같은부가적인요소들을제공한다.
More information임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationPowerPoint 프레젠테이션
(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 informationMicrosoft 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 informationPowerPoint 프레젠테이션
Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용
More informationK&R2 Reference Manual 번역본
typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
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제1장 Unix란 무엇인가?
4 장파일 컴퓨터과학과박환수 1 2 4.1 시스템호출 컴퓨터시스템구조 유닉스커널 (kernel) 하드웨어를운영관리하여다음과같은서비스를제공 파일관리 (File management) 프로세스관리 (Process management) 메모리관리 (Memory management) 통신관리 (Communication management) 주변장치관리 (Device
More information¼ÒÇÁÆ®-12È£-ÃÖÁ¾¿Ï¼º
IT World 2008. 05 No.12 Focus Interview Best Practice Open Mind 2008. 05 No.12 Contents Special Editorial Best Practice 04 08 12 16 20 22 24 28 30 Insight 34 36 40 42 46 Tech Guide 50 56 62 News & Trend
More informationMango-AM335x LCD Type 커널 Module Parameter에서 변경하기
Mango-AM335x LCD Type 커널 Module Parameter 에서 변경하기 http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology
More information10.
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이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론
이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN
More informationAPI 매뉴얼
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 informationvi 사용법
네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More informationPowerPoint 프레젠테이션
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 informationMicrosoft 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 informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)
More informationMicrosoft PowerPoint - 03-Development-Environment-2.ppt
개발환경 2 임베디드시스템소프트웨어 I 차례 부트로더의기능, 컴파일방법 커널의기능, 컴파일방법 파일시스템의기능, 생성방법 Host-KIT 네트워크연결방법 (Bootp, TFTP, NFS) 개발환경 2 2 부트로더의기능 하드웨어초기화 CPU clock, Memory Timing, Interrupt, UART, GPIO 등을초기화 커널로드 커널이미지를 flash
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information06Àå
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 information04디바이스드라이버
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 informationA 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로봇SW교육원 강의자료
UNIT 06 커널모듈 로봇 SW 교육원 3 기 학습목표 2 커널모듈의장점을설명핛수있다. 커널모듈을작성핛수있다. 커널모듈을리눅스시스템에로딩하고해제핛수있다. 커널모듈 3 커널모듈이란무엇인가? 모듈을이용해커널의기능을확장핛수있음 디바이스드라이버추가또는커널기능확장 커널모듈의장점은무엇인가? 커널이미지를재컴파일하지않고기능을추가핛수있음 커널모듈은어떻게작성핛수있는가? 커널소스트리필요
More informationMicrosoft 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 informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More information교육지원 IT시스템 선진화
Module 10: 디바이스드라이버기초 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 디바이스드라이버란? 디바이스드라이버주요함수알아보기 디바이스드라이버기본골격구성하기 2 디바이스드라이버프로그래밍 리눅스커널의구조 커널프로그래밍 리눅스커널의핵심 (core) 기능추가 리눅스커널알고리즘개선
More informationThe 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장 Unix란 무엇인가?
1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.
More informationPA for SWE2007
CSE3047-41: Operating System Practice (Spring 2016) Programming Assignment #2: 1. Introduction Due: 18th April. (Mon), 11:59 PM I-Campus 과제내용을필히확인하세요. 이번과제에서는 Linux kernel 에새로운 system call 을추가하고, Tizen
More informationPowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
More informationMicrosoft Word doc
1. 디바이스드라이버 [ GPIO ] 1.1. GPIO 란 GPIO(General Purpose Input/Output) 란일반적인용도로사용가능한디지털입출력기능의 Port pins 이다. S3C2410의 GPIO는총 117개이며각각이 pin 들은 input/output으로프로그램되거나인터럽트 source로사용될수있다. S3C2410의대부분의 GPIO는단순히디지털입출력뿐만아니라부가적인기능을갖고있다.
More informationMicrosoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]
TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()
More informationPowerPoint 프레젠테이션
LED Device Control - mmap() Jo, Heeseung 디바이스제어 디바이스제어 HBE-SM5-S4210 에장착된 Peripheral 들은다양한인터페이스로연결되어있음 베이스보드에있는 LED 와 7-Segment 는 GPIO 로직접 CPU 에연결 M3 모듈인 FPGA 모듈은 FPGA 에의해서제어되며 CPU 와호스트버스로연결되어있어서프로그램에서는메모리인터페이스로인식
More informationPowerPoint 프레젠테이션
Sensor Device Jo, Heeseung Sensor 실습 HBE-SM5-S4210 에는근접 / 가속도 / 컴파스센서가장착 각센서들을사용하기위한디바이스드라이버와어플리케이션을작성 2 근접 (Proximity) 센서 HBE-SM5-S4210 Camera Module 근접센서디바이스 근접센서는사물이다른사물에접촉되기이전에가까이접근하였는지를검출할목적으로사용 일반적으로생활에서자동문이나엘리베이터,
More information이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More information[ 마이크로프로세서 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< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More informationMango220 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 informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationA 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 informationMicrosoft Word - LKP-RTD 사용자 설명서
LKP-RTD 보드 사용자설명서 Version Information H/W Version : Version 1.0 소속 : ( 주 ) 엘케이일레븐연구소주소 : 성남시중원구상대원동 190-1 SKn테크노파크메가센터 1306호전화 : 031-776-4120 / FAX : 031-766-4119 목차 1. 개요... 5 2. 사양... 6 3. 블록도... 7 4.
More information<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >
웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 소켓 (Socket) (1/2) Socket 이란? 서버와클라이언트가서로특정한규약을사용하여데이터를전송하기위한방식 서버와클라이언트는소켓연결을기다렸다가소켓이연결되면서로데이터를전송 현재네트워크상에서의모든통신의근간은 Socket 이라할수있음 Page 2 1 소켓 (Socket) (2/2)
More informationMicrosoft 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 informationMicrosoft PowerPoint - chap13-입출력라이브러리.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 informationMicrosoft 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 informationPowerPoint 프레젠테이션
Programming Languages 모듈과펑터 2016 년봄학기 손시운 (ssw5176@kangwon.ac.kr) 담당교수 : 임현승교수님 모듈 (module) 관련있는정의 ( 변수또는함수 ) 를하나로묶은패키지 예약어 module과 struct end를사용하여정의 아래는모듈의예시 ( 우선순위큐, priority queue) # module PrioQueue
More informationMicrosoft PowerPoint APUE(Intro).ppt
컴퓨터특강 () [Ch. 1 & Ch. 2] 2006 년봄학기 문양세강원대학교컴퓨터과학과 APUE 강의목적 UNIX 시스템프로그래밍 file, process, signal, network programming UNIX 시스템의체계적이해 시스템프로그래밍능력향상 Page 2 1 APUE 강의동기 UNIX 는인기있는운영체제 서버시스템 ( 웹서버, 데이터베이스서버
More informationChap 7
Chap 7 FPGA 디바이스 1. FPGA 디바이스 1.1. External FPGA Device Driver FPGA 모듈을제어하는디바이스드라이버를작성하는방법에대해서알아보도록한다. 이모듈은 Achro-i.MX6Q의 External Connector에연결된다. 본교재에는 FGPA 펌웨어소스코드가포함되어있지않지만 VHDL로작성할수있다. FGPA 관련소스는패키지에포함되어있는바이너리를이용하면된다.
More information제12장 파일 입출력
제 4 장파일입출력 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 1 시스템호출 (system call) 파일 (file) 임의접근 (random access) 주요학습내용 2 4.1 절 커널의역할 (kernel) 커널 (kernel) 은운영체제의핵심부분으로서, 하드웨어를운영관리하는여러가지서비스를제공함 파일관리 (File management) 디스크 프로세스관리
More informationMicrosoft Word doc
1. 임베디드리눅스장비에서램디스크를이용하여루트파일시스템을구현하였을경우에는보드동작중에파일로기록된내용이전원이꺼짐과동시에소실된다. 기록된내용을영구저장하기위해서는일반적으로플래시메모리에기록하여야한다. 플래시메모리를리눅스의루트파일시스템으로사용하기위해서는 MTD (Memory Technology Device ) 블록디바이스드라이버를사용하여야한다. 타겟보드는 NAND 플래시기반의보드이다.
More informationABC 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윤성우의 열혈 TCP/IP 소켓 프로그래밍
C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct
More informationMicrosoft 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 informationMango-IMX6Q mfgtool을 이용한 이미지 Write하기
Mango-IMX6Q mfgtool 을 이용한이미지 Write 하기 http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document
More informationMicrosoft PowerPoint - chap01-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 학습목표 프로그래밍의 기본 개념을
More information망고100 보드로 놀아보자-4
망고 100 보드로놀아보자 -4 Minicom,tftp,nfs 설정,vnc 설정 minicom 설정 Minicom 설정 >#yum install minicom >#ls /dev/ttyusb* ># minicom s Minicom 설정 Serial Device :/dev/ttyusb0 Baudrate:115200 Hardware Flow control: NO
More informationMicrosoft PowerPoint APUE(File InO).pptx
Linux/UNIX Programming 문양세강원대학교 IT대학컴퓨터과학전공 강의목표및내용 강의목표 파일의특성을이해한다. 파일을열고닫는다. 파일로부터데이터를읽고쓴다. 기타파일제어함수를익힌다. 강의내용 파일구조 (UNIX 파일은어떤구조일까?) 파일관련시스템호출 시스템호출의효율과구조 Page 2 What is a File? A file is a contiguous
More informationchap7.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<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 informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More informationPowerPoint Presentation
GPU-based Keylogger Jihwan yoon 131ackcon@gmail.com Index Who am I Keylogger, GPU GPU based Keylogging - Locating the keyboard buffer - Capturing KEYSTROKES Demo About me Who am I 윤지환 CERT-IS reader BOB
More information/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 informationChap 10 안드로이드커널 (Kernel)
Chap 10 안드로이드커널 (Kernel) 1. Kernel Operating System에서 Kernel은운영체제의핵심부분이다. Bootloader에서하드웨어초기화를담당했다면, 커널은우리가사용해야할시스템자원을관리해주는기능을해준다. 아래는기본적인커널의역할을나열해보았다. 물론, 안드로이드가적용되면서기본적인커널에추가적인기능이포함되었다. 기본적인커널의역할을나열하면아래와같다.
More informationchap10.PDF
10 C++ Hello!! C C C++ C++ C++ 2 C++ 1980 Bell Bjarne Stroustrup C++ C C++ C, C++ C C 3 C C++ (prototype) (type checking) C C++ : C++ 4 C C++ (prototype) (type checking) [ 10-1] #include extern
More informationRaspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로 SD 카드리더기 HDM I 케이블모니터
운영체제실습 Raspbian 설치 2017. 3 표월성 wspyo74@naver.com cherub.sungkyul.ac.kr 목차 Ⅰ. 설치 1. 라즈비안 (Raspbian 설치 ) 2. 설치후, 설정 설정사항 Raspbian 설치 라즈비안 OS (Raspbian OS) 라즈베리파이 3 Model B USB 마우스 USB 키보드 마이크로 SD 카드 마이크로
More information<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 informationMicrosoft PowerPoint Driver-Char-3-2.ppt
Chapter 3. Char Drivers II scull 코드소개 scull: 디바이스번호할당 scull: 메모리디바이스구조 scull: 파일오퍼레이션 scull: open and release scull: read and write 순천향대학교컴퓨터학부이상정 1 scull 코드소개 순천향대학교컴퓨터학부이상정 2 scull 코드소개 (1) scull (simple
More information<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>
SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......
More informationchap 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