개요
~ 이번 장에서는 리눅스 디바이스의 기본 동작을 위한 함수에 대해서 이해한다.
~ 디바이스 드라이버를 초기화, 제거하는 함수에 대해서 이해한다.
Event | 유저 함수 | 커널 함수 |
Load module | insmod | module_init() |
Open device | ||
Close device | ||
Read device | ||
Write device | ||
Remove module | rmmod | module_exit() |
디바이스의 동작
~ 디바이스는 유저모드의 함수가 불려지면 해당 함수에 해당하는 커널모드의 함수가 동작함으로써 실제 하드웨어를 제어하게 된다.
~ 예를 들어 디바이스 드라이버를 처음 로드하는 유저모드에서 insmod라는 명령어를 입력한다. 이는 해당 디바이스 드라이버에서 module_init() 함수를 콜하게 되고 디바이스 드라이버를 초기화해 주게 된다.
~ 반대로 유저모드에서 rmmod를 하여 모듈을 내리면 디바이스 드라이버의 module_exit() 함수가 콜되고 디바이스 드라이버를 커널에서 내리게 된다.
1. module_init(), module_exit() 구현
int veth_init_module(void)
{
}
void veth_cleanup(void)
{
}
module_init(veth_init_module);
module_exit(veth_cleanup);
~ module_init(), module_exit() 의 파라메터는 실제 init, exit 함수의 포인터를 가리킨다.
~ 즉 커널의 로드,언로드 될 때 module_init(veth_init_module) , module_exit(veth_cleanup) 함수가 콜되고 이는 veth_init_module, veth_cleanup 함수를 실행하게 된다.