Linux에서 장치 파일은 응용 프로그램이 표준 입력 및 출력 시스템 호출을 통해 장치 드라이버를 사용하여 장치와 상호 작용할 수 있도록 하는 장치 드라이버에 대한 인터페이스입니다. Linux 시스템에는 일반적으로 사용되는 두 가지 장치 파일이 있습니다. 문자 특수 파일과 블록 특수 파일의 차이점은 운영 체제와 하드웨어에서 읽고 쓰는 데이터의 양에 있습니다.
이 튜토리얼의 운영 환경: linux5.9.8 시스템, Dell G3 컴퓨터.
장치 파일 개요
Unix 계열 운영 체제에서 장치 파일 또는 특수 파일은 장치 드라이버의 인터페이스로, 파일 시스템에 다음과 같이 나타납니다. 일반 파일과 같습니다. MS-DOS, OS/2 및 Microsoft Windows에도 특수 파일이 있습니다. 이러한 특수 파일을 사용하면 애플리케이션이 표준 입출력 시스템 호출을 통해 장치 드라이버를 사용하여 장치와 상호 작용할 수 있습니다. 표준 시스템 호출을 사용하면 많은 프로그래밍 작업이 단순화되고 장치의 기능과 관계없이 일관된 사용자 공간 I/O 메커니즘이 가능해집니다.
장치 파일은 일반적으로 표준 장치(예: 프린터 및 직렬 포트)에 대한 간단한 인터페이스를 제공하지만 이러한 장치(예: 디스크 파티션)의 특정 고유 리소스에 액세스하는 데 사용될 수도 있습니다. 또한 장치 파일은 데이터 싱크 및 난수 생성기와 같이 실제 장치와 연결되지 않은 시스템 리소스에 액세스하는 데 유용합니다.
그림 1 응용 프로그램, 블록 파일, 드라이버 및 하드웨어 간의 관계
Unix 계열 운영 체제에는 문자 특수 파일과 블록 특수 파일이라는 두 가지 일반적으로 사용되는 장치 파일이 있습니다. 두 가지의 차이점은 운영 체제와 하드웨어에서 읽고 쓰는 데이터의 양입니다. 장치 특수 파일이라고 할 수 있는 네임드 파이프와 달리 네임드 파이프는 장치에 연결되지 않지만 일반 파일도 아닙니다.
일부 Unix 계열 시스템에서 대부분의 장치 파일은 전통적으로 /dev에 마운트된 가상 파일 시스템의 일부로 관리됩니다. 런타임 시 하드웨어 추가 및 제거를 모니터링하는 제어 데몬과 연결되어 장치에 해당 변경을 적용할 수 있습니다. 파일 시스템 장치 파일 시스템 변경 작업이 커널에 의해 자동으로 완료되지 않으면 제어 데몬이 시스템이나 사용자 공간에서 스크립트를 호출하여 특수 장치 요구 사항을 처리할 수 있습니다.
FreeBSD 및 DragonFly BSD 구현에서는 가상 장치 파일 시스템의 이름을 devfs 및 관련 데몬 devd로 지정했습니다. Linux는 주로 udev라는 사용자 공간 구현을 사용하지만 다양한 변형이 있습니다. 이를 기반으로 하는 Darwin 및 macOS와 같은 운영 체제에는 순수 커널 기반 장치 파일 시스템이 있습니다.
Solaris 컨테이너와 같이 chroot 프로세스 격리를 지원하는 Unix 시스템에서는 일반적으로 각 chroot 환경에 자체 /dev가 필요합니다. 이러한 마운트 지점은 전역 파일 시스템 트리의 다양한 노드에 있는 호스트 운영 체제에 표시됩니다. 하드웨어 격리는 장치 노드의 채우기를 /dev의 chroot 인스턴스로 제한하여 chroot 환경에서 시행할 수 있습니다(프로그램은 하드웨어에 연결할 수 없으며 이름을 보거나 액세스할 수 없습니다. 이는 Unix 파일보다 더 강력한 액세스 제어입니다) 시스템 권한 양식).
장치 노드는 운영 체제 커널에 의해 할당된 리소스에 해당합니다. Unix는 노드 구조의 일부로 저장된 메이저 번호와 마이너 번호로 이러한 리소스를 식별합니다. 이러한 번호 할당은 다양한 운영 체제와 다양한 컴퓨터 플랫폼에서 고유하게 발생합니다. 일반적으로 메이저 번호는 장치 드라이버를 식별하고 마이너 번호는 드라이버가 제어하는 특정 장치(아마도 여러 장치에 대해)를 식별합니다. 이 경우 시스템은 마이너 번호를 드라이버에 전달할 수 있습니다. 그러나 동적으로 할당된 숫자의 경우에는 그렇지 않을 수도 있습니다(예: FreeBSD 5 이상에서는).
다른 특수 파일 형식과 마찬가지로 컴퓨터 시스템은 표준 시스템 호출을 사용하여 장치 노드에 액세스하고 이를 일반 컴퓨터 파일로 처리합니다. 두 가지 표준 유형의 장치 파일이 있습니다. 불행하게도 역사적인 이유로 이름이 다소 직관적이지 않으므로 둘 사이의 차이점을 설명하는 것이 잘못된 경우가 많습니다.
블록 파일 분류
문자 장치(문자 장치)
문자 특수 파일 또는 문자 장치는 하드웨어 장치에 대한 버퍼링되지 않은 직접 액세스를 제공합니다. 프로그램이 한 번에 하나의 문자를 읽거나 쓰는 것을 반드시 허용하는 것은 아닙니다. 이는 해당 장치에 따라 다릅니다. 예를 들어, 하드 디스크의 문자 장치에서는 일반적으로 모든 읽기 및 쓰기 작업이 블록 경계에 맞춰 정렬되어야 하며 개별 바이트 읽기는 허용되지 않습니다.
블록 기반 하드웨어의 문자 장치에는 일반적으로 정렬된 블록을 읽고 쓰려면 프로그램이 필요하다는 사실을 둘러싼 혼동을 피하기 위해 문자 장치를 원시 장치라고도 합니다.
블록 장치(블록 장치)
블록 특수 파일 또는 블록 장치는 하드웨어 장치에 대한 버퍼링된 액세스를 제공하고 몇 가지 추상적인 세부 정보를 제공합니다. 문자 장치와 달리 블록 장치를 사용하면 프로그래머는 항상 모든 크기(단일 문자/바이트 포함) 및 모든 정렬의 블록을 읽거나 쓸 수 있습니다. 단점은 블록 장치가 버퍼링되기 때문에 프로그래머는 쓰기 데이터가 커널 버퍼에서 실제 장치로 전달되기까지 시간이 얼마나 걸릴지, 실제로 두 개의 개별 쓰기가 어떤 순서로 물리적 장치에 도착할지 알 수 없다는 것입니다. ? 또한, 동일한 하드웨어가 캐릭터 및 블록 장치를 노출하는 경우, 캐릭터 장치를 사용하는 클라이언트가 블록 장치의 버퍼 변경 사항을 인식하지 못하기 때문에 데이터 손상 위험이 있습니다.
의사 장치(Pseudo-devices)
Unix 계열 시스템의 장치 노드는 반드시 물리적 장치와 일치하지는 않습니다. 이러한 대응이 부족한 노드는 의사 장치 세트를 형성합니다. 이는 운영 체제에서 처리하는 다양한 기능을 제공합니다. 가장 일반적으로 사용되는(문자 기반) 의사 장치 중 일부는 다음과 같습니다.
/ dev / null - 接受并放弃所有输入; 不产生输出(总是在读取时返回文件结束指示) / dev / zero - 接受并放弃所有输入; 产生连续的NUL(零值)字节流 / dev / full - 读取时会产生连续的NUL(零值)字节流,并在写入时返回“磁盘已满”消息 / dev / random和/ dev / urandom - 它们产生一个可变长度的伪随机数字流。
Node Creation
노드는 mknod 시스템 호출에 의해 생성됩니다. 노드를 생성하는 데 사용되는 명령줄 프로그램을 mknod라고도 합니다. 일반적인 파일 시스템 호출(rename, unlink) 및 명령(mv, rm)을 사용하여 노드를 이동하거나 삭제할 수 있습니다. 장치 노드를 복사할 때 -R 또는 -a 옵션을 전달하면 cp -l 명령은 원본과 동일한 속성을 가진 새 장치 노드를 만듭니다.
일부 Unix 버전에는 /dev 디렉토리에 필요한 모든 장치를 생성하는 makedev 또는 MAKEDEV라는 스크립트가 포함되어 있습니다. 이는 장치에 정적으로 메이저 번호가 할당된 시스템에서만 의미가 있습니다(예: 커널 모듈에 하드코딩하여).
블록 파일 명명 규칙
다음 접두사는 장치 유형을 식별하기 위해 /dev 계층의 특정 장치 이름에 사용됩니다.
lp:行式打印机(比较lp) pt:伪终端(虚拟终端) tty:终端 一些额外的前缀已经在一些操作系统中普遍使用: fb:帧缓冲区 fd :(平台)软盘,尽管这个缩写也常用来指文件描述符 高清:(“经典”)IDE驱动程序(以前用于ATA硬盘驱动器,ATAPI光盘驱动器等) hda:第一个ATA通道上的主设备(通常由主编号3和次编号0标识) hdb:第一个ATA通道上的从属设备 hdc:第二个ATA通道上的主设备 hdc1:此磁盘上的第一个主分区(示例) hdc5:扩展分区中的第一个逻辑驱动器(示例) hdd:第二个ATA通道上的从属设备 parport,pp:并行端口 SCSI驱动程序,也被libATA(现代PATA / SATA驱动程序),USB,IEEE 1394等使用。 sd:大容量存储驱动程序 sda:首次注册的设备 sda4:此磁盘上的最后一个分区(示例) sda6:扩展分区中的第二个逻辑驱动器(示例) sdb,sdc等:第二,第三等注册设备 ses:机箱驱动程序 sg:通用SCSI层 sr:“ROM”驱动程序(面向数据的光盘驱动器; scd只是一个辅助别名) st:磁带驱动器 tty:终端 ttyS :(平台)串口驱动程序 ttyUSB:USB串口转换器,调制解调器等
Linux에서 사용되는 정식 접두사 목록은 다음에서 찾을 수 있습니다. Linux 장치 목록 발견됨, Linux 장치 목록은 장치 번호와 /dev 디렉터리 노드를 할당하는 Linux 운영 체제의 공식 레지스트리입니다.
대부분의 장치에서 이 접두어 뒤에는 특정 장치를 고유하게 식별하는 숫자가 옵니다. 하드 드라이브의 경우 문자는 장치를 식별하는 데 사용되고 숫자는 파티션을 식별하는 데 사용됩니다. 따라서 파일 시스템은 /dev/sda3을 통해 디스크의 영역을 찾을 수 있습니다. /dev/pts/14를 네트워크 터미널 세션과 연결합니다.
기기 파일 운영 관련 명령어
mknod
임베디드에 관심이 있으신 분들은 이 명령어의 사용법을 직접 확인해보시면 됩니다.
관련 추천: "Linux 비디오 튜토리얼"
위 내용은 리눅스 장치 파일은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!