Como o número do barramento i2c em / dev / i2c'x 'é designado?

4

Gostaria de saber como o número do barramento i2c é atribuído no Linux? Em uma de nossas placas de desenvolvimento legadas, temos o dispositivo escravo i2c conectado. Quando eu sondar o dispositivo usando i2cdetect , ele mostra / dev / i2c1 e / dev / i2c3 .

O que aconteceu com i2c0 e i2c1 em / dev ? Como esses números são atribuídos? Alguém pode dar algumas dicas sobre isso?

Nota : o que eu observo é que toda vez que eu inicializo, eu vejo apenas 1 e 3 e não 0 e 1. Isso não muda em todas as inicializações. Se eu quiser fazer um symlink desses i2c1 e i2c3 para i20 e i2c1, é possível?

    
por AKR 05.11.2017 / 14:31

1 resposta

3

No meu sistema, os barramentos i2c são dispositivos /dev/i2c-0 e assim por diante. Eles são chamados de adaptadores e são designados dinamicamente conforme descrito no arquivo de documentação do kernel i2c / dev-interface :

You should inspect /sys/class/i2c-dev/ or run "i2cdetect -l" to decide this. Adapter numbers are assigned somewhat dynamically, so you can not assume much about them. They can even change from one boot to the next.

sudo i2cdetect -l irá listar qual bus faz o quê, ou você pode procurar em /sys/class/i2c-dev/ :

$ sudo i2cdetect -l|sort
i2c-0   i2c             i915 gmbus ssc                 I2C adapter
i2c-1   i2c             i915 gmbus vga                 I2C adapter
i2c-2   i2c             i915 gmbus panel               I2C adapter
...

$ head /sys/class/i2c-dev/i2c-*/name
==> /sys/class/i2c-dev/i2c-0/name <==
i915 gmbus ssc

==> /sys/class/i2c-dev/i2c-1/name <==
i915 gmbus vga
...

Nota : Embora muitas vezes os números de barramento i2c sejam atribuídos dinamicamente, em algumas plataformas o Linux usará informações de um devicetree para atribuir números específicos a um adaptador i2c. Presumivelmente, algumas placas-mãe podem similarmente ter drivers de plataforma que solicitam um determinado número de barramento, para melhor representar o layout do hardware. A chamada do kernel é i2c_add_numbered_adapter() .

    
por 05.11.2017 / 15:07