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 드라이버가 공통 코어를 공유하기 때문에 두 개의 모듈이 있음에 유의하십시오).
% 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의 핀은 에 해당하며 이미 바인딩되어 있음 을
확인하여 바인딩을 해제합니다.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