/dev/에 장치 파일을 생성하는 현대적인 방법은 무엇입니까?

/dev/에 장치 파일을 생성하는 현대적인 방법은 무엇입니까?

너무 길어요.

내 모듈이 최신 관행을 따르도록 하려면 /dev/쉘 스크립트에서 via를 통해 장치를 만들어야 합니까, 아니면 via 및 C 함수를 통해 모듈 소스 코드에서 직접 만들어야 합니까? 한 방법이 다른 방법에 비해 어떤 장점이 있나요?mknodclass_createdevice_create

상세한

존재하다3 장~의Linux 장치 드라이버, 제3판, 45페이지에서는 register_chrdev_region장치 번호를 알고 있는 경우 문자 장치를 등록하는 기능으로 사용됩니다.

그러나 오늘 사용하지 않는 장치 번호는 내일 커널에서 사용될 수 있으므로 이 기능(46페이지)의 사용은 거의 즉시 권장되지 않으며 alloc_chrdev_region주요 장치 번호를 동적으로 할당할 수 있습니다.

/dev/그러나 이 시점에서 저자는 디바이스 노드를 생성하기 위해서는 반드시 메이저 디바이스 번호를 알아야 하는데, alloc_chrdev_region반환 전에는 이를 알 수 없기 때문에 미리 생성할 수 없다는 점을 지적한다 .

제안된 솔루션은 sh다음과 같은 ell 스크립트입니다.

  • 모듈 로드 insmod,
    • 모듈의 init 함수를 호출합니다.
      • 이것은 ... 불리운다 alloc_chrdev_region,
        • 이로 인해 새로운 장치가 생겼습니다 /proc/devices.
  • awk장치에서 주요 장치 번호를 추출 하는 데 사용됩니다 .
  • 마지막으로 이 주요 장치 번호는 mknod생성된 장치 파일 에 전달됩니다 /dev/(부 장치 번호는 장치 파일 이름으로 인코딩됩니다).

하지만,Linux 커널 모듈 프로그래밍 가이드class_createsum 함수를 사용하면 device_create,나는 믿는다동일한 작업을 수행합니다.

나를 불안하게 만드는 것은 이 책이 그럼에도 불구하고 아직 업데이트 중, 그것은 그것을 더 좋게 만드는 몇 가지 측면을 가지고 있습니다Linux 장치 드라이버, 제3판.

예를 들어, like 또는 를 register_chrdev선호하는 것이 좋지만 를 사용합니다 . register_chrdev_regionalloc_chrdev_regionLinux 장치 드라이버, 제3판통화 중에 더 명확하게register_chrdev 옛날 방식, 설명을 57페이지의 절반 이상으로 줄였습니다.

반면에,Linux 커널 모듈 프로그래밍 가이드장치 파일을 생성하기 위해 쉘 함수 대신 class_createC 함수를 사용하는 유일한 소스는 아닙니다 .device_createmknod여기또 다른 블로그 게시물은 2018년 초에 작성되었습니다.

그럼 오늘 우리는 무엇을 해야 할까요?

관련 정보