🛠 Premier script Python : santé de la carte
Objetivos
Escribir un primer script en Python que muestre el estado del ODROID-XU4: los 8 núcleos del Exynos5422 (4 Cortex-A15 hasta 2,0 GHz + 4 Cortex-A7 hasta 1,4 GHz, big.LITTLE) y las temperaturas de los sensores térmicos expuestos por el kernel mainline. Python 3 viene preinstalado en Armbian.
Material
- ODROID-XU4 con Armbian Debian/Ubuntu (kernel 6.6.x), acceso por terminal o SSH
- Ningún componente electrónico: todo se realiza a través de /sys y /proc
Código completo
#!/usr/bin/env python3
"""sante.py — inventaire CPU big.LITTLE + temperatures sur XU4."""
import glob
def lire(chemin):
try:
with open(chemin) as f:
return f.read.strip
except OSError:
return "n/a"
print("== CPUs en ligne ==")
print(lire("/sys/devices/system/cpu/online")) # attendu: 0-7
print("== Frequences max par cluster (kHz) ==")
for p in sorted(glob.glob("/sys/devices/system/cpu/cpufreq/policy*/cpuinfo_max_freq")):
print(p.split("/")[5], lire(p)) # 2000000 (A15) / 1400000 (A7)
print("== Temperatures ==")
for z in sorted(glob.glob("/sys/class/thermal/thermal_zone*")):
t = lire(z + "/type")
v = lire(z + "/temp")
if v != "n/a":
print(f"{t}: {int(v)/1000:.1f} C")
Ejecutar: python3 sante.py.
Verificación esperada
El script muestra 0-7 (los 8 núcleos se explotan en HMP bajo mainline), dos políticas de frecuencia con máximos de 2000000 kHz (cluster A15) y 1400000 kHz (cluster A7), y luego una línea de temperatura por sensor (cpu0 a cpu3 y gpu).
Errores frecuentes
- Ejecutar con
pythonen lugar depython3: según la imagen,pythonno siempre existe. - Buscar « MHz » en
/proc/cpuinfopor cluster: bajo big.LITTLE HMP, es mejor leer las políticas cpufreq. - Olvidar que las temperaturas están en miligrados: hay que dividir por 1000.
- Preocuparse por un sensor ausente: no todos los thermal_zones tienen el mismo tipo según el kernel.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash