hwmon/Thermal 하위 시스템의 일부로 UART를 통해 얻은 온도 데이터를 사용합니다.

hwmon/Thermal 하위 시스템의 일부로 UART를 통해 얻은 온도 데이터를 사용합니다.

임베디드 Linux를 실행하는 제품에 OEM 모듈을 통합하려고 합니다. UART를 통해서만 모듈과 통신할 수 있으며 모듈에서 얻어야 하는 가장 중요한 정보는 온도입니다.

이 시스템은 ARM 기반 시스템이며 I2C 온도 센서와 팬, 장치 트리를 사용하여 열 설계를 수행했으며 모든 것이 잘 작동합니다. 이 모듈을 추가하면 상황이 까다로워지기 시작합니다. OEM 모듈은 특정 시스템에 있을 수도 있고 없을 수도 있는 옵션입니다. 하드웨어는 OEM 모듈의 존재를 감지하고 적절한 커널 모듈/장치 트리 오버레이를 로드하여 설치된 하드웨어의 열 관리를 활성화해야 합니다.

여기서 어려운 점은 UART를 통해 통신하는 열 센서가 없는 것 같다는 것입니다. SPI용 드라이버를 찾았습니다(LM70), I2C(LM75) 및 1줄(DS18S20) 온도 센서이지만 Linux 열 하위 시스템과 함께 비동기 직렬을 사용하는 선례는 없습니다.

내 원래 계획은 사용자 공간의 온도를 읽고 이를 열 하위 시스템에 쓰는 것이었습니다. 커널 구성에서 set_emul_temp를 활성화하지 않는 한 이는 허용되지 않습니다(합당한 이유로). 나는 사용자 공간 코드가 모든 온도 센서에 기록되도록 허용하여 시스템의 실제 온도를 무시하고 싶지 않기 때문에 다른 전략을 추구하고 있습니다.

계획 2는 쓰기 가능한 속성을 사용하여 hwmon 하위 시스템에 "플러그인"하는 커널 모듈을 작성하는 것입니다. 이렇게 하면 더 높은 온도 센서를 사용하여 팬을 제어하도록 열 제어 체계를 구성할 수 있습니다. 악성 코드가 OEM 모듈 온도 제어를 무시하는 경우 온보드 I2C 센서는 여전히 올바르게 읽고 온도 판독에 따라 팬이 작동합니다. 이것에 대해 더 자세히 살펴봤을 때 이것이 가능한지 확신할 수 없었습니다.

최종 계획은 커널 모듈과 사용자 공간 TTY 드라이버 간에 UART를 공유하는 방법을 알아내는 것입니다. 커널 모듈은 온도 값(4바이트 @ ~900k 보드)에 액세스할 때 hwmon에 자신을 등록하고 장치 드라이버 잠금을 얻을 수 있으므로 온도를 샘플링하지 않을 때 사용자 공간 응용 프로그램에서 사용할 수 있도록 장치를 열어 둘 수 있습니다. 온도 값의 새로 고침 기간은 중요하지 않습니다. 온도가 매초 정도 업데이트되는 한 장치를 사용하는 사용자 공간 응용 프로그램에 큰 문제를 일으키지 않습니다. 시스템과 OEM 모듈 간의 모든 전송은 상대적으로 발생합니다. 작음(>500B).

저는 다음의 몇 가지 훌륭한 가이드를 기반으로 커널 모듈 개발을 시작했습니다.로버트 W. 올리버 2세그리고데릭 몰로이. 이를 통해 나중에 사용하기 위해 기록된 값을 포함하는 모듈을 작성할 수 있습니다. 내가 달성하려는 다음 작업은 이것을 hwmon에 통합하는 방법입니다. 나를 여기로 데려가세요Linux 하드웨어 모니터링 커널 API.

내가 겪고 있는 문제는 내 char 장치에 상위 장치가 없는 것 같아서 호출할 수 없다는 것입니다 devm_hwmon_device_register_with_info. 또한 hwmon 장치 및 char 장치로 등록할 수 없는 것 같습니다. 이제 내부적으로 호출할 module_platform_driver수 있도록 내 드라이버를 플랫폼 드라이버로 등록하는 것을 고려 중입니다 . 쓸 수는 없더라도 hwmon에 "장치"가 등록되어 있는 지점까지 갈 수 있을 것 같습니다.devm_hwmon_device_register_with_info.probe()

사용자 공간에서 장치에 쓸 수 있는 방법이 없기 때문에 모듈의 일부로 직렬 포트와 직접 인터페이스해야 한다고 생각했습니다. 이는 I2C나 SPI보다 덜 잘 정의된 것처럼 보이기 때문에 더욱 혼란스러워집니다. 나는 지시를 받았다자물쇠의 책그리고 선 규칙은 여기에서 가능한 해결책이지만 올바른 경로가 아니라면 조사하는 것을 주저할 것입니다.

내가 나열한 제한 사항을 고려하면 내 옵션 중 올바른 경로가 있는 것 같나요? 전에도 이런 일이 있었나요? 나보다 먼저 이 문제를 해결한 사람이 있다는 증거를 찾을 수 없어서 커널 설계에 맞는 세부 사항을 찾으려고 노력하고 있습니다. 단순히 팬 속도를 더 높은 속도로 무시할 수 있다면 좋겠지만 이 기능은 사용자 공간에서 잠겨 있는 것 같습니다(역시 합당한 이유가 있음).

관련 정보