/dev/ 하위 디렉터리에 여러 장치(커널 드라이버)를 만드는 방법

/dev/ 하위 디렉터리에 여러 장치(커널 드라이버)를 만드는 방법

커널 모듈을 작성 중입니다. /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 규칙을 사용하지 않는 나에게 맞는 방법을 찾았습니다(저는 프로그래밍 방식으로 하는 것이 더 좋습니다). 이전에 생각했던 것보다 쉽습니다.

  1. alloc_chrdev_region장치 수에 대해.
  2. 각 기기에 대한 클래스 생성(각 클래스마다 다른 이름을 가짐)
  3. devnode사용자 정의 함수를 사용하여 클래스의 필드를 설정합니다 (예: ) return kasprintf(GFP_KERNEL, "name/%d", global++);. 여기서 이름이 지정됩니다. Udev는 이 기능을 존중해야 합니다.
  4. cdev_initcdev를 생성 cdev_add하고 fops를 설정 하려면 &&를 사용하십시오 .
  5. 장치 만들기 device_create(상위 항목은 NULL)

여기에는 장치 계층 구조가 없으며 동일한 /dev/ 디렉터리에 있는 개별 장치만 있다는 점에 유의하세요. 2~5단계에서 지정한 이름은 결국 /sys/에 위치하게 됩니다.

관련 정보