BeagleBone BlackでSPIドライバをバインドするのに問題があります。問題のドライバはltc2947-spi
Linuxのメインラインにありますが、ビーグルボーンカーネルツリーにはありません。作業を開始したら、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のピンはに対応し、すでにバインドされていることを
確認してバインディングを解除します。spi1
spidev
% 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