SlideShare a Scribd company logo
1 of 26
Download to read offline
모듈 프로그래밍
&
디바이스 드라이버
2013.04.23
고급데이터베이스시스템
이윤수
목차
• 리눅스 모듈
• 모듈 프로그래밍
• 모듈 프로그래밍 예제
• 디바이스 드라이버
• 사용자 입장에서 디바이스 드라이버
• 개발자 입장에서 디바이스 드라이버
• 문자 디바이스 드라이버
• 블록 디바이스 드라이버
• 네트워크 디바이스 드라이버
리눅스 모듈
• 커널이 만들어진 초기 작성한 디바이스 드라이버를 반드시 커널 소
스에 포함 시키고 컴파일 하여 테스트해야 했다.
• 리눅스 커널 개발팀은 이러한 비효율성을 개선하기 위해 모듈기능
을 개발했다.
사용자공간
커널영역
모듈
적재
제거
모듈 프로그래밍
• 모듈이 커널에 적재되면 커널은 디바이스 드라이버의 초기화
를 위해 특별한 함수를 호출한다 (module init)
• 모듈을 제거할때도 디바이스드라이버를 안정된 상태로 제거
하기위해 내부종료를 처리하는 특별한 함수 사용(module_exit)
모듈 프로그래밍
• make를 사용하여 *.ko파일을 커널에 적재
한다.
디바이스 드라이버
• 유닉스 계열 시스템에서 모든 것은 파일로
취급된다.
디스크에 저장되어 있는
파일(*.txt,*.c…..)
정규파일
모니터 , 키보드, 마우스,
하드디스크, RAM…..
장치파일
리눅스파일
open(),write(),read(),ioctl()………………
사용자 입장에서 디바이스 드라이버
• 사용자 태스크가 file_operation구조체에 정의되
어 있는 함수를 통해 장치파일에 접근할 때 호출
할 함수를 정의하고 구현해 주는 것
linux/include/linux/fs.h
주번호
• 리눅스는 시스템에 존재하는 여러 개의 디
바이스 드라이버를 구분하기 위해 각 디바
이스 드라이버마다 고유한 번호를 정해준
다.
• 0~255까지의 주번호 지원
• inode 객체의 i_redv에 저장
부번호
• 사용용도
– 디바이스 드라이버가 다루는 실제 디바이스의
구분
– 블록 디바이스의 파티션 구분
각 디바이스 이름과 주/부 번호의 예
디바이스 드라이버 유형
• 문자 디바이스 드라이버
– 가장 보편적 디바이스 드라이버
• 블록디바이스드라이버
– 블록단위로 입출력 데이터를 저장하는 장치를
다룸
• 네트워크 디바이스 드라이버
장치파일 생성
• mknod 명령어 사용
– ex)mknod /dev/example [c|b] 주번호 부번호
• 생성파일 inode의 i_name : 파일이름
i_rdev : 주번호 부번호
i_mode : 장치 파일 유형
개발자 입장에서 디바이스 드라이버
• 사용자 태스크는 시스템 콜을 통해 장치
파일에 접근한다. 이 때 호출가능한 함수
는 파일 오퍼레이션 구조체에 정의 되있다.
• 반대로 드라이버 개발자는 파일 오퍼레이
션 구조체에 정의되어 있는 함수를 디바이
스 드라이버 내에 구현해 줌으로써 필요한
인터페이스를 제공한다.
개발자 입장에서 디바이스 드라이버
디바이스 드라이버 관리구조
…
i_name
i_mode
i_rdev
…
inode
VFS
장치파일 이름
S_IFCHR or S_IFBLK
Major : Minor
0 1 … 255 0 1 … 255
blkdevs chrdevs
name
f_op
…
name
f_op
…
device driver device driver
struct block_device_operations idedisk_ops{
.open : idedisk_open,
.release : idedisk_release,
.ioctl : idedisk_ioctl
…
}
register_blkdev(3,”ide”,&idedisk_ops)
struct file_operations tty_fops{
.open : tty_open,
.read : tty_read,
.write : tty_write
…
}
register_blkdev(4,”tty”,&tty_fops)
리눅스에서 각 디바이스가 사용하는 주 번호
• 현재 실제 사용중인 주 번호
– cat /proc/devices
Major Character devices Block devices
0
1 Memory device RAM disk
2 Pseudo-TTY Floppy disk
3 Pseudo-slaves IDE disk
…
231~239 Unassigned
240~254 Locl / Experimental use
255 Reserved
…
i_name
i_mode
i_rdev
…
inode
VFS
장치파일 이름
S_IFCHR
Major : Minor
0 1 … 253 255chrdevs
name
f_op
…
device driver
struct file_operations mydrv_fops{
.open : my_open,
.read : my_read,
.write : my_write
…
}
register_blkdev(4253”mydrv”,&mydrv_fops)
chrdev_open()호출
device driver…
…
d_inode
…
dentry
…
fdentry
f_pos
f_op
…
0 1 … 253 255
blkdevs
file
task
open(“/dev/mydrv”);
System call interface
User level
Kernel level
files
task_struct
fd[0]
fd[1]
fd[2]
fd[3]
file_struct
insmod mydrv.ko
mknod /dev/mydrv c 253 0
./test_app
블록 디바이스 드라이버
• 블록 디바이스 드라이버는 문자 디바이스 드라이버와는 달리 사용
자의 read()/write()와 1:1 로 사상되지 않는다.
• 대신 리눅스 버퍼캐시를 이용하여 통신,
->블록단위로 입출력을 하기 때문
• 버퍼캐시와 블록 디바이스 드라이버간의 통신은 큐를 사용한다.
• 큐에 들어온 요청을 살펴보고 적절한 동작을 수행
리눅스커널-디바이스드라이버_모듈_프로그래밍
리눅스커널-디바이스드라이버_모듈_프로그래밍
리눅스커널-디바이스드라이버_모듈_프로그래밍

More Related Content

What's hot

Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesChris Simmonds
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺hydai
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in AndroidOpersys inc.
 
LLVM Instruction Selection
LLVM Instruction SelectionLLVM Instruction Selection
LLVM Instruction SelectionShiva Chen
 
20210515 of4 wi&paraview 5.9.0_motorbike
20210515 of4 wi&paraview 5.9.0_motorbike20210515 of4 wi&paraview 5.9.0_motorbike
20210515 of4 wi&paraview 5.9.0_motorbikeYohichiShiina
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debuggingHao-Ran Liu
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能MITSUNARI Shigeo
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oraclewebreaker
 
강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍chcbaram
 
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013Vladimir Ivanov
 
BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会Shinji Kobayashi
 
Vivado hls勉強会5(axi4 stream)
Vivado hls勉強会5(axi4 stream)Vivado hls勉強会5(axi4 stream)
Vivado hls勉強会5(axi4 stream)marsee101
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersBGA Cyber Security
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Cheng Wig
 
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用Koki Hashimoto
 
Merise exercices-mcd_corriges
Merise  exercices-mcd_corrigesMerise  exercices-mcd_corriges
Merise exercices-mcd_corrigesMehdi El
 
Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Jian-Hong Pan
 
Cycles de vie d'un logiciel
Cycles de vie d'un logicielCycles de vie d'un logiciel
Cycles de vie d'un logicielRabia AZIZA
 

What's hot (20)

Booting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot imagesBooting Android: bootloaders, fastboot and boot images
Booting Android: bootloaders, fastboot and boot images
 
COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺COSCUP2016 - LLVM框架、由淺入淺
COSCUP2016 - LLVM框架、由淺入淺
 
Scheduling in Android
Scheduling in AndroidScheduling in Android
Scheduling in Android
 
LLVM Instruction Selection
LLVM Instruction SelectionLLVM Instruction Selection
LLVM Instruction Selection
 
20210515 of4 wi&paraview 5.9.0_motorbike
20210515 of4 wi&paraview 5.9.0_motorbike20210515 of4 wi&paraview 5.9.0_motorbike
20210515 of4 wi&paraview 5.9.0_motorbike
 
Linux kernel debugging
Linux kernel debuggingLinux kernel debugging
Linux kernel debugging
 
LLVM
LLVMLLVM
LLVM
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oracle
 
강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍강좌 05 통신용 PC 프로그래밍
강좌 05 통신용 PC 프로그래밍
 
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
 
BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会
 
Vivado hls勉強会5(axi4 stream)
Vivado hls勉強会5(axi4 stream)Vivado hls勉強会5(axi4 stream)
Vivado hls勉強会5(axi4 stream)
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack Routers
 
Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0Device Tree Overlay implementation on AOSP 9.0
Device Tree Overlay implementation on AOSP 9.0
 
Cours.langage c
Cours.langage cCours.langage c
Cours.langage c
 
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用東京電機大学 ポータルサイトUNIPAからの情報抽出と再利用
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
 
Merise exercices-mcd_corriges
Merise  exercices-mcd_corrigesMerise  exercices-mcd_corriges
Merise exercices-mcd_corriges
 
Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021Let's trace Linux Lernel with KGDB @ COSCUP 2021
Let's trace Linux Lernel with KGDB @ COSCUP 2021
 
Cycles de vie d'un logiciel
Cycles de vie d'un logicielCycles de vie d'un logiciel
Cycles de vie d'un logiciel
 

Similar to 리눅스커널-디바이스드라이버_모듈_프로그래밍

안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101INSIGHT FORENSIC
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debuggerINSIGHT FORENSIC
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2YoungGun Na
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file formatYoungjun Chang
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10mimul
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은jieun kim
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드수정 김
 
(160820) #fitalk fileless malware forensics
(160820) #fitalk    fileless malware forensics(160820) #fitalk    fileless malware forensics
(160820) #fitalk fileless malware forensicsINSIGHT FORENSIC
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은jieun kim
 
3. 악성코드 분석 사례
3. 악성코드 분석 사례3. 악성코드 분석 사례
3. 악성코드 분석 사례Youngjun Chang
 
Unity Auto Build iOS
Unity Auto Build iOSUnity Auto Build iOS
Unity Auto Build iOSGiseok Lee
 
3. 악성코드 분석 사례
3. 악성코드 분석 사례3. 악성코드 분석 사례
3. 악성코드 분석 사례Youngjun Chang
 
caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driverjumiss
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInho Kang
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XpressEngine
 
Mint64 os개발이야기 한승훈
Mint64 os개발이야기 한승훈Mint64 os개발이야기 한승훈
Mint64 os개발이야기 한승훈Seunghun han
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리Seungyong Lee
 

Similar to 리눅스커널-디바이스드라이버_모듈_프로그래밍 (20)

안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debugger
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
 
150326 openstack, glance 김지은
150326 openstack, glance 김지은150326 openstack, glance 김지은
150326 openstack, glance 김지은
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
 
(160820) #fitalk fileless malware forensics
(160820) #fitalk    fileless malware forensics(160820) #fitalk    fileless malware forensics
(160820) #fitalk fileless malware forensics
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 
3. 악성코드 분석 사례
3. 악성코드 분석 사례3. 악성코드 분석 사례
3. 악성코드 분석 사례
 
Unity Auto Build iOS
Unity Auto Build iOSUnity Auto Build iOS
Unity Auto Build iOS
 
3. 악성코드 분석 사례
3. 악성코드 분석 사례3. 악성코드 분석 사례
3. 악성코드 분석 사례
 
caanoo Device driver
caanoo Device drivercaanoo Device driver
caanoo Device driver
 
시큐어디스크 ECM
시큐어디스크 ECM시큐어디스크 ECM
시큐어디스크 ECM
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and Terraform
 
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 
Mint64 os개발이야기 한승훈
Mint64 os개발이야기 한승훈Mint64 os개발이야기 한승훈
Mint64 os개발이야기 한승훈
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 

리눅스커널-디바이스드라이버_모듈_프로그래밍

  • 2. 목차 • 리눅스 모듈 • 모듈 프로그래밍 • 모듈 프로그래밍 예제 • 디바이스 드라이버 • 사용자 입장에서 디바이스 드라이버 • 개발자 입장에서 디바이스 드라이버 • 문자 디바이스 드라이버 • 블록 디바이스 드라이버 • 네트워크 디바이스 드라이버
  • 3. 리눅스 모듈 • 커널이 만들어진 초기 작성한 디바이스 드라이버를 반드시 커널 소 스에 포함 시키고 컴파일 하여 테스트해야 했다. • 리눅스 커널 개발팀은 이러한 비효율성을 개선하기 위해 모듈기능 을 개발했다. 사용자공간 커널영역 모듈 적재 제거
  • 4. 모듈 프로그래밍 • 모듈이 커널에 적재되면 커널은 디바이스 드라이버의 초기화 를 위해 특별한 함수를 호출한다 (module init) • 모듈을 제거할때도 디바이스드라이버를 안정된 상태로 제거 하기위해 내부종료를 처리하는 특별한 함수 사용(module_exit)
  • 5. 모듈 프로그래밍 • make를 사용하여 *.ko파일을 커널에 적재 한다.
  • 6.
  • 7. 디바이스 드라이버 • 유닉스 계열 시스템에서 모든 것은 파일로 취급된다. 디스크에 저장되어 있는 파일(*.txt,*.c…..) 정규파일 모니터 , 키보드, 마우스, 하드디스크, RAM….. 장치파일 리눅스파일 open(),write(),read(),ioctl()………………
  • 8. 사용자 입장에서 디바이스 드라이버 • 사용자 태스크가 file_operation구조체에 정의되 어 있는 함수를 통해 장치파일에 접근할 때 호출 할 함수를 정의하고 구현해 주는 것
  • 10. 주번호 • 리눅스는 시스템에 존재하는 여러 개의 디 바이스 드라이버를 구분하기 위해 각 디바 이스 드라이버마다 고유한 번호를 정해준 다. • 0~255까지의 주번호 지원 • inode 객체의 i_redv에 저장
  • 11. 부번호 • 사용용도 – 디바이스 드라이버가 다루는 실제 디바이스의 구분 – 블록 디바이스의 파티션 구분
  • 12. 각 디바이스 이름과 주/부 번호의 예
  • 13. 디바이스 드라이버 유형 • 문자 디바이스 드라이버 – 가장 보편적 디바이스 드라이버 • 블록디바이스드라이버 – 블록단위로 입출력 데이터를 저장하는 장치를 다룸 • 네트워크 디바이스 드라이버
  • 14. 장치파일 생성 • mknod 명령어 사용 – ex)mknod /dev/example [c|b] 주번호 부번호 • 생성파일 inode의 i_name : 파일이름 i_rdev : 주번호 부번호 i_mode : 장치 파일 유형
  • 15. 개발자 입장에서 디바이스 드라이버 • 사용자 태스크는 시스템 콜을 통해 장치 파일에 접근한다. 이 때 호출가능한 함수 는 파일 오퍼레이션 구조체에 정의 되있다. • 반대로 드라이버 개발자는 파일 오퍼레이 션 구조체에 정의되어 있는 함수를 디바이 스 드라이버 내에 구현해 줌으로써 필요한 인터페이스를 제공한다.
  • 17. 디바이스 드라이버 관리구조 … i_name i_mode i_rdev … inode VFS 장치파일 이름 S_IFCHR or S_IFBLK Major : Minor 0 1 … 255 0 1 … 255 blkdevs chrdevs name f_op … name f_op … device driver device driver struct block_device_operations idedisk_ops{ .open : idedisk_open, .release : idedisk_release, .ioctl : idedisk_ioctl … } register_blkdev(3,”ide”,&idedisk_ops) struct file_operations tty_fops{ .open : tty_open, .read : tty_read, .write : tty_write … } register_blkdev(4,”tty”,&tty_fops)
  • 18. 리눅스에서 각 디바이스가 사용하는 주 번호 • 현재 실제 사용중인 주 번호 – cat /proc/devices Major Character devices Block devices 0 1 Memory device RAM disk 2 Pseudo-TTY Floppy disk 3 Pseudo-slaves IDE disk … 231~239 Unassigned 240~254 Locl / Experimental use 255 Reserved
  • 19. … i_name i_mode i_rdev … inode VFS 장치파일 이름 S_IFCHR Major : Minor 0 1 … 253 255chrdevs name f_op … device driver struct file_operations mydrv_fops{ .open : my_open, .read : my_read, .write : my_write … } register_blkdev(4253”mydrv”,&mydrv_fops) chrdev_open()호출 device driver… … d_inode … dentry … fdentry f_pos f_op … 0 1 … 253 255 blkdevs file task open(“/dev/mydrv”); System call interface User level Kernel level files task_struct fd[0] fd[1] fd[2] fd[3] file_struct insmod mydrv.ko mknod /dev/mydrv c 253 0 ./test_app
  • 20.
  • 21.
  • 22.
  • 23. 블록 디바이스 드라이버 • 블록 디바이스 드라이버는 문자 디바이스 드라이버와는 달리 사용 자의 read()/write()와 1:1 로 사상되지 않는다. • 대신 리눅스 버퍼캐시를 이용하여 통신, ->블록단위로 입출력을 하기 때문 • 버퍼캐시와 블록 디바이스 드라이버간의 통신은 큐를 사용한다. • 큐에 들어온 요청을 살펴보고 적절한 동작을 수행