udev
udev개발자 | 그레그 크로아-하트만과 케이 시버스 |
---|---|
초기 릴리즈 | 2003년 11월, | 전(
안정된 릴리스 | 251(2022년 5월 [±][1] | , 전(
저장소 | |
기입처 | C |
운영 체제 | Linux 커널 |
유형 | 디바이스 노드 |
면허증. | GPLv2 |
웹 사이트 | 공식 웹사이트 |
udev(userspace /dev)는 Linux 커널용 디바이스 매니저입니다.devfsd와 핫플러그의 후계자로서 udev는 주로 디바이스 노드를 관리하며,/dev 디렉토리동시에 udev는 하드웨어 디바이스가 시스템에 추가되거나 시스템에서 삭제될 때 발생하는 모든 사용자 공간 이벤트도 처리합니다.특정 디바이스에서 필요한 펌웨어 로딩도 포함합니다.
근거
하드웨어의 추상 인터페이스를 나머지 소프트웨어에 제공하는 운영 체제의 커널입니다.단일 커널인 Linux 커널에서는 디바이스 드라이버가 Linux 커널의 일부이며 소스 [2]코드의 절반 이상을 차지합니다.하드웨어에는 시스템콜 또는 디바이스 노드를 통해 접근할 수 있습니다.
사용자 친화적인 방법으로 핫플러그 대응 주변기기를 처리할 수 있도록 이러한 핫플러그 대응 하드웨어 디바이스를 모두 처리하는 부분을 커널에서 사용자 공간에서 실행 중인 데몬으로 넘겼습니다.사용자 공간에서 실행하는 것은 보안 및 안정성을 위한 것입니다.
설계.
디바이스 드라이버는 Linux 커널의 일부입니다.이 커널에서는 디바이스 검출, 디바이스 상태 변경 검출 및 이와 유사한 로우레벨 하드웨어 기능이 주요 기능에 포함됩니다.디바이스 드라이버를 커널에서 메모리에 로드한 후 검출된 이벤트가 사용자 공간 데몬 udevd로 전송됩니다.이러한 모든 이벤트를 포착하고 다음에 무슨 일이 일어날지 결정하는 것은 디바이스 매니저 udevd입니다.이를 위해 udevd에는 매우 포괄적인 구성 파일 세트가 있으며 컴퓨터 관리자가 필요에 따라 모든 파일을 조정할 수 있습니다.
- 새로운 스토리지 디바이스가 USB 경유로 접속되었을 경우, 커널에 의해 udevd가 통지되고, 그 자체가 udisksd-daemon에 통지된다.이 데몬은 파일 시스템을 마운트할 수 있습니다.
- 새로운 이더넷케이블이 이더넷 NIC에 접속되어 있는 경우 커널에 의해 udevd가 통지되고 그 자체가 Network Manager-daemon에 통지됩니다.Network Manager-daemon은 해당 NIC의 dhclient를 시작하거나 수동 구성에 따라 구성할 수 있습니다.
그 복잡성으로 인해 애플리케이션 작성자는 하드웨어 지원 로직을 재실장해야 합니다.일부 하드웨어 디바이스에서는 사용을 준비하기 위해 특권 도우미 프로그램도 필요합니다.이러한 명령어는 Unix 권한 모델을 사용하여 표현하기 어려운 방법으로 자주 호출해야 합니다(예를 들어 사용자가 비디오콘솔에 로그인한 경우에만 무선 네트워크에 가입할 수 있습니다).응용 프로그램 작성자는 setuid 바이너리를 사용하거나 서비스 데몬을 실행하여 자체 액세스 제어 및 권한 분리를 제공하며,[3] 매번 보안 취약점이 발생할 수 있습니다.
HAL은 이 문제를 해결하기 위해 생성되었지만 현재 대부분의 Linux 배포에서는 사용되지 않습니다.
개요
/dev 디렉토리의 디바이스 노드가 정적 파일 세트였던 기존 Unix 시스템과 달리 Linux udev 디바이스 매니저는 시스템에 실제로 존재하는 디바이스의 노드만 동적으로 제공합니다.devfs는 유사한 기능을 제공하지만 Greg Kroah-Hartman은 devfs보다 udev를 선호하는 여러 이유를 들었습니다[4].
- udev는 영구적인 디바이스 이름을 지원합니다.이것은 예를 들어 디바이스가 시스템에 접속되는 순서 등에 의존하지 않습니다.기본 udev 설정에서는 스토리지 디바이스의 영구 이름을 제공합니다.모든 하드 디스크는 고유한 파일 시스템 ID, 디스크 이름 및 연결된 하드웨어의 물리적 위치로 인식됩니다.
- udev는 devfs의 커널 공간과 달리 완전히 사용자 공간에서 실행됩니다.그 결과 udev는 명명 정책을 커널에서 이동시켜 노드가 생성되기 전에 디바이스 속성에서 디바이스 이름을 구성하기 위해 임의의 프로그램을 실행할 수 있습니다.여기서는 프로세스 전체가 중단될 수 있으며 우선순위가 낮아집니다.
udev는 전체적으로 다음 세 부분으로 나뉩니다.
- 디바이스 정보에 액세스할 수 있는 라이브러리 libudev. systemd 183 소프트웨어 [5]번들에 통합되었습니다.
- 가상 /dev를 관리하는 사용자 공간 데몬 udevd.
- 진단용 관리 명령줄 유틸리티 udevadm.
시스템은 netlink 소켓을 통해 커널에서 콜을 수신합니다.이전 버전에서는 핫플러그를 사용하여 이 목적을 위해 /etc/hotplug.d/default에 링크를 추가합니다.
작동
udev는 Linux 시스템에서 데몬으로 동작하는 범용 디바이스 매니저로 새로운 디바이스가 초기화되거나 디바이스가 시스템에서 삭제되었을 때 커널이 송신하는 이벤트를 (넷링크소켓 경유로) 리슨합니다.udev 패키지에는 이벤트 내보내기 값 및 검출된 디바이스 속성과 일치하는 광범위한 규칙 세트가 포함되어 있습니다.일치하는 규칙에 따라 디바이스 노드의 이름이 지정 및 생성되고 구성된 프로그램이 실행되어 디바이스를 설정 및 구성할 수 있습니다.
udev 규칙은 커널 서브시스템, 커널 디바이스 이름, 디바이스의 물리적 위치 또는 디바이스의 일련 번호와 같은 속성과 일치할 수 있습니다.또, 외부 프로그램에 정보를 요구해 디바이스에 이름을 붙이거나, 시스템이 디바이스를 검출하는 순서에 관계없이 항상 같은 커스텀명을 지정할 수도 있습니다.
과거에는 Linux 시스템에서 udev를 사용하는 일반적인 방법은 소켓을 통해 HAL로 이벤트를 전송하도록 하는 것이었습니다. HAL은 더 많은 디바이스 고유의 액션을 수행합니다.예를 들어 HAL은 D-Bus IPC 시스템상의 브로드캐스트메시지를 모든 관련 프로세스에 발행함으로써 시스템에서 실행되고 있는 다른 소프트웨어에 새로운 하드웨어가 도착했음을 통지합니다.이와 같이 GNOME이나 K Desktop Environment 3 등의 데스크톱에서 파일 브라우저를 실행하여 새로 연결된 USB 플래시 드라이브 및 SD [6]카드의 파일 시스템을 참조할 수 있습니다.
2011년 중반까지 HAL은 KDE, GNOME[7], Xfce[8] 데스크톱 환경뿐만 아니라 대부분의 Linux 배포판에서도 더 이상 사용되지 않게 되었습니다.이전에 HAL에 구현되었던 기능은 udev 자체에 통합되거나 udisk 및 upower와 같은 별도의 소프트웨어로 이동되었습니다.
- udev는 Linux 디바이스 트리에 대한 낮은 수준의 액세스를 제공합니다.프로그램에서 장치 및 해당 속성을 열거하고 장치가 들어오고 나갈 때 알림을 받을 수 있습니다.
- dbus는 프로그램이 서로 안전하고 안정적으로, 높은 수준의 객체 지향 프로그래밍 인터페이스와 통신할 수 있도록 하는 프레임워크입니다.
- udisks(이전의 DeviceKit-disks)는 libudev 및 기타 커널 인터페이스 위에 위치하며 스토리지 장치에 고급 인터페이스를 제공하며 dbus를 통해 애플리케이션에 액세스할 수 있는 데몬입니다.
- upower(이전의 DeviceKit-power)는 libudev 및 기타 커널인터페이스 위에 있는 데몬으로 전원 관리에 대한 고급 인터페이스를 제공하며 dbus를 통해 애플리케이션에 액세스할 수 있습니다.
- Network Manager는 libudev 및 기타 커널 인터페이스(및 기타 데몬) 위에 배치되어 네트워크 구성 및 설정에 대한 고급 인터페이스를 제공하며 [9]dbus를 통해 애플리케이션에 액세스할 수 있습니다.
udev는 커널로부터 메시지를 수신하여 Network Manager 등의 서브시스템 데몬에 전달합니다.응용 프로그램은 D-Bus를 통해 Network Manager와 통신합니다.
HAL은 더 이상 사용되지 않으며 레거시 코드에서만 사용됩니다.Ubuntu 10.04는 HAL 미탑재.처음에 새로운 데몬 DeviceKit는 HAL의 특정 측면을 대체할 계획이었지만 2009년 3월에 DeviceKit는 udev에 udev-extras라는 동일한 코드를 패키지로 추가하는 것을 선호하여 폐지되었으며, 일부 기능은 현재 udev repair로 이동되었습니다.
역사
udev는 Linux 2.5에서 도입되었습니다.Linux 커널 버전 2.6.13에서는 uevent 인터페이스의 새 버전이 도입 또는 업데이트되었습니다.새로운 버전의 udev를 사용하는 시스템은 udev를 사용하지 않도록 설정하고 디바이스 액세스에 기존의 /dev 디렉토리를 사용하지 않는 한 2.6.13보다 오래된 커널에서 부팅되지 않습니다.
2012년 4월에 udev의 코드베이스가 systemd 소스 트리에 병합되어 systemd 183이 udev를 [5][10][11]포함하는 첫 번째 버전이 되었습니다.2012년 10월, Linus Torvalds는 펌웨어 로딩과 관련된 udev 유지보수 및 버그 수정에 대한 Kay Sivers의 접근방식을 다음과 같이 [12]비판했습니다.
네, 커널에서 실행하는 것이 "더 견고"합니다.하지만 장난은 치지 말고, 거짓말은 그만해.관리자에 대한 배려가 있기 때문에, 그리고 퇴행은 쉽게 대처할 수 있는 것이 아니라는 것을 알기 때문에, 한층 더 견고합니다.만약 무언가가 고장났을 때, 그 파손에 대한 올바른 해결책이 무엇인지 모른다면, 우리는 고장난 것을 되돌립니다.그래, 핵심에서 하는 게 더 낫지사용자 공간에서 펌웨어를 로드할 수 없기 때문이 아닙니다.하지만 그렉이 포기한 이후로 udev 유지보수가 나빠졌기 때문에요.
2012년 Gentoo Linux 프로젝트는 systemd 아키텍처에 의존하지 않기 위해 systemd의 udev 코드베이스 포크를 만들었습니다.결과 포크는 eudev라고 불리며 systemd 없이 udev 기능을 사용할 수 있습니다.프로젝트의 명확한 목표는 Linux 배포 또는 초기화 [13]시스템으로부터 eudev를 독립시키는 것입니다.Gentoo 프로젝트는 다음과 [14]같이 eudev에 대해 설명합니다.
eudev는 OpenRC 및 Upstart와 같은 기존 소프트웨어, 오래된 커널, 다양한 툴 체인 및 사용자와 다양한 배포에 필요한 기타 모든 것과의 호환성을 향상시키는 것을 목표로 하는 systemd-udev의 포크입니다.
2014년 5월 29일 [15]udev를 통한 펌웨어 로딩 지원이 systemd에서 해제되었으며, 이는 펌웨어 로딩이 커널의 태스크로 결정되었기 때문입니다.이틀 후 Lennart Poetering은 kdbus가 udev에 의해 이용되기 시작할 때까지 이 패치를 연기할 것을 제안했습니다.이 시점에서 계획은 udev를 전환하여 kdbus를 기본 메시징 시스템으로 사용하고 사용자 공간에서 사용자 공간으로 netlink 기반 [16]전송을 제거하는 것이었습니다.
작가들
udev는 Greg Kroah-Hartman과 Kay Siervers가 Dan Stekloff 등의 많은 도움을 받아 개발했습니다.
레퍼런스
- ^ "Release v251". 2022-05-21. Retrieved 2022-05-24.
- ^ Marti, Don. "Are top Linux developers losing the will to code?". ComputerworldUK. Retrieved 2016-06-19.
- ^ Pennington, Havoc (2003-07-10), Making Hardware Just Work
- ^ Greg Kroah-Hartman. "udev and devfs - The final word". Archived from the original (Plain text) on 2011-07-09. Retrieved 2008-01-24.
- ^ a b c "systemd/systemd". GitHub. Retrieved 2016-08-21.
- ^ "Dynamic Device Management in Udev" (PDF). Linux Magazine. 2006-10-01. Retrieved 2008-07-14.
- ^ "HALRemoval". 2011-06-28. Retrieved 2011-09-13.
- ^ "Thunar-volman and the deprecation of HAL in Xfce". 2010-01-17. Retrieved 2017-12-25.
- ^ Lennart Poettering (2010-04-25). "Relationship between udev, hal, Dbus and DeviceKit?".
- ^ Sievers, Kay (2012-04-03). "The future of the udev source tree". linux-hotplug (Mailing list). Retrieved 2013-05-22.
- ^ Sievers, Kay, "Commit importing udev into systemd", systemd, retrieved 2013-05-22
- ^ Linus Torvalds (2012-10-03). "Re: udev breakages". linux-kernel (Mailing list). Retrieved 2014-10-28.
- ^ "gentoo/eudev – README.md". Retrieved 2017-12-25.
- ^ "Gentoo Linux Projects – Gentoo eudev project". Retrieved 2017-12-25.
- ^ "[systemd-devel] [PATCH] Drop the udev firmware loader". 2014-05-29.
- ^ "[systemd-devel] [PATCH] Drop the udev firmware loader". 2014-05-31.