제가 이해한 바에 따르면 이 /sys
디렉토리에는 다양한 장치에 대한 정보를 설명하는 파일이 포함되어 있습니다. 이 디렉토리는 언제 어떻게 채워지나요?
예를 들어 여기에서 Linux 시스템을 탐색하면 이 /sys/bus/i2c/devices
디렉터리에 일부 I2C 장치용 파일이 포함되어 있음을 알 수 있습니다.
이 경우 해당 파일을 생성하는 것이 I2C 장치 드라이버/모듈의 작업입니까?
그렇다면 /dev
디렉토리와 관련하여 장치 드라이버/모듈이 해당 디렉토리도 채우나요? 미리 감사드립니다.
답변1
마운트된 파일 시스템 은 파일 시스템 /sys
입니다 . 소위 예이다sysfs
sysfs
가상 파일 시스템또는의사 파일 시스템. 이러한 파일 시스템은 실제로 물리적으로 저장된 파일을 나타내지 않기 때문에 "가상"이라고 합니다.합성파일이 아닌 데이터 구조에 대한 파일 형식의 보기입니다.
따라서 sysfs
커널 내부에 파일 같은 뷰를 결합한 파일 시스템이다.
각 드라이버/모듈의 임무는 커널 개체 모델에 자신과 해당 데이터 구조를 등록하여 커널의 나머지 부분이 이러한 데이터 구조를 "이해"할 수 있도록 하는 것입니다. 그러나 이 개체 모델 을 sysfs
. sysfs
장치별 정보에 대해서만 모듈은 sysfs
이를 표시하는 방법을 알려야 합니다.
가상 파일 시스템의 가장 잘 알려져 있고 가장 오래된 예는 일반적 으로 1984년 Unix V8에 마운트되는 procfs
파일 시스템 입니다 /proc
. procfs
그 이후로 1991년에 SVR4로 포팅되어 4.4BSD에 복사된 Plan 9의 보다 포괄적인 구현에 영감을 주었습니다. 흥미롭게도 FreeBSD와 OpenBSD는 모두 이 기능을 단계적으로 폐지했지만 procfs
macOS에서는 이 기능을 사용한 적이 없습니다.
리눅스는 procfs
1992년에 A를 받았습니다. 전통적으로 Linux에서는 procfs
프로세스 관련 데이터를 다루기보다는 다양한 데이터를 사용자 공간으로 내보내는 데 사용되었습니다. 그러나 오랫동안 이 데이터가 노출되는 방식을 관리하는 표준이 없었기 때문에 모든 종류의 다양한 스타일을 찾을 수 있었습니다. 일부 데이터는 사람이 쉽게 읽을 수 있지만 이해하기 어려운 방식으로 노출되었습니다. 기계가 읽을 수 있도록 구문 분석 및 기타 최적화를 위한 스크립트를 사용하십시오. 일부 복잡한 데이터는 하나의 큰 파일로 표시되고, 다른 데이터는 구성 요소당 하나의 파일이 있는 디렉터리로 표시됩니다.
sysfs
이러한 혼란을 정리하기 위해 도입된 이 기능은 데이터 표현 방식에 대한 엄격한 규칙을 가지고 있습니다.
에 관해서는 /dev
다른 이야기가 있습니다. 전통적으로 /dev
이는 루트 파일 시스템의 일반 디렉터리입니다. 시스템 관리자는 이 mknod
유틸리티를 사용하여 장치 노드를 생성할 책임이 있습니다. 시간이 지남에 따라 Unix 배포판은 시스템 관리자가 가장 중요한 장치 노드를 생성하기 위해 실행할 수 있는 미리 만들어진 스크립트를 제공하기 시작할 것이며 더 나아가 Unix 배포판의 설치 프로그램은 일반적으로 사용되는 장치 노드로 디렉터리를 미리 채울 것입니다. 시스템 관리자는 이를 수동으로 생성할 필요가 없습니다.
핫 플러그 가능 장치에 대한 지원이 계속 증가하고(특히 USB 및 Firewire의 도입으로) Linux가 숙련된 "시스템 관리자"가 종종 존재하지 않는 시장(예: 소비자 데스크탑)으로 점점 더 많이 이동함에 따라 가능한 모든 장치에 대한 모든 장치 노드는 장치를 연결하거나 분리할 때마다 시스템 관리자가 수동으로 생성하고 삭제하기 때문에 실행 가능한 옵션이 아닙니다.
따라서 devfs
커널이 검색한 각 장치에 대한 장치 노드를 자동으로 포함하는 가상 파일 시스템이 생성됩니다. 한동안 devfs
장치를 감지하고 스크립트를 실행하여 장치 노드를 생성하는 방식으로 플러그 앤 플레이를 처리하는 배포판별 접근 방식이 공존했습니다.
품질과 구현에 대해 일부 비판이 있었습니다 devfs
. 특히 커널 내에서 내부적으로 처리하기 위해 실제로 장치 노드를 생성하고 삭제할 필요가 없다는 비판이 있었는데, 이는 devfs
Linux 개발자가 작업을 시작하는 것과 동시에 이루어졌습니다.제거하다커널의 것들은 반드시 존재할 필요는 없습니다.
Linux 커널 개발의 원칙 중 하나는 "메커니즘은 커널에 있을 수 있고 정책은 사용자 공간에 있어야 합니다"이지만 devfs
이는 다음과 같은 이유로 이를 위반합니다.의사결정커널에서 "이 장치의 이름을 무엇으로 지정해야 합니까?"
그 결과, udev
개발되었습니다. udev
여러 구성요소로 구성되며, 가장 중요한 것은 데몬 sysfs
(및 기타 리소스)입니다.udev 이벤트) 시스템에서 사용할 수 있는 장치의 변경 사항을 파악한 다음 사용자 정의 가능한 세트를 사용합니다.규칙해당 장치 노드를 생성하고 삭제합니다. udev
필요한 정보는 이미 sysfs
다른 곳에서 사용할 수 있고 /dev
다시 일반 파일 시스템일 수 있으므로 커널의 특별한 지원이 필요하지 않습니다 .
오늘날 대부분의 Linux 배포판에서는 이를 사용 udev
하지만 (BusyBox의 포크 ) 또는 ( 경량 리소스가 제한된 시스템을 위해 설계된 BusyBox 기반의 최소 대안) udev
과 같이 개발된 대안 도 사용합니다. 이는 커널에서 사용자 공간으로 기능을 이동하는 데 따른 큰 이점입니다. 일반적으로 커널에는 기능의 인스턴스가 하나만 있을 수 있는 반면, 사용자 공간에서는 경쟁 구현이 있기 쉽습니다. 쉽게 교체할 수 있습니다. 일반적으로 경쟁은 더 나은 품질로 이어집니다.eudev
udev
mdev
udev
일반적으로 임시 파일 시스템은 다음과 같은 경우에 udev
사용됩니다 /dev
. 이렇게 하면 시스템 충돌이나 재부팅 후 오래된 장치 노드를 정리하는 것에 대해 걱정할 필요가 없습니다. 항상 빈 파일 시스템으로 시작하므로 udev
실제로 존재하는 장치의 장치 노드만 재창조되었습니다.
루트 파일 시스템을 사용하고 시작 스크립트 어딘가에서 콘텐츠를 삭제하거나 /dev
(부팅하려면 최소한 몇 개의 작업자 장치 노드가 필요하기 때문에 까다롭지만 /dev
) 사용할 수 있습니다 tmpfs
(메모리에만 존재함). 을 사용해도 같은 문제가 발생합니다.
udev
이는 작동 하기 위해 적어도 일부 장치 노드가 필요 udev
하지만 udev
장치 노드를 생성하는 장치 노드인 경우 작업을 시작하는 방법에 대한 부트스트래핑 문제를 해결하기 위해 devtmpfs
개발되었습니다 .
이제 어떤 의미에서는 devtmpfs
와 매우 유사하므로 왜 이것이 허용되고 허용되지 않는지 devfs
자문할 수 있습니다 . 두 가지 중요한 차이점이 있습니다. 힌트는 이미 " "라는 이름에 있습니다. 구축: 이제 문제가 해결되었으므로 RAM에서 파일을 표현하는 방법을 다시 고안하려는 이유는 무엇입니까? (이것은 이미 에 존재하는 많은 기능을 복제한다는 또 다른 비판입니다 .)devtmpfs
devfs
devtmpfs
devtmpfs
tmpfs
tmpfs
devfs
tmpfs
또 다른 차이점은 devtmpfs
장치 노드를 생성하는 방법이 매우 간단하고 더 복잡한 것은 여기에 맡긴다는 것입니다 udev
. 예를 들어 devtmpfs
장치에 대한 복잡한 명명 규칙을 구현하려고 시도하지 않고 udev
사용자가 될 수 있는 매우 간단한 이름만 사용합니다. 정의됨 규칙 세트는 사용자 정의 이름에서 커널 정의 이름으로의 기호 링크를 생성합니다.
따라서 최신 Linux 시스템에서는 일반적으로 일부 베어본 장치 노드를 생성하는 devtmpfs
설치가 있습니다. 여기서 설치하면 커널 내부를 파일로 노출하고 udev 이벤트를 통해 커널로부터 데이터를 수신하고 링크를 생성하는 사용자 공간에서 실행됩니다. 사용자 정의 규칙에 따라 이러한 베어본 장치에 적용됩니다./dev
sysfs
/sys
udev
sysfs
하나 있다많은게다가 이것은 10,000km에 대한 개요입니다.
답변2
/sys
내용은 커널 파일 시스템 드라이버에 의해 채워집니다 sysfs
. 일부 일반 노드는 드라이버나 장치가 등록될 때 자동으로 생성되고, 일부 드라이버 및 장치별 노드는 장치 드라이버 자체에 의해 생성됩니다.
/dev
대부분의 최신 시스템의 콘텐츠는 udev
일반적으로 패키지의 일부인 사용자 공간의 프레임워크에 의해 유지 됩니다 systemd
. udev
임베디드 시스템의 경우 다음과 같은 다른 옵션이 있습니다 mdev
. 그러나 커널은 기능을 줄이고 기본 devtmpfs
역할을 하는 파일 시스템에 대한 지원 도 제공합니다.udev