BeagleBone Blackにltc2947-spiドライバをバインド

BeagleBone Blackにltc2947-spiドライバをバインド

BeagleBone BlackでSPIドライバをバインドするのに問題があります。問題のドライバはltc2947-spiLinuxのメインラインにありますが、ビーグルボーンカーネルツリーにはありません。作業を開始したら、PRを提出して追加します。

次のコマンドを使用して、ltc2947ドライバをツリー外部モジュールにコンパイルしました。この倉庫(またフラッグハブ)。

 % sudo apt-get install linux-headers-$(uname -r)
 % find /lib/modules/$(uname -r) -iname "*ltc29*"
 % make

モジュールはよくコンパイルされ、modinfo期待される出力を生成します。

 % sudo modinfo ltc2947-spi.ko                                  
filename:       /home/lily/kmod-ltc2947/ltc2947-spi.ko
license:        GPL
description:    LTC2947 SPI power and energy monitor driver
author:         Nuno Sa <[email protected]>
alias:          spi:ltc2947
depends:        ltc2947-core
name:           ltc2947_spi
vermagic:       5.4.70-ti-r19 SMP preempt mod_unload modversions ARMv7 p2v8 

そして、insmodモジュールが正しく接続されているようです(チップのSPIとI2Cドライバが共通のコアを共有するため、2つのモジュールがあることに注意してください)。

 % sudo insmod ./ltc2947-core.ko && sudo insmod ./ltc2947-spi.ko
 % grep ltc2947 /proc/modules
ltc2947_spi 16384 0 - Live 0x00000000 (O)
ltc2947_core 24576 1 ltc2947_spi, Live 0x00000000 (O)
 % tree /sys/bus/spi/drivers/ltc2947 
/sys/bus/spi/drivers/ltc2947
├── bind
├── module -> ../../../../module/ltc2947_spi
├── uevent
└── unbind

1 directory, 3 files

ここでは、ドライバをSPIバスのデバイスにバインドする必要があります。 mikroBus Capeを介してSPIに接続されているMicroe VCP Monitor 3 Clickを使用しています。ボードがスロット1にあるので、ピン接続は次のようになります。

  • P9_28:CS
  • P9_29:笑顔
  • P9_30:目​​視
  • P9_31:SCK

チップ選択ピンをどこに割り当てるべきか、どの文字列をエコーするかを決定する方法はまだ明確ではありません/sys/bus/usb/drivers/ltc2947/bind

spi1下の画像によると、Capeのピンはに対応し、すでにバインドされていることをビーグルボーンブラックSPIピンアウト 確認してバインディングを解除します。spi1spidev

 % echo "spi1.0" | sudo tee -a /sys/bus/spi/drivers/spidev/unbind
spi1.0
 % echo "spi1.1" | sudo tee -a /sys/bus/spi/drivers/spidev/unbind
spi1.1
 % tree /sys/bus/spi/drivers/spidev                              
/sys/bus/spi/drivers/spidev
├── bind
├── module -> ../../../../module/spidev
├── spi0.0 -> ../../../../devices/platform/ocp/48000000.interconnect/48000000.interconnect:segment@0/48030000.target-module/48030000.spi/spi_master/spi0/spi0.0
├── spi0.1 -> ../../../../devices/platform/ocp/48000000.interconnect/48000000.interconnect:segment@0/48030000.target-module/48030000.spi/spi_master/spi0/spi0.1
├── uevent
└── unbind

3 directories, 3 files

ただし、ドライバにバインドしようとするとltc2947エラーが発生します"/sys/bus/spi/drivers/ltc2947/bind: No such device"

 % echo "spi1" | sudo tee -a /sys/bus/spi/drivers/ltc2947/bind 
spi1
tee: /sys/bus/spi/drivers/ltc2947/bind: No such device
 % echo "spi1.0" | sudo tee -a /sys/bus/spi/drivers/ltc2947/bind
spi1.0
tee: /sys/bus/spi/drivers/ltc2947/bind: No such device
 % echo "spi1.1" | sudo tee -a /sys/bus/spi/drivers/ltc2947/bind
spi1.1
tee: /sys/bus/spi/drivers/ltc2947/bind: No such device

bind下のエコーは/sys/module同じ結果を生成します。

 % echo "spi1" | sudo tee -a /sys/module/ltc2947_spi/drivers/spi:ltc2947/bind  
spi1
tee: '/sys/module/ltc2947_spi/drivers/spi:ltc2947/bind': No such device

答え1

確立されたAnalog Devices Wikiページこれは私に正しい方向を教えてくれました。

現在のデバイスは、デバイスツリーを介してのみインスタンス化できます。

そのため、Beaglebone Blackの場合は、デバイスツリーオーバーレイドラフトを作成して送信しました。フルリクエストbb.org-overlaysにアクセスしてください。

VCPモニター3クリックロードでLED +抵抗を使用してテストし、以下のファイルから電圧、電流、電力、エネルギーを正常に読み取ることができます。/sys/class/hwmon/hwmon0例:

lily@beaglebone /sys/class/hwmon/hwmon0
% cat name                 
ltc2947
lily@beaglebone /sys/class/hwmon/hwmon0
% echo 1 > in0_reset_history 
lily@beaglebone /sys/class/hwmon/hwmon0
% cat in0_label            
VP-VM
lily@beaglebone /sys/class/hwmon/hwmon0
% cat in0_input
0

# Here I turned on 5V @ 12 mA to light an LED

lily@beaglebone /sys/class/hwmon/hwmon0
% cat in0_input  
5054

関連情報