SlideShare una empresa de Scribd logo
1 de 48
Device Driver
Linux Device Driver – Contents
1. Linux Kernel
    1)   구조
    2)   기능

2. Device Driver 개요
    1)   Character Device Driver
    2)   Block Device Driver
    3)   Network Device Driver

3. Linux Device Model
    1)   udev
    2)   sysfs, kobject, device class
    3)   Hotplug


4. CAANOO Character Device Driver Example
    1)   Vibration Motor
    2)   Analog Joystick




                                            GPH
1. Linux Kernel
Linux Device Driver – 1. Linux Kernel
1) 구조




                                        GPH
Linux Device Driver – 1. Linux Kernel




                                        GPH
Linux Device Driver – 1. Linux Kernel
2) 기능
   • 프로세스 관리
     - 프로세스 생성 및 소멸
     - 프로세스간 통신
     - etc.

   • 메모리 관리
     - 가상 메모리 관리기법 제공
     - 시스템에 장착된 메모리(Hardware) 관리

   • 파일 시스템 관리
     - 가상 파일 시스템(VFS)에 의한 다양한 종류의 파일 시스템(ext3, ext4, FAT 등) 지원
     - 파일(정규 파일, 장치 파일, 파이프), 디렉토리 관리

   • 디바이스 관리
     - 입출력 요청 처리 및 작업 스케쥴링
     - 인터럽트 처리
     - 주변 장치와 메모리의 데이터 전송

   • 네트워크 관리
     - 네트워크 라우팅 및 주소




                                                                 GPH
2. Device Driver 개요
Linux Device Driver – 2. Device Driver 개요
▶ Linux Device Driver란?
 - 시스템이 지원하는 하드웨어를 응용프로그램에서 사용할 수 있도록 Kernel에서 제공하는 라이브러리(or
   Interface).

 - 일반적으로 문자, 블록, 네트워크 디바이스 드라이버로 분류 하며 ―/dev‖에 나타난다.
   example:


                          주 번호    부 번호



   문자 드라이버




  블록 드라이버




                                                               GPH
Linux Device Driver – 2. Device Driver 개요
 - 각 행의 첫 글자가 디바이스의 유형(c는 문자 드라이버, b는 블록드라이버)을 나타낸다.

 - 다섯 번째 열의 숫자는 주 번호, 여섯 번째 숫자는 부 번호를 의미.
   (※ 문자와 블록 드라이버는 서로 다른 영역을 차지하므로 동일한 주 번호를 블록 드라이버
    뿐만 아니라 문자 드라이버에도 할당 할 수 있다.)

 - 주 번호는 전반적인 드라이버 특징을 지정, 부 드라이버가 서비스하는 정확한 디바이스 특
  징을 지정(mtdblock0, mtdblock1 참고).




                                                       GPH
Linux Device Driver – 2. Device Driver 개요
1) Character Device Driver
▶ Char Device Driver의 정의 및 특징
 - 문자 디바이스는 하나의 파일처럼 사용할 수 있는 것(버튼, G-Sensor, Analog Joystic, RTC 등)을 말하고 문자
    디바이스 드라이버는 이러한 파일 접근에 필요한 open, close, read, write등의 시스템 호출을 구현.

- 디바이스에서 자료에 순차적(sequentially)으로 접근 가능한 커널 코드

- 임의의 길이를 갖는 문자열을 다루는 디바이스 드라이버로 응용 프로그램에서 직접적으로 호출되는 버퍼 없
   는 디바이스 드라이버.

- 응용프로그램은 open(), close(), read(), write()와 같은 파일 처리용 함수를 이용하여 디바이스 파일을 일반 파
   일처럼 다뤄서 하드웨어를 제어할 수 있다.

- 구조가 매우 간단하다.




                                                                          GPH
Linux Device Driver – 2. Device Driver 개요
▶ Character Device Driver 기능.
- 디바이스를 초기화하며 등록함수를 사용해 커널 영역에 드라이버를 빈틈없이 엮는(등록하는) 기능을 책임진
   초기화(init()) 루틴.

- 관련 /dev 노드를 사용해 사용자 어플리케이션이 호출하는 입출력 시스템 호출과 직접 대응하는 open(),
   close(), read(), write() 같은 진입점 집합.

- interrupt handling, bottom half, timer handling 등의 처리.




                                                                 GPH
Linux Device Driver – 2. Device Driver 개요
▶ Character Device Driver 주요 자료구조.
- 디바이스별 구조체: 드라이버 동작을 위한 정보 저장소로 활용

- struct cdev: 문자 드라이버용 커널 추상화 단위, 일반적으로 디바이스별 구조체에 포함.

- struct file_operations: 사용자 어플리케이션과 작동하는 open, close, read, write의 구현.

- struct file: 해당 /dev 노드에 대한 정보.

- struct platform_device, struct platform_driver: platform_bus라는 가상의 플랫폼 버스 상에 새로운 디바이스를
    등록.




                                                                                     GPH
Linux Device Driver – 2. Device Driver 개요
▶ Character Device Driver example.
- 직렬 드라이버: 컴퓨터의 직렬 포트를 관리하는 문자 드라이버. (drivers/serial)

- 입력 드라이버: 키보드, 마우스, 조이스틱 같은 디바이스를 다루는 책임. (drivers/input)

- 프레임 버퍼: 비디오 메모리에 대한 접근 제공. (drivers/video)

- 이외 많은 유형의 Character Device Driver들이 존재. (―grep –r register_chrdev drivers/‖로 확인)




                                                                                     GPH
Linux Device Driver – 2. Device Driver 개요
2) Block Device Driver
- 블록 디바이스는 임의 접근 능력을 갖춘 저장소 매체.

- 문자 디바이스와 달리 블록디바이스는 파일 시스템 자료를 담을 수 있다(하드디스크와 같은 저장 매체를 다
   룬다).

- 대부분의 저장 디바이스가 블록(512, 1024, … 4096 Byte)단위의 입출력을 기반으로 하고 있음.

- 입출력 스케쥴러가 동작.




                                                                 GPH
Linux Device Driver – 2. Device Driver 개요

                     PC 시스템의 저장소 매체




                                            GPH
Linux Device Driver – 2. Device Driver 개요

                     Linux에서의 블록 입출력




                                            GPH
Linux Device Driver – 2. Device Driver 개요
▶ 입출력 스케쥴러

   입출력 스케쥴러                         설명                           Kernel Source
   Deadline        - 표준 elevator 알고리즘으로 요청의 첫 섹터 번호를 기준으로     block/deadline-iosched.c
                   정렬 도는 병합 수행.
                   - 입출력 요청에 대해서 굶주림(starvation)을 방지하기 위해
                                                              (2.6 kernel)
                   deadline을 설정.

   Anticipatory    - 기본 알고리즘은 Deadline과 같지만, 읽기 요청을 수행한 후 미   Block/as-iosched.c
                   리 정해놓은 시간만큼 추가 요청을 예상하며 대기.
                                                              (2.6 kernel)


   Complete Fair   - 요청한 프로세스마다 요청큐를 하나씩 유지함으로써 프로세스          Block/cfq-iosched.c
                   마다 입출력에대한 공평한 기회를 얻게 됨.
   Queuing (CFQ)   - 특정 프로세스때문에 다른 프로세스가 굶어 죽는 상황 방지.
                                                              (2.6 kernel)


   Noop            - 최적화된 삽입 지점을 찾기 위해 요청큐를 탐색하는 데 시간을        Block/noop-iosched.c
                   소비하지 않음.
                   - 탐색 지연 시간이 존재하지 않는 SSD같은 매체에 이상적.
                                                              (2.6 kernel)




                                                                                         GPH
Linux Device Driver – 2. Device Driver 개요
▶ 보조 기억 장치와 디바이스 파일
 - 블록 디바이스 드라이버의 주 번호는 블록 디바이스를 구별하고, 부 번호는 물리적인 보조 기억
   장치를 구별하거나 분할 파티션을 구별함.
 - 리눅스의 블록 디바이스 장치
   brw-rw----   1 root disk   8,    0 2010-11-03 18:23 sda
   brw-rw----   1 root disk   8,    1 2010-11-03 18:23 sda1
                                                              파티션이 2개(FAT-sdb1, Ext3-
   brw-rw----   1 root disk   8,    2 2010-11-03 18:23 sda2
   brw-rw----   1 root disk   8,    5 2010-11-03 18:23 sda5   sdb2)인 이동식 디스크(sdb)의
   brw-rw----   1 root disk   8,   16 2010-11-15 13:56 sdb         블록디바이스 파일
   brw-rw----   1 root disk   8,   17 2010-11-15 13:56 sdb1
   brw-rw----   1 root disk   8,   18 2010-11-15 13:56 sdb2

 - 블록 디바이스의 마운트 정보
   파일시스템                크기 사용됨 사용가능 사용율% 마운트 됨
   /dev/sda1           284G 109G 161G 41% /
   none              1.7G 284K 1.7G 1% /dev
   none              1.7G 252K 1.7G 1% /dev/shm
   none              1.7G 1.2M 1.7G 1% /var/run
   none              1.7G 4.0K 1.7G 1% /var/lock              2개의 파티션(FAT-sdb1, Ext3-
   none              1.7G 0 1.7G 0% /lib/init/rw              sdb2)이 mount되어 있는 정보
   /dev/sdb1            70M 2.6M 67M 4% /media/BOOT
   /dev/sdb2           3.6G 1.6G 1.9G 46% /media/ROOTFS




                                                                                        GPH
Linux Device Driver – 2. Device Driver 개요
3) Network Device Driver
- 네트워크 디바이스 드라이버는 다른 드라이버와 다르게 사용자 영역과 통신하기 위해 /dev나 /sys에 의존하지
   않는다.

- 어플리케이션은 기반 프로토콜 스택을 추상화한 네트워크 인터페이스(ex eth0)를 거쳐 드라이버와 상호작용
   한다.




                                                             GPH
Linux Device Driver – 2. Device Driver 개요

                   네트워크 스텍을 설명하는 인터넷 모델




   일반적으로 이동하는 자료를 이해하는 의미론적인 layer.
   (HTTP서버와 클라이언트의 관계에서는 웹 내용의 요청
               과 응답을 전송)

           point-to-point 통신을 담당.
   (호스트 내부에서 종단점 사이에 일어나는 통신을 관리)


            패킷을 목적지로 전달.
       (호스트 사이에서 일어나는 통신을 관리)


   물리층에 접근하는 디바이스 드라이버를 참조. (직렬 연
        결 혹은 이더넷 디바이스같은 매체)




                                            GPH
Linux Device Driver – 2. Device Driver 개요

                    리눅스 네트워크 스텍 구조



                              사용자 영역 응용 프로그램이 커널 네트워크 하위 시스
                                      템에 접근하는 API를 제공


                              프로토콜 중립 계층(소켓): 다양한 프로토콜을 위한 공통
                                    함수 집합을 제공하는 Interface.


                              TCP, UDP등 사용 가능한 특정 네트워킹 프로토콜을 정
                                               의.



                              다양한 기능의 하드웨어 디바이스 드라이버를 프로토콜
                                   로 연결하는 중립 인터페이스 계층.


                              물리적인 네트워크 디바이스를 관리하는 디바이스 드라
                                           이버.




                                                                 GPH
Linux Device Driver – 2. Device Driver 개요
▶ Network Device Driver 자료 구조.
- 소켓 버퍼(struct sk_buff): 네트워크 프로토콜 스택의 구성 단위를 형성하는 구조체이며 커널의 TCP/IP 스택이
   이용하는 핵심 구조체. (include/linux/sk_buff.h)

- struct net_device: Network driver와 프로토콜 스택 사이의 인터페이스를 정의하는 구조체.
    (include/linux/netdevice.h)

- I/O 버스와 관련있는 구조체: PCI 또는 CPU Address/Data bus




                                                                    GPH
3. Linux Device Model
Linux Device Driver – 3. Linux Device Model
▶ Linux Device Model(LDM) 개요.
- Power management and system shutdown: 예를 들어 USB host adaptor는 host에 연결된 device
   들이 모두 안정적으로 power off(or shut down)된 후에 power off되어야 한다 LDM은 이러한 올바
   른 절차에의해 이러한 작업을 수행하도록 한다.

- Communications with user space: 가상 파일 시스템인 sysfs는 LDM과 매우 밀접하게 연관되어 있
   으며 구조화된 LDM의 자료구조를 user space에 표현.

- Hotpluggable devices: USB 이동식 디스크와 같은 장치는 시스템이 동작 중일 때 언제든 삽입
   (plugging)/제거(unplugging) 될 수 있다. 커널은 이와 같은 사건(event)들을 LDM을 이용해 다루
   고(handling) 사용자 영역과 소통(communicate)한다.

- Device Classes: 때대로 시스템에 어떠한 종류의 디바이스가 연결되어 있는지 알아야할 필요성이
   있다. LDM은 연결된 디바이스를 그것이 속하게 되는 적절한 상위 클레스로 분류하는 메커니즘
   을 가지고 있으며, 디바이스가 사용자 영역(user space)에서 발견될 수 있도록 한다.




                                                                           GPH
Linux Device Driver – 3. Linux Device Model
1) udev
 - 초창기부터 2.4버전의 커널은 (수천 개에 이르는) 필요한 디바이스 노드를 /dev에 정적으로 만들
    어야만 했다.

 - 2.4버전대에 이르러 동적으로 디바이스 노드를 생성하는 devfs를 도입하였지만, 노드 작명은 여전
    히 디바이스 드라이버에 의존.

 - 디바이스 관리를 사용자 영역으로 옮기기 위해 udev가 등장.




                                                       GPH
Linux Device Driver – 3. Linux Device Model
▶ udev는 아래의 내용에 의존하여 동작.
- Kernel Sysfs 지원: sysfs는 리눅스 디바이스 모델에서 중요한 위치를 차지하며, sysfs는 메모리 내
   부 파일 시스템으로 시동 시점에서 /sys에 mount 된다. 아래에 나오는 udevd나 udevinfo는 sysfs
   를 참고하여 동작하게 된다.

- udevd나 udevinfo 같은 사용자 영역 demon과 utility.

- /etc/udev/rules.d/ 디렉터리에 있는 사용자 지정 규칙.




                                                                GPH
Linux Device Driver – 3. Linux Device Model
▶ udevd 데몬 확인 Example (CAANOO)




                                              GPH
Linux Device Driver – 3. Linux Device Model
▶ 사용자 지정 규칙 Example(CAANOO SD/MMC)


                                  SD/MMC
                                사용자 규칙 파일




                                              SD/MMC
                                               Insert




                                              SD/MMC
                                              Remove




                                                        GPH
Linux Device Driver – 3. Linux Device Model
▶ 임베디드 시스템에서의 udev
- 아래와 같은 이유로 인해 특정 임베디드 시스템에서는 udev를 활용하기 보다 정적으로 생성한 디바이스 노드
   를 선호하기도 함.

   •   udev는 소프트웨어 설치 과정에서 한 번만 만들어지는 정적 노드와는 달리 시동할 때마다 /dev노드를
       생성한다. /dev 디렉터리가 플래시 저장소를 사용할 경우 매번 시동 과정에서 지우기/쓰기 과정을 거
       치므로, 플래시 수명이 줄어든다.

   •   udev를 사용하면 시스템 시동 시간이 더 오래 걸린다.

   •   /dev노드를 동적으로 생성하며 모듈을 자동적으로 적재하는 udev기능에는 특수 목적으로 사용할 임베
       디드 디바이스에서 피하고 싶은 비결정성이 따라다닌다. 특히 핫플러그 가능한 버스를 거쳐 외부 세상
       과 상호작용을 원하지 않은 경우에 문제가 된다. 이런 관점에 따르면 정적 노드 생성과 시동 시점에 모
       듈을 메모리에 올리는 방식은 시스템에 대한 통제를 강화하며, 테스트를 용이하게 한다.




                                                              GPH
Linux Device Driver – 3. Linux Device Model
2) sysfs, kobject, device class
 - sysfs, kobject, device class는 디바이스 모델의 기초적인 구성요소이지만, 대부분의 경우 밖으로 드러나지 않
     는다. (즉 직접적으로 드라이버 작성자나 프로그래머가 다루거나 관련 source를 수정하는 일은 거의 없다.)

 - sysfs는 커널의 구조화된 디바이스 모델의 사용자 영역으로의 표현이다. sysfs는 커널 자료 구조에 대한 정보
     를 포함하는 메모리 기반 파일 시스템이라는 점에서 procfs와 유사하지만, procfs가 커널 내부로 통하는 일반
     적인 interface를 제공하는 반면, sysfs는 디바이스 모델에 특화된 interface로서 udev의 확장기능 대부분이
     sysfs에 의존한다.

 - kobject는 참조 카운트 같은 공통 객체 속성의 추성화를 지원한다. 일반적으로 kobject는 더 큰 구조체(e.g.
    struct device)에 내장된다. kobject 구조체의 주요 field와 내용은 다음과 같다.
      •   참조 카운트 관리를 수행하기 위한 kref
      •   kobject가 속하는 객체 집합인 kset에 대한 포인터
      •   Kobject를 기술하는 객체 유형인 kobj_type

 - kobject는 sysfs와 밀접한 관련이 있다. 커널 내부에서 인스턴스로 만들어지는 모든 kobject가 sysfs에서 나타
    난다.

 - 디바이스 클래스 개념은 디바이스 모델의 또 다른 특징이며, 드라이버에서 사용하기를 원하는 interface이다.
    클래스 인터페이스는 디바이스마다 더 큰 디바이스 클래스(또는 범주)에 속한다는 생각을 추상화한다. (e.g.
    usb 마우스, ps/2 키보드, 조이스틱은 입력 클래스에 속하며 /sys/class/input이라는 독자적인 항목을 소유하
    게 된다.)




                                                                         GPH
Linux Device Driver – 3. Linux Device Model

              USB Mouse가 삽입되었을때 디바이스 클래스




                                              GPH
Linux Device Driver – 3. Linux Device Model

                                USB Mouse의 sysfs 계층

      [/sys]
           +[block]
           -[bus]—[usb]—[devices]—[usb2]—[2-2]—[2-2:1.0]-[usbendpoint:usbdev2.2-ep81]
           -[class]-[input]—[mouse2]—[device]—[bus]—[usbendpoint:usbdev2.2-ep81]
                 -[usb_device]—[usbdev2.2]—[device]—[bus]
                 -[usb_endpoint]—[usbdev2.2-ep00]—[device]
                              —[usbdev2.2-ep81]—[device]
           -[devices]—[pci0000:00]—[0000:00:1d:1]—[usb2]—[2-2]—[2-2:1.0]
           +[firmware]
           +[fs]
           +[kernel]
           +[module]
           +[power]




                                                                                        GPH
Linux Device Driver – 3. Linux Device Model

             RTC 드라이버 모듈을 커널에 올렸을 때 처리 경로




                                              GPH
Linux Device Driver – 3. Linux Device Model
2) Hotplug
- 동작중인 시스템에 동적으로 연결되는 것을 Hotplug라고 표현한다.

- 최신의 리눅스 커널은 hotplug를 감지하면 netlink소켓을 거쳐 사용자 영역으로 uevent를 보낸다.

- netlink 소켓은 소켓 API를 이용해 커널영역과 사용자 영역 사이에 통신이 가능하게 만드는 효율적인 매커니즘
   이다.

- 사용자 영역 끝에서 디바이스 노드 생성과 삭제를 관리하는 udevd 데몬이 uevent를 받아 핫플러그를 관리한다.




                                                                  GPH
4. CAANOO Example
Linux Device Driver – 4. CAANOO Example
1) Vibration Motor
- Hardware 구성:
    •   2EA AC-type Vibration Motor
    •   2EA Vibration Motor Controller chip (ISA1200)

- Hardware 연결:
    •   두 개의 ISA1200이 i2c로 연결되어 있고, 이를 통해 MCU(POLLUX) 로부터 각종 command
        (enable/disable, AC/DC motor type 등)을 받는다.
    •   두 개의 ISA1200은 MCU로부터 하나의 PWM라인을 공유하며 MCU는 PWM의 duty비를 이용하여
        모터의 세기(강/약)를 조절한다.

- source file location: <Kernel Top Dir>/drivers/haptic/simple_isa1200.c




                                                                           GPH
Linux Device Driver – 4. CAANOO Example

                  Vibration Motor Block Diagram




                        ISA1200
                       Command




                                  RAM

                                                  Vibration
                                                  Strength
                                                   control




                                                              GPH
Linux Device Driver – 4. CAANOO Example
                   PWM 신호와 진동의 세기




                                          GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – 디바이스 드라이버의 시작 지점(init)과 종료 지점(exit)




                                                      디바이스 드라이버의 시
                                                      작 지점:
                                                      - 플랫폼 디바이스 구조
                                                      체를 동적으로 할당하고
                                                      디바이스와 드라이버를
                                                      등록




                                                      디바이스 드라이버의 종
                                                      료 지점:
                                                      - 등록된 플랫폼 디바이
                                                      스와 드라이버 제거



                                                      드라이버 시작/종료지점
                                                      명시


                                                                 GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – platform_device, platform_driver
   - platform_device의 동적할당을 위한 포인터 선언


   - platform_driver 선언




                                                   GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – platform_device, platform_driver
                                                     i2c Driver register
   - probe() method.




                                                   cdev 와 file_operations 등록
   - remove() method.




                                                                               GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – struct file_operations

   사용자 영역 Application Code Source

    fd = open(const char *pathname, int flags);




              Device driver Code Source
               int xxx_open(struct inode * inode, struct file *filp)
               {
                    /* … … */
                    return ret;
               }




                                                                       GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – struct file_operations




▶ source code – /sys와 /dev에서 Vibration Motor




▶ File operations Example – Haptic_test




                                               GPH
Linux Device Driver – 4. CAANOO Example
2) Analog Joystick
- Hardware 구성:
    •   X, Y 2개 축으로 구성된 Analog Joystick

- Hardware 연결:
    •   X, Y 각각의 축이 MCU의 ADC(Analog to Digital Converter) Pin 2EA에 연결

- source file location: <kernel top dir>/drivers/i2c/chips/ad7993.c




                                                                        GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – 디바이스별 구조체




                                          GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – platform_device의 probe() 루틴에서 Input Device 초기화




                                                                 CAANOO의 Analog
                                                                 Joystick과 Button을
                                                                 Linux Input Device
                                                                 Interface 로 사 용 하
                                                                 기 위한 처리




                                                                               GPH
Linux Device Driver – 4. CAANOO Example
▶ source code – Device 속성 파일 Sysfs에 만들기.




▶파일 생성 결과 확인




                                           GPH
Linux Device Driver – 4. CAANOO Example
▶Sysfs Examples
                                                      calibration 파일의 내용(Text)를 출력


 root@wiz:/usr/gp2x# cat /sys/devices/platform/pollux-analog.0/calibration
 861 161 511 861 161 511 1 0root@wiz:/usr/gp2x#
 root@wiz:/usr/gp2x# echo "0 0 0 0 0 0 0 0" > /sys/devices/platform/pollux-
 analog.0/calibration

                                                     calibration 파일에 특정 내용(Text)을 입력!
                                                     결과는…?




                                                                                        GPH

Más contenido relacionado

La actualidad más candente

시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203doo rip choi
 
ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)Chulgyu Shin
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) ymtech
 
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져Chulgyu Shin
 
백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나Daniel Shin
 
3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)Daniel Shin
 
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)Ubuntu Korea Community
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은jieun kim
 
리눅스에 대하여
리눅스에 대하여리눅스에 대하여
리눅스에 대하여ETRIBE_STG
 
(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
 
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은jieun kim
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱Jong Wook Kim
 
망고100 보드로 놀아보자 14
망고100 보드로 놀아보자 14망고100 보드로 놀아보자 14
망고100 보드로 놀아보자 14종인 전
 
컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조dddddanbi
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8YoungGun Na
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리Seungyong Lee
 
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker securityNAVER D2
 

La actualidad más candente (20)

시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203시스템 관리자를 위한 리눅스강의 1강 20130203
시스템 관리자를 위한 리눅스강의 1강 20130203
 
ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)ITs 2주차_기본명령어(발표)
ITs 2주차_기본명령어(발표)
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit)
 
저장장치
저장장치저장장치
저장장치
 
DPDK
DPDKDPDK
DPDK
 
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져1주차   리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
1주차 리눅스의 이해 및 설치, 파티션과 파일 시스템, 부팅매니져
 
백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나백업을 위한 USB운영체제 완료세미나
백업을 위한 USB운영체제 완료세미나
 
3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)
 
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
노태상 - 리눅스 커널 개요 및 이슈 아이엠 (2010Y01M30D)
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 
리눅스에 대하여
리눅스에 대하여리눅스에 대하여
리눅스에 대하여
 
(111217) #fitalk rootkit tools and debugger
(111217) #fitalk   rootkit tools and debugger(111217) #fitalk   rootkit tools and debugger
(111217) #fitalk rootkit tools and debugger
 
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
20150509 unix v6로 배우는 커널의 원리와 구조 3 김지은
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
망고100 보드로 놀아보자 14
망고100 보드로 놀아보자 14망고100 보드로 놀아보자 14
망고100 보드로 놀아보자 14
 
컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조컴퓨터 하드웨어 구조
컴퓨터 하드웨어 구조
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
Grub의 이해
Grub의 이해Grub의 이해
Grub의 이해
 
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
[D2 COMMUNITY] Open Container Seoul Meetup - Docker security
 

Similar a caanoo Device driver

윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
Foss open sorucesw_6902
Foss open sorucesw_6902Foss open sorucesw_6902
Foss open sorucesw_6902승우 백
 
Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)Jaeock Shim
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimsuk kim
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part Isprdd
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10mimul
 
Lkda facebook seminar_140419
Lkda facebook seminar_140419Lkda facebook seminar_140419
Lkda facebook seminar_140419sprdd
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101INSIGHT FORENSIC
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurationsJohn Kim
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file formatYoungjun Chang
 
IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1Park Jonggun
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsJuseok Kim
 
망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5종인 전
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제Lee Sang-Ho
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalKyunghun Jeon
 
제로부터시작하는오픈소스
제로부터시작하는오픈소스제로부터시작하는오픈소스
제로부터시작하는오픈소스Mario Cho
 
오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기Jaehwa Park
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2YoungGun Na
 
(Fios#02) 4. 임베디드 다바이스 역분석
(Fios#02) 4. 임베디드 다바이스 역분석(Fios#02) 4. 임베디드 다바이스 역분석
(Fios#02) 4. 임베디드 다바이스 역분석INSIGHT FORENSIC
 

Similar a caanoo Device driver (20)

윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
Foss open sorucesw_6902
Foss open sorucesw_6902Foss open sorucesw_6902
Foss open sorucesw_6902
 
Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)Relationship between firmware and module(drvier)
Relationship between firmware and module(drvier)
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kim
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
Exynos4210 beginnerrev10
Exynos4210 beginnerrev10Exynos4210 beginnerrev10
Exynos4210 beginnerrev10
 
Lkda facebook seminar_140419
Lkda facebook seminar_140419Lkda facebook seminar_140419
Lkda facebook seminar_140419
 
(120128) #fitalk android forensics 101
(120128) #fitalk   android forensics 101(120128) #fitalk   android forensics 101
(120128) #fitalk android forensics 101
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurations
 
2. windows system과 file format
2. windows system과 file format2. windows system과 file format
2. windows system과 file format
 
IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1IoT with Raspberry Pi + Node JS - Chapter 1
IoT with Raspberry Pi + Node JS - Chapter 1
 
System Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOpsSystem Infra와 Recovery 그리고 DevOps
System Infra와 Recovery 그리고 DevOps
 
망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5망고100 보드로 놀아보자 5
망고100 보드로 놀아보자 5
 
UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제UNIX 시스템 2014-2018년 기말시험 기출문제
UNIX 시스템 2014-2018년 기말시험 기출문제
 
Backend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker PrincipalBackend Master | 3.4.5 Deploy - Docker Principal
Backend Master | 3.4.5 Deploy - Docker Principal
 
제로부터시작하는오픈소스
제로부터시작하는오픈소스제로부터시작하는오픈소스
제로부터시작하는오픈소스
 
오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기오픈스택: 구석구석 파헤쳐보기
오픈스택: 구석구석 파헤쳐보기
 
운영체제 Sig2
운영체제 Sig2운영체제 Sig2
운영체제 Sig2
 
(Fios#02) 4. 임베디드 다바이스 역분석
(Fios#02) 4. 임베디드 다바이스 역분석(Fios#02) 4. 임베디드 다바이스 역분석
(Fios#02) 4. 임베디드 다바이스 역분석
 

Más de jumiss

Zilog manual eng(1)
Zilog manual eng(1)Zilog manual eng(1)
Zilog manual eng(1)jumiss
 
Zi log quickguide_eng
Zi log quickguide_engZi log quickguide_eng
Zi log quickguide_engjumiss
 
Pb 100 영문
Pb 100 영문Pb 100 영문
Pb 100 영문jumiss
 
Brochure 32 page-english
Brochure 32 page-englishBrochure 32 page-english
Brochure 32 page-englishjumiss
 
Rex karaⅱ eng
Rex karaⅱ engRex karaⅱ eng
Rex karaⅱ engjumiss
 
Nfc manual
Nfc manualNfc manual
Nfc manualjumiss
 
Rex karaⅱ eng
Rex karaⅱ engRex karaⅱ eng
Rex karaⅱ engjumiss
 
Proposal kropsson nfc
Proposal kropsson nfcProposal kropsson nfc
Proposal kropsson nfcjumiss
 
rex-kara II Brochure 32 page-english
rex-kara II Brochure 32 page-englishrex-kara II Brochure 32 page-english
rex-kara II Brochure 32 page-englishjumiss
 
Wiz manual(chn)
Wiz manual(chn)Wiz manual(chn)
Wiz manual(chn)jumiss
 
Wiz manual(kor)
Wiz manual(kor)Wiz manual(kor)
Wiz manual(kor)jumiss
 
Wiz manual(usa)
Wiz manual(usa)Wiz manual(usa)
Wiz manual(usa)jumiss
 
Hud mx2 en
Hud mx2 enHud mx2 en
Hud mx2 enjumiss
 
2013 new kropsson waterproof splash
2013 new kropsson waterproof splash2013 new kropsson waterproof splash
2013 new kropsson waterproof splashjumiss
 
Kropsson cd 850
Kropsson cd 850Kropsson cd 850
Kropsson cd 850jumiss
 
Kropsson cd 750max
Kropsson cd 750maxKropsson cd 750max
Kropsson cd 750maxjumiss
 
Kropsson cd aero
Kropsson cd aeroKropsson cd aero
Kropsson cd aerojumiss
 
Kropsson install guide2013
Kropsson install guide2013Kropsson install guide2013
Kropsson install guide2013jumiss
 
Fv726 user manual (eng)
Fv726 user manual (eng)Fv726 user manual (eng)
Fv726 user manual (eng)jumiss
 
Fv726 user manual (eng)
Fv726 user manual (eng)Fv726 user manual (eng)
Fv726 user manual (eng)jumiss
 

Más de jumiss (20)

Zilog manual eng(1)
Zilog manual eng(1)Zilog manual eng(1)
Zilog manual eng(1)
 
Zi log quickguide_eng
Zi log quickguide_engZi log quickguide_eng
Zi log quickguide_eng
 
Pb 100 영문
Pb 100 영문Pb 100 영문
Pb 100 영문
 
Brochure 32 page-english
Brochure 32 page-englishBrochure 32 page-english
Brochure 32 page-english
 
Rex karaⅱ eng
Rex karaⅱ engRex karaⅱ eng
Rex karaⅱ eng
 
Nfc manual
Nfc manualNfc manual
Nfc manual
 
Rex karaⅱ eng
Rex karaⅱ engRex karaⅱ eng
Rex karaⅱ eng
 
Proposal kropsson nfc
Proposal kropsson nfcProposal kropsson nfc
Proposal kropsson nfc
 
rex-kara II Brochure 32 page-english
rex-kara II Brochure 32 page-englishrex-kara II Brochure 32 page-english
rex-kara II Brochure 32 page-english
 
Wiz manual(chn)
Wiz manual(chn)Wiz manual(chn)
Wiz manual(chn)
 
Wiz manual(kor)
Wiz manual(kor)Wiz manual(kor)
Wiz manual(kor)
 
Wiz manual(usa)
Wiz manual(usa)Wiz manual(usa)
Wiz manual(usa)
 
Hud mx2 en
Hud mx2 enHud mx2 en
Hud mx2 en
 
2013 new kropsson waterproof splash
2013 new kropsson waterproof splash2013 new kropsson waterproof splash
2013 new kropsson waterproof splash
 
Kropsson cd 850
Kropsson cd 850Kropsson cd 850
Kropsson cd 850
 
Kropsson cd 750max
Kropsson cd 750maxKropsson cd 750max
Kropsson cd 750max
 
Kropsson cd aero
Kropsson cd aeroKropsson cd aero
Kropsson cd aero
 
Kropsson install guide2013
Kropsson install guide2013Kropsson install guide2013
Kropsson install guide2013
 
Fv726 user manual (eng)
Fv726 user manual (eng)Fv726 user manual (eng)
Fv726 user manual (eng)
 
Fv726 user manual (eng)
Fv726 user manual (eng)Fv726 user manual (eng)
Fv726 user manual (eng)
 

caanoo Device driver

  • 2. Linux Device Driver – Contents 1. Linux Kernel 1) 구조 2) 기능 2. Device Driver 개요 1) Character Device Driver 2) Block Device Driver 3) Network Device Driver 3. Linux Device Model 1) udev 2) sysfs, kobject, device class 3) Hotplug 4. CAANOO Character Device Driver Example 1) Vibration Motor 2) Analog Joystick GPH
  • 4. Linux Device Driver – 1. Linux Kernel 1) 구조 GPH
  • 5. Linux Device Driver – 1. Linux Kernel GPH
  • 6. Linux Device Driver – 1. Linux Kernel 2) 기능 • 프로세스 관리 - 프로세스 생성 및 소멸 - 프로세스간 통신 - etc. • 메모리 관리 - 가상 메모리 관리기법 제공 - 시스템에 장착된 메모리(Hardware) 관리 • 파일 시스템 관리 - 가상 파일 시스템(VFS)에 의한 다양한 종류의 파일 시스템(ext3, ext4, FAT 등) 지원 - 파일(정규 파일, 장치 파일, 파이프), 디렉토리 관리 • 디바이스 관리 - 입출력 요청 처리 및 작업 스케쥴링 - 인터럽트 처리 - 주변 장치와 메모리의 데이터 전송 • 네트워크 관리 - 네트워크 라우팅 및 주소 GPH
  • 8. Linux Device Driver – 2. Device Driver 개요 ▶ Linux Device Driver란? - 시스템이 지원하는 하드웨어를 응용프로그램에서 사용할 수 있도록 Kernel에서 제공하는 라이브러리(or Interface). - 일반적으로 문자, 블록, 네트워크 디바이스 드라이버로 분류 하며 ―/dev‖에 나타난다. example: 주 번호 부 번호 문자 드라이버 블록 드라이버 GPH
  • 9. Linux Device Driver – 2. Device Driver 개요 - 각 행의 첫 글자가 디바이스의 유형(c는 문자 드라이버, b는 블록드라이버)을 나타낸다. - 다섯 번째 열의 숫자는 주 번호, 여섯 번째 숫자는 부 번호를 의미. (※ 문자와 블록 드라이버는 서로 다른 영역을 차지하므로 동일한 주 번호를 블록 드라이버 뿐만 아니라 문자 드라이버에도 할당 할 수 있다.) - 주 번호는 전반적인 드라이버 특징을 지정, 부 드라이버가 서비스하는 정확한 디바이스 특 징을 지정(mtdblock0, mtdblock1 참고). GPH
  • 10. Linux Device Driver – 2. Device Driver 개요 1) Character Device Driver ▶ Char Device Driver의 정의 및 특징 - 문자 디바이스는 하나의 파일처럼 사용할 수 있는 것(버튼, G-Sensor, Analog Joystic, RTC 등)을 말하고 문자 디바이스 드라이버는 이러한 파일 접근에 필요한 open, close, read, write등의 시스템 호출을 구현. - 디바이스에서 자료에 순차적(sequentially)으로 접근 가능한 커널 코드 - 임의의 길이를 갖는 문자열을 다루는 디바이스 드라이버로 응용 프로그램에서 직접적으로 호출되는 버퍼 없 는 디바이스 드라이버. - 응용프로그램은 open(), close(), read(), write()와 같은 파일 처리용 함수를 이용하여 디바이스 파일을 일반 파 일처럼 다뤄서 하드웨어를 제어할 수 있다. - 구조가 매우 간단하다. GPH
  • 11. Linux Device Driver – 2. Device Driver 개요 ▶ Character Device Driver 기능. - 디바이스를 초기화하며 등록함수를 사용해 커널 영역에 드라이버를 빈틈없이 엮는(등록하는) 기능을 책임진 초기화(init()) 루틴. - 관련 /dev 노드를 사용해 사용자 어플리케이션이 호출하는 입출력 시스템 호출과 직접 대응하는 open(), close(), read(), write() 같은 진입점 집합. - interrupt handling, bottom half, timer handling 등의 처리. GPH
  • 12. Linux Device Driver – 2. Device Driver 개요 ▶ Character Device Driver 주요 자료구조. - 디바이스별 구조체: 드라이버 동작을 위한 정보 저장소로 활용 - struct cdev: 문자 드라이버용 커널 추상화 단위, 일반적으로 디바이스별 구조체에 포함. - struct file_operations: 사용자 어플리케이션과 작동하는 open, close, read, write의 구현. - struct file: 해당 /dev 노드에 대한 정보. - struct platform_device, struct platform_driver: platform_bus라는 가상의 플랫폼 버스 상에 새로운 디바이스를 등록. GPH
  • 13. Linux Device Driver – 2. Device Driver 개요 ▶ Character Device Driver example. - 직렬 드라이버: 컴퓨터의 직렬 포트를 관리하는 문자 드라이버. (drivers/serial) - 입력 드라이버: 키보드, 마우스, 조이스틱 같은 디바이스를 다루는 책임. (drivers/input) - 프레임 버퍼: 비디오 메모리에 대한 접근 제공. (drivers/video) - 이외 많은 유형의 Character Device Driver들이 존재. (―grep –r register_chrdev drivers/‖로 확인) GPH
  • 14. Linux Device Driver – 2. Device Driver 개요 2) Block Device Driver - 블록 디바이스는 임의 접근 능력을 갖춘 저장소 매체. - 문자 디바이스와 달리 블록디바이스는 파일 시스템 자료를 담을 수 있다(하드디스크와 같은 저장 매체를 다 룬다). - 대부분의 저장 디바이스가 블록(512, 1024, … 4096 Byte)단위의 입출력을 기반으로 하고 있음. - 입출력 스케쥴러가 동작. GPH
  • 15. Linux Device Driver – 2. Device Driver 개요 PC 시스템의 저장소 매체 GPH
  • 16. Linux Device Driver – 2. Device Driver 개요 Linux에서의 블록 입출력 GPH
  • 17. Linux Device Driver – 2. Device Driver 개요 ▶ 입출력 스케쥴러 입출력 스케쥴러 설명 Kernel Source Deadline - 표준 elevator 알고리즘으로 요청의 첫 섹터 번호를 기준으로 block/deadline-iosched.c 정렬 도는 병합 수행. - 입출력 요청에 대해서 굶주림(starvation)을 방지하기 위해 (2.6 kernel) deadline을 설정. Anticipatory - 기본 알고리즘은 Deadline과 같지만, 읽기 요청을 수행한 후 미 Block/as-iosched.c 리 정해놓은 시간만큼 추가 요청을 예상하며 대기. (2.6 kernel) Complete Fair - 요청한 프로세스마다 요청큐를 하나씩 유지함으로써 프로세스 Block/cfq-iosched.c 마다 입출력에대한 공평한 기회를 얻게 됨. Queuing (CFQ) - 특정 프로세스때문에 다른 프로세스가 굶어 죽는 상황 방지. (2.6 kernel) Noop - 최적화된 삽입 지점을 찾기 위해 요청큐를 탐색하는 데 시간을 Block/noop-iosched.c 소비하지 않음. - 탐색 지연 시간이 존재하지 않는 SSD같은 매체에 이상적. (2.6 kernel) GPH
  • 18. Linux Device Driver – 2. Device Driver 개요 ▶ 보조 기억 장치와 디바이스 파일 - 블록 디바이스 드라이버의 주 번호는 블록 디바이스를 구별하고, 부 번호는 물리적인 보조 기억 장치를 구별하거나 분할 파티션을 구별함. - 리눅스의 블록 디바이스 장치 brw-rw---- 1 root disk 8, 0 2010-11-03 18:23 sda brw-rw---- 1 root disk 8, 1 2010-11-03 18:23 sda1 파티션이 2개(FAT-sdb1, Ext3- brw-rw---- 1 root disk 8, 2 2010-11-03 18:23 sda2 brw-rw---- 1 root disk 8, 5 2010-11-03 18:23 sda5 sdb2)인 이동식 디스크(sdb)의 brw-rw---- 1 root disk 8, 16 2010-11-15 13:56 sdb 블록디바이스 파일 brw-rw---- 1 root disk 8, 17 2010-11-15 13:56 sdb1 brw-rw---- 1 root disk 8, 18 2010-11-15 13:56 sdb2 - 블록 디바이스의 마운트 정보 파일시스템 크기 사용됨 사용가능 사용율% 마운트 됨 /dev/sda1 284G 109G 161G 41% / none 1.7G 284K 1.7G 1% /dev none 1.7G 252K 1.7G 1% /dev/shm none 1.7G 1.2M 1.7G 1% /var/run none 1.7G 4.0K 1.7G 1% /var/lock 2개의 파티션(FAT-sdb1, Ext3- none 1.7G 0 1.7G 0% /lib/init/rw sdb2)이 mount되어 있는 정보 /dev/sdb1 70M 2.6M 67M 4% /media/BOOT /dev/sdb2 3.6G 1.6G 1.9G 46% /media/ROOTFS GPH
  • 19. Linux Device Driver – 2. Device Driver 개요 3) Network Device Driver - 네트워크 디바이스 드라이버는 다른 드라이버와 다르게 사용자 영역과 통신하기 위해 /dev나 /sys에 의존하지 않는다. - 어플리케이션은 기반 프로토콜 스택을 추상화한 네트워크 인터페이스(ex eth0)를 거쳐 드라이버와 상호작용 한다. GPH
  • 20. Linux Device Driver – 2. Device Driver 개요 네트워크 스텍을 설명하는 인터넷 모델 일반적으로 이동하는 자료를 이해하는 의미론적인 layer. (HTTP서버와 클라이언트의 관계에서는 웹 내용의 요청 과 응답을 전송) point-to-point 통신을 담당. (호스트 내부에서 종단점 사이에 일어나는 통신을 관리) 패킷을 목적지로 전달. (호스트 사이에서 일어나는 통신을 관리) 물리층에 접근하는 디바이스 드라이버를 참조. (직렬 연 결 혹은 이더넷 디바이스같은 매체) GPH
  • 21. Linux Device Driver – 2. Device Driver 개요 리눅스 네트워크 스텍 구조 사용자 영역 응용 프로그램이 커널 네트워크 하위 시스 템에 접근하는 API를 제공 프로토콜 중립 계층(소켓): 다양한 프로토콜을 위한 공통 함수 집합을 제공하는 Interface. TCP, UDP등 사용 가능한 특정 네트워킹 프로토콜을 정 의. 다양한 기능의 하드웨어 디바이스 드라이버를 프로토콜 로 연결하는 중립 인터페이스 계층. 물리적인 네트워크 디바이스를 관리하는 디바이스 드라 이버. GPH
  • 22. Linux Device Driver – 2. Device Driver 개요 ▶ Network Device Driver 자료 구조. - 소켓 버퍼(struct sk_buff): 네트워크 프로토콜 스택의 구성 단위를 형성하는 구조체이며 커널의 TCP/IP 스택이 이용하는 핵심 구조체. (include/linux/sk_buff.h) - struct net_device: Network driver와 프로토콜 스택 사이의 인터페이스를 정의하는 구조체. (include/linux/netdevice.h) - I/O 버스와 관련있는 구조체: PCI 또는 CPU Address/Data bus GPH
  • 24. Linux Device Driver – 3. Linux Device Model ▶ Linux Device Model(LDM) 개요. - Power management and system shutdown: 예를 들어 USB host adaptor는 host에 연결된 device 들이 모두 안정적으로 power off(or shut down)된 후에 power off되어야 한다 LDM은 이러한 올바 른 절차에의해 이러한 작업을 수행하도록 한다. - Communications with user space: 가상 파일 시스템인 sysfs는 LDM과 매우 밀접하게 연관되어 있 으며 구조화된 LDM의 자료구조를 user space에 표현. - Hotpluggable devices: USB 이동식 디스크와 같은 장치는 시스템이 동작 중일 때 언제든 삽입 (plugging)/제거(unplugging) 될 수 있다. 커널은 이와 같은 사건(event)들을 LDM을 이용해 다루 고(handling) 사용자 영역과 소통(communicate)한다. - Device Classes: 때대로 시스템에 어떠한 종류의 디바이스가 연결되어 있는지 알아야할 필요성이 있다. LDM은 연결된 디바이스를 그것이 속하게 되는 적절한 상위 클레스로 분류하는 메커니즘 을 가지고 있으며, 디바이스가 사용자 영역(user space)에서 발견될 수 있도록 한다. GPH
  • 25. Linux Device Driver – 3. Linux Device Model 1) udev - 초창기부터 2.4버전의 커널은 (수천 개에 이르는) 필요한 디바이스 노드를 /dev에 정적으로 만들 어야만 했다. - 2.4버전대에 이르러 동적으로 디바이스 노드를 생성하는 devfs를 도입하였지만, 노드 작명은 여전 히 디바이스 드라이버에 의존. - 디바이스 관리를 사용자 영역으로 옮기기 위해 udev가 등장. GPH
  • 26. Linux Device Driver – 3. Linux Device Model ▶ udev는 아래의 내용에 의존하여 동작. - Kernel Sysfs 지원: sysfs는 리눅스 디바이스 모델에서 중요한 위치를 차지하며, sysfs는 메모리 내 부 파일 시스템으로 시동 시점에서 /sys에 mount 된다. 아래에 나오는 udevd나 udevinfo는 sysfs 를 참고하여 동작하게 된다. - udevd나 udevinfo 같은 사용자 영역 demon과 utility. - /etc/udev/rules.d/ 디렉터리에 있는 사용자 지정 규칙. GPH
  • 27. Linux Device Driver – 3. Linux Device Model ▶ udevd 데몬 확인 Example (CAANOO) GPH
  • 28. Linux Device Driver – 3. Linux Device Model ▶ 사용자 지정 규칙 Example(CAANOO SD/MMC) SD/MMC 사용자 규칙 파일 SD/MMC Insert SD/MMC Remove GPH
  • 29. Linux Device Driver – 3. Linux Device Model ▶ 임베디드 시스템에서의 udev - 아래와 같은 이유로 인해 특정 임베디드 시스템에서는 udev를 활용하기 보다 정적으로 생성한 디바이스 노드 를 선호하기도 함. • udev는 소프트웨어 설치 과정에서 한 번만 만들어지는 정적 노드와는 달리 시동할 때마다 /dev노드를 생성한다. /dev 디렉터리가 플래시 저장소를 사용할 경우 매번 시동 과정에서 지우기/쓰기 과정을 거 치므로, 플래시 수명이 줄어든다. • udev를 사용하면 시스템 시동 시간이 더 오래 걸린다. • /dev노드를 동적으로 생성하며 모듈을 자동적으로 적재하는 udev기능에는 특수 목적으로 사용할 임베 디드 디바이스에서 피하고 싶은 비결정성이 따라다닌다. 특히 핫플러그 가능한 버스를 거쳐 외부 세상 과 상호작용을 원하지 않은 경우에 문제가 된다. 이런 관점에 따르면 정적 노드 생성과 시동 시점에 모 듈을 메모리에 올리는 방식은 시스템에 대한 통제를 강화하며, 테스트를 용이하게 한다. GPH
  • 30. Linux Device Driver – 3. Linux Device Model 2) sysfs, kobject, device class - sysfs, kobject, device class는 디바이스 모델의 기초적인 구성요소이지만, 대부분의 경우 밖으로 드러나지 않 는다. (즉 직접적으로 드라이버 작성자나 프로그래머가 다루거나 관련 source를 수정하는 일은 거의 없다.) - sysfs는 커널의 구조화된 디바이스 모델의 사용자 영역으로의 표현이다. sysfs는 커널 자료 구조에 대한 정보 를 포함하는 메모리 기반 파일 시스템이라는 점에서 procfs와 유사하지만, procfs가 커널 내부로 통하는 일반 적인 interface를 제공하는 반면, sysfs는 디바이스 모델에 특화된 interface로서 udev의 확장기능 대부분이 sysfs에 의존한다. - kobject는 참조 카운트 같은 공통 객체 속성의 추성화를 지원한다. 일반적으로 kobject는 더 큰 구조체(e.g. struct device)에 내장된다. kobject 구조체의 주요 field와 내용은 다음과 같다. • 참조 카운트 관리를 수행하기 위한 kref • kobject가 속하는 객체 집합인 kset에 대한 포인터 • Kobject를 기술하는 객체 유형인 kobj_type - kobject는 sysfs와 밀접한 관련이 있다. 커널 내부에서 인스턴스로 만들어지는 모든 kobject가 sysfs에서 나타 난다. - 디바이스 클래스 개념은 디바이스 모델의 또 다른 특징이며, 드라이버에서 사용하기를 원하는 interface이다. 클래스 인터페이스는 디바이스마다 더 큰 디바이스 클래스(또는 범주)에 속한다는 생각을 추상화한다. (e.g. usb 마우스, ps/2 키보드, 조이스틱은 입력 클래스에 속하며 /sys/class/input이라는 독자적인 항목을 소유하 게 된다.) GPH
  • 31. Linux Device Driver – 3. Linux Device Model USB Mouse가 삽입되었을때 디바이스 클래스 GPH
  • 32. Linux Device Driver – 3. Linux Device Model USB Mouse의 sysfs 계층 [/sys] +[block] -[bus]—[usb]—[devices]—[usb2]—[2-2]—[2-2:1.0]-[usbendpoint:usbdev2.2-ep81] -[class]-[input]—[mouse2]—[device]—[bus]—[usbendpoint:usbdev2.2-ep81] -[usb_device]—[usbdev2.2]—[device]—[bus] -[usb_endpoint]—[usbdev2.2-ep00]—[device] —[usbdev2.2-ep81]—[device] -[devices]—[pci0000:00]—[0000:00:1d:1]—[usb2]—[2-2]—[2-2:1.0] +[firmware] +[fs] +[kernel] +[module] +[power] GPH
  • 33. Linux Device Driver – 3. Linux Device Model RTC 드라이버 모듈을 커널에 올렸을 때 처리 경로 GPH
  • 34. Linux Device Driver – 3. Linux Device Model 2) Hotplug - 동작중인 시스템에 동적으로 연결되는 것을 Hotplug라고 표현한다. - 최신의 리눅스 커널은 hotplug를 감지하면 netlink소켓을 거쳐 사용자 영역으로 uevent를 보낸다. - netlink 소켓은 소켓 API를 이용해 커널영역과 사용자 영역 사이에 통신이 가능하게 만드는 효율적인 매커니즘 이다. - 사용자 영역 끝에서 디바이스 노드 생성과 삭제를 관리하는 udevd 데몬이 uevent를 받아 핫플러그를 관리한다. GPH
  • 36. Linux Device Driver – 4. CAANOO Example 1) Vibration Motor - Hardware 구성: • 2EA AC-type Vibration Motor • 2EA Vibration Motor Controller chip (ISA1200) - Hardware 연결: • 두 개의 ISA1200이 i2c로 연결되어 있고, 이를 통해 MCU(POLLUX) 로부터 각종 command (enable/disable, AC/DC motor type 등)을 받는다. • 두 개의 ISA1200은 MCU로부터 하나의 PWM라인을 공유하며 MCU는 PWM의 duty비를 이용하여 모터의 세기(강/약)를 조절한다. - source file location: <Kernel Top Dir>/drivers/haptic/simple_isa1200.c GPH
  • 37. Linux Device Driver – 4. CAANOO Example Vibration Motor Block Diagram ISA1200 Command RAM Vibration Strength control GPH
  • 38. Linux Device Driver – 4. CAANOO Example PWM 신호와 진동의 세기 GPH
  • 39. Linux Device Driver – 4. CAANOO Example ▶ source code – 디바이스 드라이버의 시작 지점(init)과 종료 지점(exit) 디바이스 드라이버의 시 작 지점: - 플랫폼 디바이스 구조 체를 동적으로 할당하고 디바이스와 드라이버를 등록 디바이스 드라이버의 종 료 지점: - 등록된 플랫폼 디바이 스와 드라이버 제거 드라이버 시작/종료지점 명시 GPH
  • 40. Linux Device Driver – 4. CAANOO Example ▶ source code – platform_device, platform_driver - platform_device의 동적할당을 위한 포인터 선언 - platform_driver 선언 GPH
  • 41. Linux Device Driver – 4. CAANOO Example ▶ source code – platform_device, platform_driver i2c Driver register - probe() method. cdev 와 file_operations 등록 - remove() method. GPH
  • 42. Linux Device Driver – 4. CAANOO Example ▶ source code – struct file_operations 사용자 영역 Application Code Source fd = open(const char *pathname, int flags); Device driver Code Source int xxx_open(struct inode * inode, struct file *filp) { /* … … */ return ret; } GPH
  • 43. Linux Device Driver – 4. CAANOO Example ▶ source code – struct file_operations ▶ source code – /sys와 /dev에서 Vibration Motor ▶ File operations Example – Haptic_test GPH
  • 44. Linux Device Driver – 4. CAANOO Example 2) Analog Joystick - Hardware 구성: • X, Y 2개 축으로 구성된 Analog Joystick - Hardware 연결: • X, Y 각각의 축이 MCU의 ADC(Analog to Digital Converter) Pin 2EA에 연결 - source file location: <kernel top dir>/drivers/i2c/chips/ad7993.c GPH
  • 45. Linux Device Driver – 4. CAANOO Example ▶ source code – 디바이스별 구조체 GPH
  • 46. Linux Device Driver – 4. CAANOO Example ▶ source code – platform_device의 probe() 루틴에서 Input Device 초기화 CAANOO의 Analog Joystick과 Button을 Linux Input Device Interface 로 사 용 하 기 위한 처리 GPH
  • 47. Linux Device Driver – 4. CAANOO Example ▶ source code – Device 속성 파일 Sysfs에 만들기. ▶파일 생성 결과 확인 GPH
  • 48. Linux Device Driver – 4. CAANOO Example ▶Sysfs Examples calibration 파일의 내용(Text)를 출력 root@wiz:/usr/gp2x# cat /sys/devices/platform/pollux-analog.0/calibration 861 161 511 861 161 511 1 0root@wiz:/usr/gp2x# root@wiz:/usr/gp2x# echo "0 0 0 0 0 0 0 0" > /sys/devices/platform/pollux- analog.0/calibration calibration 파일에 특정 내용(Text)을 입력! 결과는…? GPH