■ 네트워크 디바이스 드라이버는 디바이스 파일로 접근하지 않고, 네트워크 오퍼레이션 구조체인 net_device를 사용한다.


(1) 동작 (데이터 송수신)
: 네트워크 디바이스 드라이버는 커널 소스에 포함되거나 모듈로 작성되어 동작하지만, 이 두 방식은 드라이버의 구동 방식만 다를 뿐 나머지는 같다.
 
● 등록 / 초기화
- 커널 부팅 이나 삽입하는 과정에 의해 네트워크 디바이스 드라이버가 시작되고, 가장 먼저 제어 대상이 되는 하드웨어를 검출.
- 네트워크 하드웨어가 검출이 되면, 네트워크 디바이스 드라이버를 초기화한 후 커널과 연결 가능한 데이터 구조를 등록.
- 리눅스가 정상적으로 수행되면, 초기화 스크립트는 이용해 하드웨어를 검출하고, 커널에 등록된 네트워크 인터페이스를 활성화.
- 인터페이스가 활성화될 때는 디바이스 열기 함수를 호출하고, 네트워크 환경에 맞추기 위한 디바이스 드라이버의 제어상태를 변경.

● 송신
- 응용 프로그램에서 프로토콜을 이용해 데이터를 전송하기 위한 함수들을 사용하면, 네트워크 디바이스 드라이버가 데이터를 전송한다.

● 수신
- 수신된 데이터는 인터럽트 핸들러나 폴링 루틴에 의해 네트워크 하드웨어에서 데이터를 얻어 커널에 전송.
- 전달된 데이터는 프로토콜에 따른 관리 큐에 저장.
- 이 데이터는 최종적으로 응용프로그램에서 가져가거나, 전달받을 응용프로그램이 존재하지 않으면 버려진다.


(2) 동작절차 정리

- 모듈의 로드나 커널 부팅에 의한 초기화 처리
- 모듈의 제거에 의한 종료 처리
- 네트워크 디바이스의 검출
- 네트워크 디바이스의 초기화 및 등록
- 네트워크 디바이스 열기와 닫기
- 네트워크 데이터 전송
- 네트워크 데이터 수신
- 인터럽트의 처리
- 네트워크 디바이스 제어 ioctl
- 멀티 캐스트 처리
- 설정 정보 재설정 처리


by 민트앤라떼 2012. 4. 16. 14:58