울리히 당겔(Ulrich Dangel)이 설명합니다.devtmpfs와 udev의 차이점은 좋습니다.
sysfs는 어떻습니까?
내가 아는 한, 커널은 sysfs를 사용하여 udev에서 사용할 장치 노드를 사용자 공간으로 내보냅니다. devtmpfs와 sysfs는 동일합니까? 그렇다면 왜 서로 다른 이름을 사용하는 걸까요? 그렇지 않다면 sysfs와 devtmpfs의 실제 차이점은 무엇입니까?
답변1
커널은 sysfs를 사용하여 udev에서 사용할 수 있도록 장치 노드를 사용자 공간으로 내보냅니다.
아니요. Sysfs에는 장치 노드가 포함되어 있지 않습니다. Sysfs에는 주로 장치 정보를 제공하는 파일과 프로세스가 장치 작동 방식을 제어할 수 있는 일부 파일이 포함되어 있습니다. 그러나 대부분의 장치는 sysfs에서 제공하는 기능을 통해 사용할 수 없습니다.
하드 드라이브를 예로 들어보겠습니다. 아래 어딘가에 디렉터리가 있으며 /sys/devices
, 경로는 컴퓨터에 연결된 방식에 따라 달라집니다(예: /sys/devices/pci0000:00/…
컴퓨터의 기본 PCI 버스에 연결된 컨트롤러에 연결된 디스크의 경우). 이 디렉토리에서는 크기, 제거 가능 여부, 전원 상태 등과 같은 다양한 정보를 찾을 수 있습니다. 파티션을 위한 하위 디렉터리도 있습니다. 그러나 디스크 내용에 대한 액세스를 제공하는 내용은 없습니다. 의 다른 곳에는 해당 디스크에 해당하는 디렉토리( in , in 등) /sys
에 대한 심볼릭 링크가 있습니다. 하지만 여전히 디스크 내용에 액세스할 수 없습니다./sys/block
/sys/class/block
에서 /dev
디스크 항목은 특수 파일입니다.블록 장치. 이 파일을 사용하면 프로세스가 디스크의 내용을 읽고 쓸 수 있습니다. (디스크의 경우 일반적으로 이런 일이 발생하지 않습니다. 대신 디스크나 파티션의 내용이 마운트되어 커널이 장치에 액세스하지만 프로세스는 액세스하지 않습니다.)
장치 파일은 다음을 통해 콘텐츠를 읽고 쓰는 것 이외의 일부 작업을 허용합니다.I/W 제어. sysfs가 제공하는 모든 정보 및 제어 인터페이스는 장치 파일의 ioctl을 통해 사용할 수 있습니다. 그러나 이는 다음과 같은 여러 가지 이유로 불편합니다.
- 권한은 의 별도 파일을 통해
/sys
세부적으로 설정할 수 있습니다 . 장치당 파일이 하나만 있으면/dev
전부 아니면 전무입니다. - 애플리케이션은 개별 파일을 쉽게 읽고 쓸 수 있습니다.
cat
또는 을 사용하면 됩니다echo
. ioctl을 사용하는 것은 훨씬 더 어렵습니다. 쉘 인터페이스가 없으며 일반적으로 다른 고급 언어에는 인터페이스가 없습니다. - ioctl을 사용하면 명령은 이름이 아닌 숫자로 인코딩되어야 하며 인수 형식은 바이너리 수준에서 정의되어야 합니다. 이름과 간단한 텍스트 형식을 사용하면 소프트웨어 작성이 더 쉬워집니다.
다른 방향으로 살펴보면, sysfs의 파일을 통해 장치 콘텐츠에 대한 액세스가 제공될 수 있습니다. 그러나 이를 위해서는 커널에서 추가 작업이 필요합니다. sysfs는 주로 작은 파일과 심볼릭 링크를 제공하도록 설계되었으며 ioctl
기존 애플리케이션이 기대하는 지원 은 없습니다 . 기존 장치 유형을 지원하도록 sysfs를 확장하는 데 큰 이점이 없다고 생각하므로 장치 파일은 계속 존재합니다.
Sysfs는 커널에 의해 자동으로 채워지며 실제 사용 가능한 장치를 실시간으로 반영합니다. sysfs에서 파일의 의미는 파일을 제공하는 드라이버가 선택하는 경로에서 나옵니다. /dev
다르게 작동합니다. 파일의 의미는 장치 파일 유형(블록 또는 문자)과 주요 및 보조 번호( ls -l
나열된 것이며 장치의 파일 크기가 아님)에서 나옵니다. 전통적으로 /dev
이는 시스템 설치 중에 생성된 장치 파일을 사용하여 정적이었지만 장치가 핫 플러그 가능한 경우에는 적용성이 떨어지므로 /dev
연결된 장치의 동적 특성을 실시간으로 반영해야 합니다.
Linux는 동적으로 많은 반복을 거쳤습니다 /dev
. 리눅스 2.4에는파일 시스템 개발, 여기서 커널은 연결된 장치를 반영하는 항목을 자동으로 생성합니다. 하지만 그건너무 좋지 않아, 장치 이름 지정 및 권한 정책을 커널에 하드코딩했기 때문에 userland 프로그램으로 대체되었습니다.우데브관리 정책 및 /dev
간단한 tmpfs 파일 시스템(커널에 특별한 의미가 없는 메모리 내 파일 시스템)입니다. 그런 다음 devfs 부분이 다시 나타납니다.개발자 파일 시스템, 이는 사용 가능한 장치에 대한 항목이 커널에 의해 자동으로 생성되지만 udev는 그 위에 원하는 모든 관리를 수행하는 tmpfs의 인스턴스입니다.
답변2
커널 문서 파일에서시스템파일시스템.txt:
sysfs는 원래 ramfs를 기반으로 한 ram 기반 파일 시스템입니다. 커널 데이터 구조, 해당 속성 및 이들 간의 링크를 사용자 공간으로 내보내는 방법을 제공합니다.
에서메시지 제출커널 소스 코드에:
Devtmpfs를 사용하면 드라이버 코어 장치를 등록하기 전에 커널 초기화 중에 커널이 devtmpfs라는 tmpfs 인스턴스를 생성할 수 있습니다. 기본/보조가 있는 각 장치는 devtmpfs에 장치 노드를 제공합니다.
기본적으로 장치 및 장치 이름에 대한 정보 및 통계를 sysfs
설치 하고 포함합니다./sys
devtmpfs
/dev
모든 장치에 대해 특수 장치 파일이 설치 되고 포함됩니다.