Linux/Linux_Device_Drivers

Linux Device Driver

Roien 2015. 3. 10.
반응형
Device driver 동작의 3가지 구성 요소
1. device driver
2. device node file
3. application

Linux의 device driver 종류
1. character device driver
2. block device driver
3. network device driver


device의 분류는
1. group info (character, block, network)
2. device number
3. port number (같은 device (type) 인데 실제 몇 번째 device인지)
    /dev/ttyS0 ← terminal type serial 0


Difference between block device and character device

    block device driver requires followings
 - buffering layer
 - synchronization method
 - reordering
(block dev.는 buffering layer가 있어서 async, 가능)


Major number, Minor number

                 +--------+
                 | Driver |
                 +--------+
                      |
          +---------------+---------------+
          |               |               |
   +------------+   +------------+  +------------+
   | controller |   | controller |  | controller | ...
   | Major #1   |   | Major #2   |  | Major #3   | <-- OS manages up to major number
   +------------+   +------------+  +------------+
    |      |
    |      +-------+
    |              |
 +----------+ +----------+
 | device 1 | | device 2 | ...
 | minor #1 | | minor #2 |
 +----------+ +----------+
 

2.6 kernel 이후 부터는 major number와 minor number가 기존 각 8 bits에서 증가(16 or 18 bits)

OS 입장에서는 major number만 알면 됨 (minor의 처리는 device driver에서만 처리하면 됨)
등록 시, major number만 주게 됨. (OS에 등록 시)


init_module / cleanup_module

init와 cleanup 함수의 이름을 변경할 수 있다.
init_module(), cleanup_module <-- can be changeable but, actually back to these function name
이는 module_init()와 module_exit() macro에 의해서 가능하다.    <- linux/init.h

ex.
#include <linux/module.h>   // Needed by all modules
#include <linux/kernel.h>
int hello_2_init(void)
{
   printk(KERN_ALERT "Hello, world 2\n");
   return 0;
}
static void hello_2_exit(void)
{
   printk(KERN_ALERT "Goodbye, world 2\n");
}
module_init(hello_2_init);
module_exit(hello_2_exit);


반응형

댓글