udev의 위대함을 이해하고 개발자들의 노력에 감사하지만 대안이 있는지 궁금합니다.
예를 들어, (하드웨어를 변경하지 않고) 내 시스템에서 가장 동일한 대부분의 장치 노드를 생성하는 시작 스크립트를 만드는 방법이 있어야 한다고 상상할 수 있습니다.
건너뛰고 싶은 이점이나 이유는 udev
건너뛰기와 동일합니다 dbus
. 이는 변경 사항을 늘려 복잡성을 줄이고 시스템을 보다 안전하게 설정하기 위한 것입니다.
답변1
최신 Linux 커널은 커널이 발견한 모든 장치 노드를 동적으로 생성하는 devtmpfs
파일 시스템 (고대 파일 시스템과 혼동하지 말 것 devfs
) 을 지원합니다. (사실 최신 udev
버전은필요하다이는 udev가 더 이상 장치 노드를 생성하지 않고 기호 링크만 생성한다는 것을 알 수 있습니다. )
마찬가지로 펌웨어 로딩이 커널로 이동되었으므로 udev
수행되는 유일한 작업은 모듈 로딩(모달 별칭에 따라)과 장치 권한 및 기타 udev 규칙 적용입니다.
따라서 이론적으로 완전히 단일화된 커널은시작하다udev 없이도 괜찮습니다.
그러나 여기서 진짜 문제는 나중에 일어나는 일입니다.
상당수의 사용자 공간 프로그램은 장치 데이터베이스를 유지 관리하기 위해 udev에 의존하며, 이는
libudev
. 모든 다양한 udev 규칙이 메타데이터에 첨부되어 있습니다./dev/disk/by-*
udev 규칙은 또한 ,/dev/mapper
,/dev/input/by-path
, 등/dev/snd/by-path
의 다양한 "지속적" 기호 링크를 유지합니다. 예를 들어 두 개의 디스크가 연결된 경우 첫 번째 디스크가 항상sda
동일 하다는 보장은 없지만sdb
udev는 심볼릭 링크가/dev/disk/by-uuid
계속해서 올바른 디스크를 가리키도록 보장합니다.장치 노드는 이제 커널에 의해 생성되므로 더 이상 문제가 되지 않지만 일부 장치 유형은 동적으로 할당된 주/부 번호를 사용하기 시작했다는 점에 유의하는 것이 여전히 중요합니다. 따라서 현재
/dev/fuse
10,228 및 10,229가 있더라도/dev/hpet
~ 할 것이다재부팅할 때마다 다른 숫자가 있으므로devtmpfs
(이전 시스템의 경우) uevent를 수신하는 프로그램은 다음 중 하나입니다.필수의.
mdev
물론 이러한 작업 중 상당수는 다른 프로그램을 사용하여 쉽게 수행할 수 있습니다. 내 요점은 정적 /etc/MAKEDEV
스크립트가 더 이상 작동하지 않는다는 것입니다 ...
따라서 기본적으로 시작 복잡성과 관련하여 udev는 아마도적어도당신의 우려.
답변2
몇 가지 대안이 있습니다 udev
. Gentoo는 다음과 같은 도구를 사용할 수 있는 것 같습니다.mdev
. 또 다른 옵션은 udev
이전 버전을 사용해 보는 것입니다 devfsd
. 마지막으로 언제든지 mknod
.
후자의 경우 다른 옵션처럼 임시 파일 시스템이 아닌 디스크에 노드를 생성할 수 있으므로 시작 시 모든 것을 생성할 필요가 없습니다. 물론 새 하드웨어(예: USB 스틱)를 연결하면 장치 파일을 즉시 생성할 수 있는 유연성이 상실됩니다. 나는 오늘날의 표준 접근 방식이 합리적으로 필요한 모든 장치 파일 /dev
(예: 많은 장치 파일)을 이미 생성하는 것이라고 믿습니다.
물론 현대 배포판에서는 이러한 방법을 사용하는 것이 상당히 어려울 수 있습니다. 젠투 위키에서는 mdev
(젠투 외부는 물론이고) 데스크톱 환경을 사용하는 데 따른 어려움을 언급합니다. 마지막 devfsd
버전은 2002년 버전이었는데 최신 커널에서 작동할지 여부는 알 수 없습니다. 수동으로 노드를 생성하는 것이 아마도 가장 실행 가능한 접근 방식일 수 있지만, 특히 distos ( 이제 distos의 일부로 강력한 종속성을 나타냄)를 udev
사용하는 경우 노드를 비활성화하는 것조차 어려울 수 있습니다 .systemd
udev
systemd
내 조언은 지속하라는 것입니다 udev
;)
답변3
몇 가지 옵션이 있습니다:
- 부트로더의 일부로 실행되는 스크립트에 적절한
chmod
,chown
등의 명령 세트를 포함시키기만 하면 됩니다.ln
systemd-udev
systemd 프로젝트의 일부인 플러그 앤 플레이 관리자를 사용하십시오 .- 사용루트 다이어그램
eudev
, 이는 systemd의 포크였으며systemd-udev
이제는 그것과 크게 다릅니다. - 사용드완스
vdev
는 Jude Nelson이 개발한 플러그 앤 플레이 관리자이며 Devuan의 일부입니다. mdev
다른 답변과 달리 를 사용하십시오 . 이것은 Gentoo의 것이 아닙니다. 내장된 플러그 앤 플레이 관리자입니다.바쁜 상자.- 사용흡입 없음
mdev
이것은 Dimitris Papastamos가 개발한 플러그 앤 플레이 관리자입니다. - 사용로랑 베르코
mdevd
, 해당 구성은 BusyBox 와 호환되지만mdev
자체 소켓 처리 기능이 있으며 LISTEN 프로토콜을 이해하지 못합니다.
첫 번째를 제외한 모든 항목에는 장치에 대한 커널 알림 이벤트에 반응하는 방법을 설명하는 일련의 규칙이 필요합니다. 확실히.
/proc/sys/kernel/hotplug
two mdev
s와 같이 를 위해 설계된 프로그램을 가져와서 netlink 소켓에서 수신한 다음 생성하여 조정하고 직렬화할 수 있는 도구도 있습니다 .
답변4
이것은 오래되었지만 다른 사람들이 헛되이 검색할 수 있도록 여기에 내 솔루션을 캡처하고 싶었습니다.
udev를 피하는 것은 쉽지 않습니다. 구성에서 DEVTMPFS를 제외해도 커널이 /dev에 RAM 디스크를 마운트하고 채우는 것을 막지는 못합니다. 불행하게도 필요한 /dev/shm 및 /dev/pts 마운트 지점을 생성하지 않습니다. 필요한 것은 부팅 매개변수에 devtmpfs.mount=0을 추가하는 것입니다.