Linux에서 /dev와 /proc/devices의 출력이 완전히 다른 이유

Linux에서 /dev와 /proc/devices의 출력이 완전히 다른 이유

내가 아는 한:

  • 하나의 드라이버는 하나 이상의 "장치"와 관련될 수 있습니다.

  • /dev 파일 아래의 파일은 이러한 장치를 나타냅니다. 드라이버에는 메이저 번호가 있고 각 장치에도 마이너 번호가 있으므로 (메이저, 마이너) 하나의 장치를 식별합니다.

  • /proc/devices에는 장치도 나열되어 있습니다.

내가 아는 것이 사실이라면:

/dev와 /proc/devices의 출력이 완전히 다른 이유는 무엇입니까? dev에는 장치 이름, 메이저 번호, 마이너 번호가 있습니다. 그리고 /proc/devices에는 메이저 번호와 장치 이름이 있지만 마이너 번호는 없습니다. 이 두 목록이 동일한 주요 번호에 대해 완전히 다른 출력을 표시하는 이유는 무엇입니까?

예를 들어, ls -l /dev에서 다음 줄을 보십시오.

crw------- 1 root root     10, 235 Sep 19 21:40 autofs

메이저 번호가 10이고 마이너 번호가 235인 문자 장치입니다. 장치 이름은 autofs입니다.

이제 /proc/devices에서 동일한 주요 번호를 가진 항목을 확인합니다.

10 misc

보시다시피 장치 이름은 완전히 다르며 마이너 번호도 없습니다(어떻게 메이저 번호로만 장치를 식별합니까?).

일부 용어가 혼합된 것 같지만 해결할 수 없습니다.

답변1

register_blkdev커널 모듈(원하는 경우 "드라이버")은 다음과 같은 루틴을 문자열과 함께 사용하여 커널에 블록 또는 문자 장치(전통적인 Unix 의미에서 "장치"는 많은 의미를 갖는 단어임)를 등록할 수 있습니다. 장치를 식별하십시오. 사용이 가능해요어느이러한 목적으로 문자열을 사용하고 이러한 문자열은 파일에 표시됩니다 /proc/devices(이 커널 테이블의 텍스트 표현일 뿐입니다).

반면, 최신 Linux 시스템에서는 여러 가지 복잡한 규칙에 따라 파일이 /dev생성됩니다 . udev이러한 파일은 사용자 공간이 읽기, 쓰기 및 ioctl을 통해 커널과 상호 작용하는 방법을 나타내도록 되어 있습니다. 이는 메이저 및 마이너 장치 번호가 있는 "특수" 파일이기 때문에 작동하므로 이러한 파일에 대한 액세스는 커널 호출로 변환됩니다. (대략적으로 말하면).

그 둘과 그 구조는 전혀 관련이 없습니다. 유일한 연결은 해당 파일에 액세스할 때마다 해당 특수 파일의 주요 장치 번호를 조회하여 이를 등록한 모듈을 찾는 데 사용된다는 것입니다. 등록된 문자열은 전혀 관련이 없습니다. 사용자가 이름을 알고 있는 한 파일이 표시되는 이름도 전혀 관련이 없습니다. 디스크를 호출하는 것을 방해하는 것은 없으며 /dev/this-disk대신 에 /dev/that-disk그렇게 하고 싶은 충동을 느끼면 규칙을 변경하십시오 ./dev/sda/dev/sdbudev

하지만물론사람들은 일을 단순하게 만들고 싶어하기 때문에 장치를 등록하는 데 사용되는 문자열은 종종 장치가 표시되는 기본 이름과 동일하거나 적어도 유사합니다 /dev. 하지만 그게 유일한 연결점이에요.

관련 정보