"udev"를 사용하는 것 외에 다른 대안이 있나요?

"udev"를 사용하는 것 외에 다른 대안이 있나요?

udev의 위대함을 이해하고 개발자들의 노력에 감사하지만 대안이 있는지 궁금합니다.

예를 들어, (하드웨어를 변경하지 않고) 내 시스템에서 가장 동일한 대부분의 장치 노드를 생성하는 시작 스크립트를 만드는 방법이 있어야 한다고 상상할 수 있습니다.

건너뛰고 싶은 이점이나 이유는 udev건너뛰기와 동일합니다 dbus. 이는 변경 사항을 늘려 복잡성을 줄이고 시스템을 보다 안전하게 설정하기 위한 것입니다.

답변1

최신 Linux 커널은 커널이 발견한 모든 장치 노드를 동적으로 생성하는 devtmpfs파일 시스템 (고대 파일 시스템과 혼동하지 말 것 devfs) 을 지원합니다. (사실 최신 udev버전은필요하다이는 udev가 더 이상 장치 노드를 생성하지 않고 기호 링크만 생성한다는 것을 알 수 있습니다. )

마찬가지로 펌웨어 로딩이 커널로 이동되었으므로 udev수행되는 유일한 작업은 모듈 로딩(모달 별칭에 따라)과 장치 권한 및 기타 udev 규칙 적용입니다.

따라서 이론적으로 완전히 단일화된 커널은시작하다udev 없이도 괜찮습니다.

그러나 여기서 진짜 문제는 나중에 일어나는 일입니다.

  1. 상당수의 사용자 공간 프로그램은 장치 데이터베이스를 유지 관리하기 위해 udev에 의존하며, 이는 libudev. 모든 다양한 udev 규칙이 메타데이터에 첨부되어 있습니다.

  2. /dev/disk/by-*udev 규칙은 또한 , /dev/mapper, /dev/input/by-path, 등 /dev/snd/by-path의 다양한 "지속적" 기호 링크를 유지합니다. 예를 들어 두 개의 디스크가 연결된 경우 첫 번째 디스크가 항상 sda동일 하다는 보장은 없지만 sdbudev는 심볼릭 링크가 /dev/disk/by-uuid계속해서 올바른 디스크를 가리키도록 보장합니다.

  3. 장치 노드는 이제 커널에 의해 생성되므로 더 이상 문제가 되지 않지만 일부 장치 유형은 동적으로 할당된 주/부 번호를 사용하기 시작했다는 점에 유의하는 것이 여전히 중요합니다. 따라서 현재 /dev/fuse10,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사용하는 경우 노드를 비활성화하는 것조차 어려울 수 있습니다 .systemdudevsystemd

내 조언은 지속하라는 것입니다 udev;)

답변3

몇 가지 옵션이 있습니다:

  • 부트로더의 일부로 실행되는 스크립트에 적절한 chmod, chown등의 명령 세트를 포함시키기만 하면 됩니다.ln
  • systemd-udevsystemd 프로젝트의 일부인 플러그 앤 플레이 관리자를 사용하십시오 .
  • 사용루트 다이어그램eudev, 이는 systemd의 포크였으며 systemd-udev이제는 그것과 크게 다릅니다.
  • 사용드완스vdev는 Jude Nelson이 개발한 플러그 앤 플레이 관리자이며 Devuan의 일부입니다.
  • mdev다른 답변과 달리 를 사용하십시오 . 이것은 Gentoo의 것이 아닙니다. 내장된 플러그 앤 플레이 관리자입니다.바쁜 상자.
  • 사용흡입 없음mdev이것은 Dimitris Papastamos가 개발한 플러그 앤 플레이 관리자입니다.
  • 사용로랑 베르코mdevd, 해당 구성은 BusyBox 와 호환되지만 mdev자체 소켓 처리 기능이 있으며 LISTEN 프로토콜을 이해하지 못합니다.

첫 번째를 제외한 모든 항목에는 장치에 대한 커널 알림 이벤트에 반응하는 방법을 설명하는 일련의 규칙이 필요합니다. 확실히.

/proc/sys/kernel/hotplugtwo mdevs와 같이 를 위해 설계된 프로그램을 가져와서 netlink 소켓에서 수신한 다음 생성하여 조정하고 직렬화할 수 있는 도구도 있습니다 .

답변4

이것은 오래되었지만 다른 사람들이 헛되이 검색할 수 있도록 여기에 내 솔루션을 캡처하고 싶었습니다.
udev를 피하는 것은 쉽지 않습니다. 구성에서 DEVTMPFS를 제외해도 커널이 /dev에 RAM 디스크를 마운트하고 채우는 것을 막지는 못합니다. 불행하게도 필요한 /dev/shm 및 /dev/pts 마운트 지점을 생성하지 않습니다. 필요한 것은 부팅 매개변수에 devtmpfs.mount=0을 추가하는 것입니다.

관련 정보