장치 파일은 어디에서 왔나요?

장치 파일은 어디에서 왔나요?

내가 읽고있다Linux 커널 모듈 프로그래밍 가이드장치 드라이버의 작동 방식이 약간 혼란 스럽습니다.

나는 /proc/devices에 표시되는 기본 장치 드라이버를 따라 만들어 보았습니다. 이는 훌륭합니다. 가이드에 따르면 Linux의 드라이버와 상호 작용하기 위해 사용자 공간 프로그램은 /dev/에 있는 장치의 장치 파일과 상호 작용할 수 있습니다. 그런데 지금 제가 작성한 모듈은 장치 파일을 생성하지 않습니다. 새 파일 생성을 관리하는 것은 무엇입니까? 이것은 module_init에서 해야 할 일인가요?

C++ 프로그램과 같은 드라이버와 상호 작용하는 장치 파일을 만들었다고 가정하면 fstream을 열고 파일을 읽거나 쓸 수 있습니까? 아니면 사용자 공간에서 장치 파일과 상호 작용하기 위한 특정 라이브러리가 있습니까? ?

답변1

의 파일은 주로 소켓에서 수신하여 커널에서 이벤트를 수신하는 /dev프로세스에 의해 생성됩니다 (참고자료 참조). udev새로운 커널 객체(kobject)가 생성될 때 전송되는 이벤트입니다. 이러한 개체는 sysfs 파일 시스템에서도 볼 수 있습니다. 특히 하위 트리에 이름이 지정된 파일에는 해당 장치에 사용되는 노드의 주 번호와 부 번호가 포함되어 있습니다. 예를 들어netlinkNETLINK_KOBJECT_UEVENTman 7 netlink/sysdev/sys/devices

$ cat /sys/devices/pnp0/00:05/tty/ttyS0/dev
4:64

온라인에 설명이 있습니다14장.pdf~의Linux 장치 드라이버, 제3판 2005년부터,Linux 장치 모델. 약간 구식이며 netlink예를 들어 언급하지 않습니다.

관련 정보