1 / 16

제 9 장 디바이스 드라이버

제 9 장 디바이스 드라이버. 2005. 5. 9( 월 ) 한 민 규 hufs96mk@hufs.ac.kr. 디바이스 드라이버 일반 (1). 정의 디바이스와 시스템 메모리 간에 데이터의 전달을 담당하는 커널 내부 기능이다 . 분류 문자 디바이스 드라이버 순차접근 , 임의접근 가능  터미널 드라이버 블록 디바이스 드라이버 임의접근 , 블록 단위로 데이터를 전송  디스크 드라이버 네트웍 디바이스 드라이버 네트웍에 프레임을 전송하거나 받음  이더넷 드라이버.

Download Presentation

제 9 장 디바이스 드라이버

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제 9 장 디바이스 드라이버 2005. 5. 9(월) 한 민 규 hufs96mk@hufs.ac.kr

  2. 디바이스 드라이버 일반(1) • 정의 • 디바이스와 시스템 메모리 간에 데이터의 전달을 담당하는 커널 내부 기능이다. • 분류 • 문자 디바이스 드라이버 • 순차접근, 임의접근 가능  터미널 드라이버 • 블록 디바이스 드라이버 • 임의접근, 블록 단위로 데이터를 전송  디스크 드라이버 • 네트웍 디바이스 드라이버 • 네트웍에 프레임을 전송하거나 받음  이더넷 드라이버

  3. 디바이스 드라이버 일반(2) System Call interface kernel File System DDI(device driver interface) tty driver Disk driver Network driver

  4. 디바이스 드라이버 일반(3) • 특성 • 각 디바이스는 고유한 이름을 갖는다. • IDE 방식의 디스크는 hd • SCSI 방식의 디스크는 sd • 터미널 tty, 이더넷 eth • 각 디바이스의 이름에는 major number와 minor number 가 할당된다. include/linux/major.h

  5. 디바이스 드라이버 일반(4) • 디바이스의 이름과 major/minor number 예 /dev/tty0 4,0 /dev/tty1 4,1 /dev/tty2 4,2 /dev/tty3 4,3 /dev/hdb /dev/hdb1 3,67 /dev/hdb1 3,65 /dev/hdb1 3,65 System /dev/hda /dev/hda3 3,3 /dev/hda1 3,1 /dev/hda2 3,2

  6. 디바이스 드라이버 일반(5) • 새로운 디바이스 드라이버를 Linux에 추가할 때 필요한 과정 (3단계) • 디바이스 드라이버 함수를 구현한다. • 파일시스템과 인터페이스 • 디바이스와 인터페이스 • 드라이버 초기화 인터페이스 • 디바이스 드라이버를 커널에 등록한다. • register_chrdev() – 문자 디바이스 드라이버 등록 • register_blkdev() – 블록 디바이스 드라이버 등록 • register_netdev() – 네트웍 디바이스 드라이버 등록 • 디바이스 드라이버를 위한 파일을 생성한다. • mknod /dev/장치파일이름 c 251 0

  7. 문자 디바이스 드라이버 구조 tty_ init() [파일시스템과 인터페이스를 갖는함수] tty_open() Application tty_read() tty_struct tty_write() tty_ioctl() tty_release() [터미널 하드웨어와 인터페이스를 갖는함수] rs_interrupt() receive_chars() transmit_chars() /driver/char/tty_io.c

  8. 문자 디바이스 드라이버 등록 • register_chrdev() Major number Register_chrdev(4,”tty”,&tty_fops) Chrdevs[] 0 /fs/devices.c 1 2 MAX_CHRDEV-1

  9. 터미널 디바이스 드라이버 호출 sys_open() filp_open() open_namei() chrdev_open() tty_open()

  10. 블록 디바이스 드라이버(1) • 하드디스크 드라이버 • 파일시스템에서 논리적인 블록에 대한 읽기/쓰기 요청이 발생했을 때 이 논리적인 블록을 물리적인 주소로 변환 시키는 것이다. 물리적인 주소에서 실제 데이터를 주 메모리로(버퍼 캐쉬 공간) 읽는 것이다. 또한 디스크에서 사건의 발생을 알렸을 때(입터럽트 발생), 그 사건을 처리하는 것 등을 수행해야 한다.

  11. 블록 디바이스 드라이버(2) • 구조 hd_init() [파일시스템과 인터페이스를 갖는함수] hd_interrupt() hd_open() buffer cache hd_release() hd_out() hd_request() check_status() hd_ioctl() [하드웨어와 인터페이스를 갖는함수]

  12. 블록 디바이스 드라이버(3) • 디스크 드라이버 초기화 init process init_module hd_init() register_blkdev()

  13. 블록 디바이스 드라이버(4) • 디스크 드라이버 open • register_blkde() 사용 • blkdevs 테이블에 등록 • tty_read,tty_write  hd_request • 버퍼캐쉬를 이용(block_read(), block_write()) sys_open filp_open open_namei() blkdev_open() hd_open()

  14. 블록 디바이스 드라이버(5)

  15. 블록 디바이스 드라이버(6) bread block_read request_fn block_read Buffer cache Block device driver ll_rw_block make_request hd_out queue req req req • block_read() • 캐쉬 버퍼 공간할당 • 큐에 넣고, request_fn함수 호출 • hd_request call • 버퍼캐쉬를 이용(block_read(), block_write())

  16. 네트웍 디바이스 드라이버 el3_probe() protocol stack ip_output() el3_open() ip_rcv() el3_start_xmit() el3_out() el3_rx() el3_interrupt() el3_close() el3_ioctl() • 네트웍 디바이스 드라이버는 통신 프로토콜 스택과 인터페이스를 갖는다. • 파일 연산 자료구조가 없다 • 커널자료구조 struct device가 그 역할을 한다. • register_netdev() 사용

More Related