在 BeagleBone Black 上绑定 ltc2947-spi 驱动程序

在 BeagleBone Black 上绑定 ltc2947-spi 驱动程序

在 BeagleBone Black 上绑定 SPI 驱动程序时遇到问题。有问题的驱动程序ltc2947-spi位于 Linux 主线中,但不在 beaglebone 内核树中。当我开始工作时,我会提交一个 PR 来添加它。

我使用以下命令将 ltc2947 驱动程序编译为树外模块这个仓库(也于github)。

 % 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 驱动程序共享一个公共核心):

 % 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 的 Mikroe VCP Monitor 3 Click。该板现在位于插槽 1 中,因此引脚连接为:

  • P9_28:CS
  • P9_29:味噌
  • P9_30:莫西
  • P9_31:SCK

我还不清楚在哪里指定片选引脚,或者如何确定要回显的字符串/sys/bus/usb/drivers/ltc2947/bind

spi1根据下图, 海角的引脚对应于,beaglebone 黑色 SPI 引脚排列 我注意到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。

我已经用 LED + 电阻器作为 VCP Monitor 3 点击负载进行了测试,并且可以成功从 下的文件中读取电压、电流、功率和能量/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

相关内容