Ubuntu 20.04.3용 USB 장치가 있습니다. 제조업체에서는 라이브러리와 드라이버를 제공합니다.
드라이버를 설치하고 장치를 작동시킬 수 있지만 커널이 업데이트될 때마다 드라이버를 새 트리에 다시 설치해야 합니다. 나는 이것이 dkms의 일이라는 것을 알고 있으며 너무 어려워 보이지 않았기 때문에 이 문제를 해결하기 위해 작업하기 시작했지만 한발 물러서서 장치를 작동시키는 더 쉽고/더 나은 방법이 있는지 궁금했습니다. 대부분의 사람들은 사용자 기반은 Windows이므로 Linux 측면에 개발 시간이 많이 주어지지 않습니다. 어쨌든, 나는 리눅스가 어떻게 일을 하는지 더 알고 싶습니다.
그들이 제공하는 드라이버는 약간 수정된 Exar 드라이버입니다. 버전과 기본 Exar 드라이버 간의 차이점을 살펴보면 기본적으로 그들이 하는 일은 공급업체 번호와 제품 ID 번호를 코드에 추가하여 장치가 드라이버와 호환되는 것으로 인식되고 적절하게 코드 블록(특정 장치가 장치 설명자와 일치할 때 사용하는 Exar 칩입니다.
기반으로이 매우 유용한 페이지그리고 인터넷의 다른 소스에서 제가 이해한 바에 따르면 각 드라이버에는 기본적으로 허용되는 장치 유형에 대한 규칙이 있는 module.alias 파일이 있습니다. 그런 다음 장치가 연결되면 시스템은 장치에서 정보를 추출하고 장치에 대한 모달리아 파일을 생성합니다. 그런 다음 장치 모드 별칭을 module.alias 파일의 규칙과 일치시키는 가장 구체적인 첫 번째 드라이버는 장치에 할당된 드라이버입니다.
따라서 내 장치에 Exar 칩이 있다고 가정하고 드라이버가 이를 수락하고 기본적으로 Exar 칩으로 인식하면 Exar 드라이버를 사용하여 작동시킬 수 있습니다. 그러나 제조업체가 자체 사용자 정의 장치 설명자를 배치했기 때문에 modprobe는 해당 장치가 기본 Exar 드라이버와 호환된다는 것을 인식하지 못합니다.
장치가 기본 Exar 드라이버와 실제로 호환되는지, 아니면 드라이버를 복사하고 시스템이 이를 존중하도록 약간 수정하는 것 외에 Exar 장치가 숨겨져 있는지 시스템에 알릴 수 있는 방법이 있습니까? 하위 장치? modprobe에 관한 한 장치 설명자의 별칭처럼요?
아니면 코드를 복제하는 대신 기본 exar 드라이버를 활용하고 모든 것을 여기에 전달하여 이 장치에 대한 다른 드라이버를 작성하는 방법이 있을까요? 그러면 칩 제조업체로부터 업데이트 혜택을 받을 수 있습니다.
아니면 제조사의 방식이 최선의 방법이기 때문에 dkms를 계속 사용해야 할까요?
udev 규칙을 사용하여 드라이버를 장치에 바인딩 및 바인딩 해제하는 방법에 대한 예를 보았지만 드라이버가 일치하지 않으면 어쨌든 바인딩되지 않을 것이라고 생각했습니다. 설사 그렇더라도 그것이 "최선의" 방법일까요?
답변1
@ReedGhost가 댓글에서 매우 유용하게 제안했듯이(감사합니다!)이것이것이 바로 제가 하고 싶은 일입니다. 내장된 xr_serial 모듈을 찾아 장치 공급업체와 제품 ID를 newid 파일에 반영했습니다. 내장된 드라이버는 내 장치를 호환 장치로 인식하고 연결했을 때 로드되었습니다.
그러나 내장된 exar 드라이버는 서로 다른 제품 ID를 가진 여러 장치용으로 작성되었기 때문에 특정 사용 사례는 해결되지 않습니다. 각 특정 제품 ID에 대해 실행될 특정 코드 블록을 지정하는 if-then-else 체인이 있습니다. 따라서 일부 기능은 내 장치 ID로 인해 다른 섹션 중 하나를 실행해야 하는데 코드의 else 섹션으로 이동하기 때문에 여전히 작동하지 않습니다.
이제 드라이버가 인식할 수 있도록 새 칩을 추가하는 대신 장치 ID를 사용 중인 특정 칩의 ID로 스푸핑하거나 교체해야 한다는 것을 깨달았습니다.
편집: 실제로 제조업체에서 제공한 드라이버를 사용하는 장치에 대해 다른 드라이버를 작성해 볼 수도 있습니다. 그렇게 하는 것이 업데이트의 이점을 얻는 더 올바른 방법인 것 같기 때문입니다.이 문제그리고 이 문제이것은 이것을 발견하고 동일한 문제가 있는 모든 사람에게 좋은 출발점인 것 같습니다. 그동안 제가 이용했던dkms드라이버를 업데이트하면 됩니다.