我使用设备树覆盖文件 (dtbo) 将 i2c-2 节点上的硬件引用添加到我的设备树中。该设备是一个加速计,它实现了现有的驱动程序,可以在此处找到:https://elixir.bootlin.com/linux/v4.19.94/source/drivers/iio/accel/mma8452.c
我的设备显示iio:device0
在 /dev 目录中:
debian@beaglebone:/dev$ ls
accel log spi tty27 tty53 urandom
apm_bios loop-control spidev1.0 tty28 tty54 vcs
autofs mapper spidev1.1 tty29 tty55 vcs1
block mem spidev2.0 tty3 tty56 vcs2
btrfs-control memory_bandwidth spidev2.1 tty30 tty57 vcs3
bus mmcblk0 stderr tty31 tty58 vcs4
char mmcblk0p1 stdin tty32 tty59 vcs5
console mmcblk1 stdout tty33 tty6 vcs6
cpu_dma_latency mmcblk1boot0 tty tty34 tty60 vcsa
cuse mmcblk1boot1 tty0 tty35 tty61 vcsa1
disk mmcblk1p1 tty1 tty36 tty62 vcsa2
dri mmcblk1rpmb tty10 tty37 tty63 vcsa3
fb0 mqueue tty11 tty38 tty7 vcsa4
fd net tty12 tty39 tty8 vcsa5
full network_latency tty13 tty4 tty9 vcsa6
fuse network_throughput tty14 tty40 ttyGS0 vcsu
gpiochip0 null tty15 tty41 ttyO0 vcsu1
gpiochip1 ppp tty16 tty42 ttyO1 vcsu2
gpiochip2 ptmx tty17 tty43 ttyO2 vcsu3
gpiochip3 pts tty18 tty44 ttyO4 vcsu4
hwrng pwm tty19 tty45 ttyO5 vcsu5
i2c-0 random tty2 tty46 ttyS0 vcsu6
i2c-1 remoteproc tty20 tty47 ttyS1 vhci
i2c-2 rfkill tty21 tty48 ttyS2 watchdog
iio:device0 rtc tty22 tty49 ttyS4 watchdog0
initctl rtc0 tty23 tty5 ttyS5 watchdog1
input shm tty24 tty50 ubi_ctrl zero
ion snapshot tty25 tty51 uhid
kmsg snd tty26 tty52 uinput
我的设备还可以在以下位置查看:
debian@beaglebone:/sys/class/i2c-dev/i2c-2/subsystem/i2c-2/device/2-001c$ ls
driver modalias of_node subsystem uevent
iio:device0 name power trigger0
在这里您可以看到设备命名的具体信息:
debian@beaglebone:/sys/class/i2c-dev/i2c-2/subsystem/i2c-2/device/2-001c/iio:device0$ cat uevent
MAJOR=248
MINOR=0
DEVNAME=iio:device0
DEVTYPE=iio_device
OF_NAME=accelerometer
OF_FULLNAME=/ocp/i2c@4819c000/accelerometer@1C
OF_COMPATIBLE_0=fsl,mma8451
OF_COMPATIBLE_N=1
我的问题是,这个设备的名字从何而来iio:device0
?我认为这只是一个默认名称,因为我没有指定名称。因此,我的问题变成:如何在设备树中为我的设备指定名称?看来我想以某种方式更改 DEVNAME 。
我在 dtbo 文件中没有看到此名称的任何原因,如下所示:
/*
* MIRA custom cape device tree overlay
* Supports MMA8451Q Accelerometer
*/
/dts-v1/;
/plugin/;
#include <dt-bindings/interrupt-controller/irq.h>
/ {
/*
* Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/
*/
fragment@0 {
target-path="/";
__overlay__ {
chosen {
overlays {
MIRA_EXTENSIONS = __TIMESTAMP__;
};
};
};
};
fragment@1 {
target = <&i2c2>;
__overlay__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
accelerometer@1C {
compatible = "fsl,mma8451";
reg = <0x1C>;
interrupt-parent = <&gpio1>;
interrupts = <16 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "INT1";
};
};
};
};