집 >운영 및 유지보수 >리눅스 운영 및 유지 관리 >Linux 문자 장치는 어디에 배치되어 있나요?
Linux 문자 장치는 "/dev" 디렉터리에 위치합니다. 문자 장치는 바이트 단위로만 읽고 쓸 수 있는 장치를 말합니다. 일반적으로 각 문자 장치 또는 블록 장치는 "/dev" 디렉터리의 장치 파일에 해당하며, 각 장치 파일에는 다음과 같은 기본/장치가 있어야 합니다. 동일한 부 장치 번호와 주요 장치 번호는 유사한 장치이며 동일한 드라이버를 사용합니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, Dell G3 컴퓨터.
Linux 시스템은 장치를 문자 장치, 블록 장치 및 네트워크 장치의 세 가지 범주로 나눕니다. 이 세 가지 범주 중 문자 장치는 상대적으로 간단하고 응용 프로그램 문자 장치는 다음과 같습니다. 본 강의에서는 주로 캐릭터 디바이스를 소개하며, 블록 디바이스와 네트워크 디바이스에 관심이 있는 분들은 관련 자료를 참고하여 자세히 알아볼 수 있습니다.
문자 장치는 바이트 단위로만 읽고 쓸 수 있는 장치를 말합니다. 장치 내의 특정 데이터는 무작위로 읽을 수 없으며 데이터를 순서대로 읽어야 합니다. 문자 장치는 스트림 지향 장치입니다. 일반적인 문자 장치에는 마우스, 키보드, 직렬 포트, 콘솔 및 LED가 포함됩니다.
일반적으로 각 문자 장치 또는 블록 장치는 /dev 디렉터리의 장치 파일에 해당하며, 각 장치 파일에는 메이저/마이너 장치 번호가 있어야 합니다. 동일한 메이저 장치 번호를 가진 장치는 유사한 장치입니다. .동일한 드라이버를 사용하십시오.
Linux 사용자 수준 프로그램은 드라이버를 사용하여 장치 파일을 통해 문자 장치를 작동하거나 장치를 차단합니다.
cat /proc/devices
명령을 통해 현재 로드된 장치 드라이버의 주요 장치 번호를 볼 수 있습니다.
/dev 디렉토리에서
ls -l
명령을 실행하면 모든 장치 파일의 메이저 및 마이너 장치 번호를 볼 수 있습니다.
공용 장치 파일을 다음과 같이 설명합니다.
/dev/hd[a-t]:IDE设备 /dev/sd[a-z]:SCSI设备 /dev/fd[0-7]:标准软驱 /dev/md[0-31]:软raid设备 /dev/loop[0-7]:本地回环设备 /dev/mem:内存 /dev/null:无限数据接收设备,相当于黑洞 /dev/zero:无限零资源 /dev/tty[0-63]:虚拟终端 /dev/ttyS[0-3]:串口 /dev/lp[0-3]:并口 /dev/console:控制台 /dev/fb[0-31]:framebuffer /dev/cdrom => /dev/hdc /dev/modem => /dev/ttyS[0-9] /dev/pilot => /dev/ttyS[0-9]
장치 파일을 생성하는 방법에는 두 가지가 있습니다. 하나는 프로그래밍에서 이 함수를 호출하는 것이고, 다른 하나는 명령의 첫 번째 매개 변수를 사용하는 것입니다. 장치 파일 이름에서 두 번째 매개 변수는 장치 유형입니다. 예를 들어 c는 문자 장치를 나타내고 세 번째와 네 번째 매개 변수는 장치 파일의 주요 장치 번호와 부 장치 번호(예: 231 및 0)입니다. 주요 장치 번호와 보조 장치 번호의 조합에 따라 동일한 장치의 여러 유형의 주요 장치 번호는 동일하지만 보조 장치 번호는 다릅니다. 다른 부 장치 번호. 장치 번호는 장치 파일을 드라이버와 연결할 수 있습니다.
mknod 파일 이름 유형 major min
struct cdev { struct kobject kobj; // 内嵌内核对象 struct module *owner; //该字符设备所在的内核模块 const struct file_operations *ops; //文件操作结构体 struct list_head list; //已注册字符设备链表 dev_t dev; //由主、次设备号构成的设备号 unsigned int count;//同一主设备号的次设备号的个数 };
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long,loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
};
그림에서 볼 수 있듯이 맨 왼쪽의 Linux 커널에서 cdev 구조는 멤버 dev_t를 통해 문자 장치를 설명하는 데 사용되며 장치 번호(주요 장치 번호와 부 장치 번호로 구분됨)가 정의되어 있습니다. file_Operations 멤버를 통한 문자 장치의 고유성 문자 장치 드라이버가 가상 파일 시스템 VFS에 제공하는 인터페이스 함수(예: 일반적인 open(), read(), write() 등)를 정의하려면 이러한 함수는 실제로 하드웨어 장치를 작동합니다.
이전 그림을 기반으로 이 그림을 살펴보겠습니다. 문자 장치 드라이버는 커널 모듈 형태로 커널에 로드됩니다. 먼저 모듈 로딩 함수는 정적 또는 동적 방식으로 장치 번호 를 얻습니다. ; 그런 다음 문자 장치 초기화 기능은 cdev와 file_Operations 사이의 연결 을 설정하고 등록 기능을 통해 시스템에 cdev를 추가하여 로딩에 따라 모듈이 언로드될 때 등록을 완료합니다. cdev를 로그아웃해야 하며 장치 번호가 해제됩니다.
사용자 프로그램에서는 커널의 드라이버에 의해 구현된 이러한 함수를 시스템 호출 open(), read(), write() 등을 통해 호출할 수 있습니다. 이런 식으로 사용자 모드와 커널 드라이버 사이의 경로가 열립니다.주요 장치 번호는 장치 파일에 연결된 드라이버를 식별하는 데 사용되며 장치 유형을 반영합니다. 보조 장치 번호는 드라이버가 작동 중인 장치를 식별하고 동일한 유형의 장치를 구별하는 데 사용됩니다. 등록할 때 기기번호를 신청하고, 로그아웃할 때 기기번호를 해제하세요. 누구나 등록할 때 학생증이 있고, 이 학생번호는 졸업하고 퇴사할 때 공개됩니다.
Linux 비디오 튜토리얼"
위 내용은 Linux 문자 장치는 어디에 배치되어 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!