* [http://live.gnome.org/ProjectUtopia GnomeLive의 Project Utopia 페이지] * [http://primates.ximian.com/~rml/project-utopia/ Robert Love 씨의 유토피아 프로젝트] * [http://people.redhat.com/johnp/redhat/experimental/utopia/i386 John Palmieri 씨의 Fedora용 RPM 모음] * 리눅스 데스크탑에서 연결/제거 가능한 장치를 자동으로 구성해주는 환경을 만드는 프로젝트이다. * 리눅스 2.6 + dbus messaging system + Hal + Gnome Desktop = 유토피아의 구성 = * 리눅스 2.6 * sysfs * 리눅스 2.6에서는 하드웨어의 정보를 일반화시켜서 볼 수 있는 sysfs가 추가되었다. * proc에서 subsystem마다 각기 따로 관리하던 정보를 단일하고 일반화된 방식으로 접근이 가능하다. * 현재 시스템에서 동작되고 있는 장치들을 물리적, 또는 논리적인 구조로 원하는 방향에서 찾아 볼수 있다. * 아래에서 시스템에서 동작하고 있는 ide인터페이스 장치들을 물리적인 구조및 논리적인 구조로 보여주고 있다. * 또한 서로의 정보가 심볼릭 링크가 되어 있어서 관련 정보를 쉽게 얻을 수 있다. {{{ ganadist@ganadist sys $ tree -d devices/pci0000\:00/0000\:00\:09.0 devices/pci0000:00/0000:00:09.0 |-- ide0 | |-- 0.0 | | |-- block -> ../../../../../block/hda | | `-- power | |-- 0.1 | | |-- block -> ../../../../../block/hdb | | `-- power | `-- power `-- power ganadist@ganadist sys $ tree -d block/hd* block/hda |-- device -> ../../devices/pci0000:00/0000:00:09.0/ide0/0.0 |-- hda1 |-- hda10 |-- hda11 |-- hda12 |-- hda2 |-- hda5 |-- hda6 |-- hda7 |-- hda8 |-- hda9 `-- queue `-- iosched block/hdb |-- device -> ../../devices/pci0000:00/0000:00:09.0/ide0/0.1 |-- hdb1 |-- hdb2 |-- hdb5 |-- hdb6 |-- hdb7 `-- queue `-- iosched }}} * [LinuxHotplug] * 커널 2.4에서 일부 시스템(usb, ieee1394, pci)에서만 적용되던 [LinuxHotplug]가 subsystem 전체(block, net, scsi_host, scsi_device, input, etc)에 적용되게 되었다. * hotplug 이벤트가 발생할 때 sysfs의 경로를 가리켜서 새로 연결된 장치의 정보를 참조할 수 있도록 한다. * [ProjectUtopia]에서는 3가지의 hotplug agent가 실행된다. * linux-hotplug agent : 기존의 리눅스 2.4에서 쓰이던 hotplug agent이다. 필요한 커널 모듈을 커널에 적재하며 필요한 쉘 스크립트를 실행한다. * udev agent : 새로 연결된 장치에 접근할 수 있는 장치노드를 사용자 설정에 따라 만든다. * hal agent : 새로 연결된 장치에 대한 정보를 dbus를 통해 시스템 전체에 알린다. * [http://freedesktop.org/software/dbus D-BUS Message Bus System] * 데스크탑 프로그램들을 위한 IPC(interprocess communication) 시스템 * dbus-daemon은 -system 모드와 -session 모드로 동작한다. * system모드로 시작한 데몬은 하드웨어 추가/제거 또는 프린트 큐 상태 같은 시스템 전체 메세지를 전달하며 모든 사용자가 접근 가능하다. * session모드로 시작한 데몬은 세션 데몬의 주소를 반환하며 그 세션에서 실행되는 프로그램 사이의 IPC메세지를 전달 할 수 있다. * c, c++, c#, java, python 등의 여러가지 언어 바인딩이 제공되어 진다. * [http://freedesktop.org/software/hal Hardware Abstraction Layer] * 다양한 OS상에서 각종 하드웨어의 상태를 동일한 인터페이스로 접근 가능하게 하는 Framework * dbus를 이용하여 현재 하드웨어의 연결,제거 또는 상태에 대한 정보를 얻어낼 수 있다. * 현재는 hal agent가 리눅스 2.6에서만 구현되어 있다. hal agent만 구현되면 다른 OS에서도 동작이 가능하다. http://ftp.mizi.com/~ganadist/hal-device-manager.png * Gnome Volume Manager * HAL에서 전달된 메세지를 파악해서 시스템에 연결된 디스크 장치를 자동으로 마운트, 또는 필요한 프로그램을 실행한다. http://ftp.mizi.com/~ganadist/gnome-volume-properties.png ---- CategoryProject