너무 길어요.
내 모듈이 최신 관행을 따르도록 하려면 /dev/
쉘 스크립트에서 via를 통해 장치를 만들어야 합니까, 아니면 via 및 C 함수를 통해 모듈 소스 코드에서 직접 만들어야 합니까? 한 방법이 다른 방법에 비해 어떤 장점이 있나요?mknod
class_create
device_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
.
- 이로 인해 새로운 장치가 생겼습니다
- 이것은 ... 불리운다
- 모듈의 init 함수를 호출합니다.
awk
장치에서 주요 장치 번호를 추출 하는 데 사용됩니다 .- 마지막으로 이 주요 장치 번호는
mknod
생성된 장치 파일 에 전달됩니다/dev/
(부 장치 번호는 장치 파일 이름으로 인코딩됩니다).
하지만,Linux 커널 모듈 프로그래밍 가이드class_create
sum 함수를 사용하면 device_create
,나는 믿는다동일한 작업을 수행합니다.
나를 불안하게 만드는 것은 이 책이 그럼에도 불구하고 아직 업데이트 중, 그것은 그것을 더 좋게 만드는 몇 가지 측면을 가지고 있습니다Linux 장치 드라이버, 제3판.
예를 들어, like 또는 를 register_chrdev
선호하는 것이 좋지만 를 사용합니다 . register_chrdev_region
alloc_chrdev_region
Linux 장치 드라이버, 제3판통화 중에 더 명확하게register_chrdev
옛날 방식, 설명을 57페이지의 절반 이상으로 줄였습니다.
반면에,Linux 커널 모듈 프로그래밍 가이드장치 파일을 생성하기 위해 쉘 함수 대신 class_create
C 함수를 사용하는 유일한 소스는 아닙니다 .device_create
mknod
여기또 다른 블로그 게시물은 2018년 초에 작성되었습니다.
그럼 오늘 우리는 무엇을 해야 할까요?