커널 모듈을 작성 중입니다. /dev/에 문자 장치를 쉽게 만들 수 있지만3개의 장치내 사용자가 사용할 수 있으므로 모든 기능을 하나로 통합하는 것이 더 좋습니다./dev/ 하위 디렉터리.
가능한 예(내 openSUSE 상자에 있음):
# ls -l /dev/bsg
total 0
crw-rw---- 1 root root 252, 0 Jul 17 14:28 0:0:0:0
crw-rw---- 1 root root 252, 1 Jul 17 14:28 0:0:1:0
crw-rw---- 1 root root 252, 2 Jul 17 14:28 0:0:2:0
crw-rw---- 1 root root 252, 3 Jul 17 14:28 0:0:3:0
crw-rw---- 1 root root 252, 4 Jul 17 14:28 0:0:4:0
crw-rw---- 1 root root 252, 5 Jul 17 14:28 1:0:0:0
(bsg.c 코드를 보았지만 문자 장치가 추가된 "부모"가 무엇인지 모릅니다).
비슷한 일을 어떻게 할 수 있나요?
답변1
나는 udev 규칙을 사용하지 않는 나에게 맞는 방법을 찾았습니다(저는 프로그래밍 방식으로 하는 것이 더 좋습니다). 이전에 생각했던 것보다 쉽습니다.
alloc_chrdev_region
장치 수에 대해.- 각 기기에 대한 클래스 생성(각 클래스마다 다른 이름을 가짐)
devnode
사용자 정의 함수를 사용하여 클래스의 필드를 설정합니다 (예: )return kasprintf(GFP_KERNEL, "name/%d", global++);
. 여기서 이름이 지정됩니다. Udev는 이 기능을 존중해야 합니다.cdev_init
cdev를 생성cdev_add
하고 fops를 설정 하려면 &&를 사용하십시오 .- 장치 만들기
device_create
(상위 항목은 NULL)
여기에는 장치 계층 구조가 없으며 동일한 /dev/ 디렉터리에 있는 개별 장치만 있다는 점에 유의하세요. 2~5단계에서 지정한 이름은 결국 /sys/에 위치하게 됩니다.