나는 initramfs 이미지에서 부팅되는 완전 맞춤형 최소 임베디드 Linux(바닐라, 3.3.8, i486, Vortex86dx) 시스템을 가지고 있습니다. 표준 배포 스크립트는 사용되지 않으며 초기화를 수행하는 단일 rcS 파일만 사용됩니다.
나는 /dev/hda1과 /dev/hda2에 두 개의 파티션이 있는 IDE 플래시 디스크를 가지고 있습니다.
이는 고정 시스템을 위한 최소 임베디드 배포판이므로 /dev/hda1 및 /dev/hda2를 포함하는 정적 /dev 디렉토리가 있고 UDEV는 없습니다.
init가 rcS를 호출하는 시점에서 /dev/hda1 항목은 더 이상 존재하지 않습니다. 이 시점에서는 다른 스크립트, 사용자 응용 프로그램 또는 데몬이 실행되지 않았습니다. /dev/hda1나타납니다커널에 의해 삭제(?)
개발 프로세스 중에 NFS 루트 파일링 시스템을 통해 대상을 부팅하면 이와 동일한 문제가 발생하지 않습니다.
나는 Buildroot를 사용하여 device_table_dev.txt 파일을 통해 /dev 디렉토리를 생성합니다. 예를 들어
# IDE Devices
/dev/hda b 640 0 0 3 0 0 0 -
/dev/hda b 640 0 0 3 1 1 1 4
Buildroot 출력/이미지에서 rootfs.tar.gz를 검사했습니다. /dev 디렉토리에는 /dev/hda1이 포함되어 있습니다:
brw-r----- 1 root root 3, 0 Jul 2 13:44 hda
brw-r----- 1 root root 3, 1 Jul 2 13:44 hda1
brw-r----- 1 root root 3, 2 Jul 2 13:44 hda2
brw-r----- 1 root root 3, 3 Jul 2 13:44 hda3
brw-r----- 1 root root 3, 4 Jul 2 13:44 hda4
대상의 부팅 후 디렉터리 목록(rcS 내 스크립트 상단에서 수행됨)은 다음과 같습니다.
brw-r----- 1 root root 3, 0 Jul 2 12:44 hda
brw-r----- 1 root root 3, 2 Jul 2 12:44 hda2
brw-r----- 1 root root 3, 3 Jul 2 12:44 hda3
brw-r----- 1 root root 3, 4 Jul 2 12:44 hda4
/dev/hda1이 없습니다. /dev/hda2는 동일한 디스크에 있는 파티션이지만 여전히 존재합니다. 이상한.
Busybox 유틸리티 "mdev -s"를 실행하면 대상에서/dev/hda1을 복원하고 정상적으로 작동합니다. 예를 들어 마운트할 수 있어요
전에 이런 행동을 본 사람이 있나요?
커널이 /dev에서 항목을 삭제합니까?
답변1
하위 시스템 은 부팅 시 파일 시스템을 udev
생성하고 마운트합니다 . 장치가 감지되면 커널이 콘텐츠를 채웁니다. 가상 메모리에 상주 하므로 영구적이지 않으므로 재부팅 후에도 변경 사항이 유지되지 않습니다. 이미 가지고 있더라도 새 파일 시스템을 마운트하면 디렉토리가 숨겨지고 모든 장치 특수 항목이 삭제된 것처럼 보입니다. 그렇지 않았지만 최종 결과는 동일합니다. 특별 상품이 예상한 곳에 있지 않습니다.tmpfs
/dev
tmpfs
/dev
hda
귀하의 및 항목이 및 항목 hdaX
으로 대체되었음을 알게 될 것입니다 . 또는 확인하여 드라이브 에 할당된 이름을 확인하세요 .sda
sdaX
/proc/devices
/proc/partitions
udev
때로는 다음과 같은 빠르고 더러운 솔루션이 fdisk -l /dev/[sh]d[a-z]
도움이 될 수 있습니다(각 유형의 디스크가 26개 미만인 경우 더 잘 작동함).
그건 그렇고, 에서 사용하는 명명 체계 udev
는 표준화되어 있으며 정적은 /dev
규칙을 따르는 것보다 더 나쁠 수 있습니다. udev
라고 생각 한다면 /dev/sda
, 그렇게 하세요. 길을 따라 잠재적인 기이함과 오해를 피할 수 있습니다.