我正在寻找如何使用Linux内核中提供的SPI bitbang驱动,俗称
spi-gpio.c
。
我已经将它编译成一个有效的*.ko文件,首先插入了
spi-bitbang
驱动程序,现在我已经插入了我从spidriv.c
制作和编译的spi-gpio.c
驱动程序。一切顺利,dmesg | tail
中没有错误但是我找不到我刚刚添加的 SPI 设备的任何记录,除了我的 SPI 驱动程序在/sys/modules
中的条目。
坦率地说,这很荒谬,因为我读过的每篇文章都说要使用它,而且它很“简单”,但是根据我目前投入的时间,我本可以为 SPI 设备编写自己的驱动程序。
除了内核驱动程序本身给出的明显和简单的说明外,详细说明我如何使用此驱动程序在
/dev
中获取条目,因为它们显然没有注册任何类型的设备。
我试过的: 使用spi-bitbang驱动程序
我的自定义 SPI 驱动程序:
// led sck sda rst a0 cs w h
// 332, 329, 330, 335, 336, 338, 128, 160
#define DRIVER_NAME "spidriv"
#define SPI_MISO_GPIO 334
#define SPI_MOSI_GPIO 330
#define SPI_SCK_GPIO 329
#define SPI_N_CHIPSEL 338
#include "spi-gpio.c"
我的安装过程:
$ sudo rmmod spi_bitbang
$ sudo modprobe spi_bitbang
$ sudo insmod spidriv.ko
# No (recent) errors in dmesg
$ lsmod | grep spi
spidriv 16384 0 # My driver
spi_bitbang 16384 1 spidriv
spi_pxa2xx_platform 28672 0
安装内核模块后 /sys/class/spi* 或 /dev* 中没有任何内容。
我听说必须创建设备树条目的传言,如果我需要这样做,请逐步帮助我,因为我从未在 Linux 中与设备树系统交互(尽管我是 Linux 的长期用户,甚至编写我自己的基本内核模块)和文档似乎不存在或过于复杂以至于难以理解!
这个项目花了我几个星期的时间(实际上只是将一个 ST7735 显示器连接到我自制的 WiFi 路由器)这让我抓狂,我写了我自己的 bit-banged SPI C 库,但它不够快,我需要一个内核级别SPI 接口,真正提高带宽。