리눅스에서 Hotplug가 어떤 방식으로 동작하고 어떠한 장치들이 지원되는지 설명한다. = [LinuxHotplug] 를 사용하기 위한 준비 = * 리눅스 커널 2.4 이상 * 커널 설정에서 General setup -> Support for hot-pluggable devices 옵션이 켜져있어야 한다. * hotplug 스크립트 * [http://linux-hotplug.sourceforge.net Linux Hotplugging]에서 받아서 설치한다. * hotplug가 가능한 하드웨어 * usb, ieee1394, pci, pcmcia(2.6.13이상) hotplug장치 등등. = [LinuxHotplug] 동작방식 = * hotplug를 지원하는 장치가 연결된다. * 연결되면 장치의 클래스 드라이버에서 /proc/sys/kernel/hotplug에 등록된 프로그램을 호출한다. (주로 /sbin/hotplug ) * hotplug의 인자로 장치클래스의 이름이 붙는다. (ex: usb, ieee1394 ...) * /sbin/hotplug에서는 /etc/hotplug.d/장치클래스/*.hotplug 와 /etc/hotplug.d/default/*.hotplug 스크립트를 수행한다. * 각각의 스크립트를 hotplug agent라고 부른다. * /etc/hotplug.d/default/default.hotplug는 linux-hotplug.sf.net에서 제공하는 것으로 해당 장치가 필요로 하는 커널 모듈을 적재하는 역할을 한다. * /etc/hotplug.d/default/udev.hotplug는 리눅스 2.6에서 동작하는 것으로 기존의 devfs를 교체하고 유연한 장치이름을 제공한다. * /etc/hotplug.d/default/hal.hotplug는 HAL Daemon에 해당장치가 연결되었다는 것을 dbus를 통해 알려준다. * 각 스크립트에서 환경변수를 참조해서 장치에 대한 작업을 수행한다. * 환경변수는 다음과 같다. == Linux 2.4 == * USB {{{ ACTION=%s [add or remove] DEVPATH=%s PRODUCT=%x/%x/%x INTERFACE=%d/%d/%d [ for interface 0, if TYPE=0/*/* ] TYPE=%d/%d/%d }}} * IEEE1394 {{{ ACTION=%s [add or remove] VENDOR_ID=%x [24 bit vendor id] GUID=%x [64 bit globally unique id] SPEFICIER_ID=%x [24 bit id of owner of specification] VERSION=%d.%d [version of specification] }}} * PCI {{{ ACTION=%s [add or remove] PCI_CLASS=%06X PCI_ID=%04X:%04X PCI_SLOT_NAME=%s PCI_SUBSYS_ID=%04X:%04X }}} == Linux 2.6 == * 리눅스 커널 2.6 에서는 장치의 클래스드라이버가 아닌 kobject수준에서 hotplug스크립트를 호출한다. * 더불어 각 장치에 대해 대응되는 sysfs의 경로가 함께 환경변수로 넘어온다. * SCSI, SCSI_HOST, SCSI_DEVICE, BLOCK, INPUT, NET {{{ ACTION=%s [add or remove] DEVPATH=/%s/%s... }}} = [LinuxHotplug]의 실제 활용예 = == gphoto2 == * gphoto2는 여러 Unix시스템에서 쓸 수 있는 디지털카메라 관리 프로그램이다. * gphoto2를 설치하면 /etc/hotplug/usb/usbcam 스크립트가 등록된다. * usbcam스크립트는 gphoto2에서 지원하는 카메라가 연결되었을 때 현재 console을 쓰는 사용자에게 디지털카메라에 접근할 수 있는 허가권을 준다. == [ProjectUtopia] == * See [ProjectUtopia] ---- CategoryLinux