Eu tenho um Raspberry Pi que está executando a versão ‘bookworm’ do sistema operacional; a versão de 64 bits do sistema operacional, se isso fizer alguma diferença. Instalei um dos sensores de temperatura e umidade SHT3X e aparentemente está funcionando bem. Está conectado via interface I2C (canal 0, /dev/i2c-0
acredito). Posso ler temperatura e umidade nos arquivos sysfs
; Acredito que o sensor esteja funcionando corretamente.
Descobri que existem duas pastas idênticas que sysfs
contêm os mesmos arquivos de saída e controle para o dispositivo SHT3X:
pasta 1:/sys/devices/platform/soc/3f205000.i2c/i2c-0/0-0044/hwmon/hwmon2
$ ls -l
total 0
lrwxrwxrwx 1 root root 0 Jun 2 21:55 device -> ../../../0-0044
-rw-r--r-- 1 root root 4096 Jun 2 21:55 heater_enable
-r--r--r-- 1 root root 4096 Jun 2 21:55 humidity1_alarm
-r--r--r-- 1 root root 4096 Jun 2 21:55 humidity1_input
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_max
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_max_hyst
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_min
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_min_hyst
-r--r--r-- 1 root root 4096 Jun 2 21:55 name
lrwxrwxrwx 1 root root 0 Jun 2 21:55 of_node -> ../../../../../../../../firmware/devicetree/base/soc/i2c@7e205000/sht3x@44
drwxr-xr-x 2 root root 0 Jun 2 21:55 power
-rw-r--r-- 1 root root 4096 Jun 2 21:55 repeatability
lrwxrwxrwx 1 root root 0 Jun 2 21:55 subsystem -> ../../../../../../../../class/hwmon
-r--r--r-- 1 root root 4096 Jun 2 21:55 temp1_alarm
-r--r--r-- 1 root root 4096 Jun 2 21:55 temp1_input
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_max
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_max_hyst
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_min
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_min_hyst
-rw-r--r-- 1 root root 4096 Jun 2 21:52 uevent
-rw-r--r-- 1 root root 4096 Jun 2 21:55 update_interval
pasta 2:/sys/class/hwmon/hwmon2
$ ls -l
total 0
lrwxrwxrwx 1 root root 0 Jun 2 21:55 device -> ../../../0-0044
-rw-r--r-- 1 root root 4096 Jun 2 21:55 heater_enable
-r--r--r-- 1 root root 4096 Jun 2 21:55 humidity1_alarm
-r--r--r-- 1 root root 4096 Jun 2 21:55 humidity1_input
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_max
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_max_hyst
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_min
-rw-r--r-- 1 root root 4096 Jun 2 21:55 humidity1_min_hyst
-r--r--r-- 1 root root 4096 Jun 2 21:55 name
lrwxrwxrwx 1 root root 0 Jun 2 21:55 of_node -> ../../../../../../../../firmware/devicetree/base/soc/i2c@7e205000/sht3x@44
drwxr-xr-x 2 root root 0 Jun 2 21:55 power
-rw-r--r-- 1 root root 4096 Jun 2 21:55 repeatability
lrwxrwxrwx 1 root root 0 Jun 2 21:55 subsystem -> ../../../../../../../../class/hwmon
-r--r--r-- 1 root root 4096 Jun 2 21:55 temp1_alarm
-r--r--r-- 1 root root 4096 Jun 2 21:55 temp1_input
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_max
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_max_hyst
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_min
-rw-r--r-- 1 root root 4096 Jun 2 21:55 temp1_min_hyst
-rw-r--r-- 1 root root 4096 Jun 2 21:52 uevent
-rw-r--r-- 1 root root 4096 Jun 2 21:55 update_interval
E tem mais; por exemplo:
pasta 3:/sys/devices/platform/soc/3f205000.i2c/i2c-0/0-0044/hwmon/hwmon2/subsystem/hwmon2
Sei que há links simbólicos envolvidos, mas existe um local verdadeiro/imutável para esses arquivos sysfs
? Li algumas referências em sysfs
1 , 2 , mas não encontrei explicação para essa aparente duplicação. Alguém pode explicar a aparente redundância e se existe um local imutável para os arquivos?
/sys/class/hwmon/hwmon2
é um link simbólico para/sys/devices/platform/soc/3f205000.i2c/i2c-0/0-0044/hwmon/hwmon2
(tecnicamente,/../../devices/platform/soc/3f205000.i2c/i2c-0/0-0044/hwmon/hwmon2
)./sys/devices
contém ossysfs
arquivos, por dispositivo, para todos os dispositivos do sistema. Isso permite que eles tenham um caminho e um nome exclusivos com base em sua “localização” (como um dispositivo de plataforma, um dispositivo PCI etc.)./sys/class
dá acesso a um subconjunto desses arquivos, por classe. Isso permite que eles sejam encontrados por finalidade (vagamente definida). Por exemplo, um programa interessado em todos os monitores de hardware pode ver tudo em/sys/class/hwmon
. Como esta é apenas uma visão diferente da hierarquia de “dispositivos” (ou um subconjunto dela), a árvore de “classes” consiste principalmente em links simbólicos apontando para a árvore de “dispositivos”.