工具与软件:
将 SPI 与 DMA 和 spidev 一起使用时、ioctl 从不会在特定情况下返回。
最简单的复制方法是使用等于 spidev 最大传输大小(默认为4096)的传输大小。
为了避免死锁、假如您改用较小的传输大小、会在以后的某个时间(随机传输次数之后)死锁。
复制步骤(本示例使用 spi0):
1.在设备树中添加 DMA 到 SPI (如果尚未添加):
dmas = <&main_pktdma 0xc300 0>, <&main_pktdma 0x4300 0>; dma-names = "tx0", "rx0";
2.创建一个4096字节的空文件以用作测试传输:
dd if=/dev/zero of=zeros bs=4096 count=1
3.运行 spidev_test:
spidev_test -D /dev/spidev0.0 -i zeros -b 32
在这之后,你永远不会回到 shell ,它被卡在 ioctl 调用的某个地方。 我猜可能是 SPI/DMA/spidev 驱动程序中断、计时或一些竞态条件等存在一些问题
