플랫폼 드라이버를 사용하는 방법

플랫폼 드라이버를 사용하는 방법

나는 Raspberry Pi b+를 가지고 있고 이 드라이버 bcm2835_Thermal.c를 통해 Linux 커널 파일의 CPU 온도를 읽고 싶습니다.https://github.com/raspberrypi/linux/blob/rpi-4.19.y/drivers/Thermal/broadcom/bcm2835_Thermal.c.

하지만 이 드라이버가 어떻게 작동하는지 이해하는 데 어려움이 있습니다. 내 질문은 다음과 같습니다. 이 드라이버 코드의 호출 체인은 무엇입니까? 온도를 얻으려면 Linux 파일에서 프로브 함수와 get_temp 함수를 호출해야 합니까?

어떤 도움이라도 대단히 감사하겠습니다.

답변1

드라이버는 Linux 커널 모듈이며 #include <linux/module.h>시작과 MODULE_*끝의 세 줄로 식별됩니다.

이 함수는 bcm2835_thermal_probe()해당 드라이버 .probe내의 요소 로 나열되므로 static struct platform_driver드라이버가 로드될 때 드라이버가 해당 하드웨어에 적합한지 확인하고 그렇다면 드라이버를 초기화하기 위해 프로브 기능이 자동으로 호출되는 것으로 이해됩니다. bcm2835_thermal_get_temp할 수 있는 기능으로 등록됩니다.

라인 #221에는 에 대한 호출이 있으므로 thermal_zone_of_sensor_register()감지기의 출력이 아래 어딘가에서 사용 가능해야 한다고 가정합니다 /sys/class/thermal. 등록 함수는 핫존 API를 통해 호출 가능한 것으로 나열된 드라이버 함수 bcm2835_thermal_ops(단 하나 bcm2835_thermal_get_temp()의 함수)를 등록합니다.bcm2835_thermal_ops.get_temp()

드라이버 bcm2835_thermal_debugfs()에는 debugfs.bcm2835_thermaldebugfs

mount -t debugfs none /sys/kernel/debug

드라이버 모듈이 성공적으로 로드되고 초기화되면 /sys/kernel/debug/bcm2835_thermal/필요한 경우 사용자 공간에서 직접 해당 센서의 레지스터에 액세스할 수 있는 디렉터리와 일부 파일이 있어야 합니다.

간단히 말해서, 드라이버는 커널의 기존 핫스팟 및 debugfs API에 연결되고, 장치 트리는 폴링 간격 정보를 제공한 다음 핫스팟 하위 시스템이 자동으로 온도를 업데이트합니다.

사용자 공간 코드에 온도 정보가 필요한 경우 위에서 언급한 sysfs 디렉터리에서 찾아야 합니다.

커널 코드에서 필요한 경우 struct thermal_zone_device장치 트리에서 적절한 온도를 찾고 구조의 적절한 센서 하위 요소에서 현재 온도를 읽거나 get_temp()절대 업이 필요한 경우 해당 함수를 명시적으로 호출하면 된다고 생각합니다. - 최신 마이크로초 단위의 정확한 정보. 나는 실제로 커널 프로그래머가 아니기 때문에 여기서 틀렸을 가능성이 높습니다.

관련 정보