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 드라이버가 공통 코어를 공유하기 때문에 두 개의 모듈이 있음에 유의하십시오).

 % 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아래 이미지에 따르면 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

관련 정보