나는 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
하세요. 나중에 잠재적인 이상함과 오해를 피할 수 있습니다.