커널이 initramfs의 /dev에 있는 항목을 삭제합니까?

커널이 initramfs의 /dev에 있는 항목을 삭제합니까?

나는 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/devtmpfs/dev

hda귀하의 및 항목이 및 항목 hdaX으로 대체되었음을 알게 될 것입니다 . 또는 확인하여 드라이브 에 할당된 이름을 확인하세요 .sdasdaX/proc/devices/proc/partitionsudev

때로는 다음과 같은 빠르고 더러운 솔루션이 fdisk -l /dev/[sh]d[a-z]도움이 될 수 있습니다(각 유형의 디스크가 26개 미만인 경우 더 잘 작동함).

그건 그렇고, 에서 사용하는 명명 체계 udev는 표준화되어 있으며 정적은 /dev규칙을 따르는 것보다 더 나쁠 수 있습니다. udev라고 생각 한다면 /dev/sda, 그렇게 하세요. 길을 따라 잠재적인 기이함과 오해를 피할 수 있습니다.

관련 정보