Hot Plug & Cold Plug
리눅스에서는 동작 중에 필요한 디바이스 노트 파일을 "/dev" 디렉터리에 미리 정의한다.
따라서 application은 별도의 절차를 거치지 않고도 미리 정의된 디바이스 노드 파일을 통해 디바이스 드라이버에 접근한다. 이 "/dev" 디렉터리는 시스템 운용 중 누군가 디바이스 노드 파일을 생성해줘야하는데 이러한 역할을 init process가 담당한다.
inti process는 두가지 방법으로 디바이스 노드 파일을 생성한다.
첫번째 방법, 미리 정의된 디바이스 정보를 바탕으로 init 프로세스가 실행될 때 일괄적으로 노드파일을 생성하는 방법
두번째 방법, 시스템 동작 중 USB 포트에 장치가 삽입될때 이에 대한 이벤트 처리로 init process가 해당 장치의 디바이스 노드 파일을 동적으로 생성하는 방법이다.
1. 콜드 플러그 (Cold Plug)
이 방법은 이미 정의된 디바이스를 연결하는 방식이라하여 "Cold plug"라고 한다.
cold plug 개요
linux kernel 2.6 미만에서는 디바이스 노드 파일을 사용자가 직접 만들어야했다.
이때 노드 파일에 팔요한 major, minor number를 겹치지 않게 만든 다음 mknod 유틸리티를 통해 생성해야했다.
하지만 개발자가 일일이 메이저 번호와 마이너 번호를 알아야했고 이 번호간의 충돌을 주의해야하는 등 귀찮음이 많았다.
이러한 불편함 때문에 커널 2.6.x부터는 udev(userspace device)라는 유틸리티가 등장했다.
udev는 데몬 프로세스로 동작하면서 디바이스 드라이버가 로딩될 때 major number, minor number, device type을 파악해 "/dev" 디렉터리에 자동으로 디바이스 노드 파일을 생성하는 역할을 한다.
백그라운드로 실행중인 udev 데몬은 드라이버의 uevent 메시지를 분석하여 "/sys" 디렉터리에 등록된 디바이스 정보를 보고 "/dev" 디렉터리의 적절한 위치에 디바이스 노드 파일을 생성한다.
2. 핫 플러그 (Hot Plug)
이 방법은 동작 중에 연결한다고 하여 "Hot plug"라고 한다.
핫플러그 감지시 netlink 소켓을 거쳐 사용자 영역으로 uevent를 보냄
'Embedded : : Linux' 카테고리의 다른 글
디바이스 트리의 구조와 장치 표현 (0) | 2024.11.01 |
---|---|
확장자 별 파일 역할 (.mk .xml .prop .rc .dts .dtsi) (0) | 2024.10.31 |
크로스 컴파일 (0) | 2024.10.31 |
dump_stack() (0) | 2024.10.31 |
리눅스가 널리 채택된 요인들 (1) | 2024.10.13 |