当前位置: 技术问答>linux和unix
请教linux下spi驱动问题
来源: 互联网 发布时间:2017-04-01
本文导语: 我内核中添加了spi驱动相关选项,编译运行后 cat /proc/devices 显示已经有spi驱动设备节点。/sys/bus/platform/devices/ 目录下也已经有spi 但是/dev 目录下没有spi设备。请问我该怎么操作作呢?因为我需要在应用程序中操作...
我内核中添加了spi驱动相关选项,编译运行后 cat /proc/devices 显示已经有spi驱动设备节点。/sys/bus/platform/devices/ 目录下也已经有spi
但是/dev 目录下没有spi设备。请问我该怎么操作作呢?因为我需要在应用程序中操作spi接口(打开,读写等操作),用来与外部spi设备通信。请问我我该怎么实现?
我看网上有的说需要在添加内核驱动的时候选择 user mode spi device driver support 。我已经添加了,但还是不行。
root /$ find / -name '*spi*'
/sys/devices/platform/mxc_spi.0
/sys/devices/platform/mxc_spi.0/spi_master
/sys/devices/platform/mxc_spi.0/spi_master/spi1
/sys/devices/platform/mxc_spi.0/spi1.1
/sys/bus/platform/devices/mxc_spi.0
/sys/bus/platform/drivers/mxc_spi
/sys/bus/platform/drivers/mxc_spi/mxc_spi.0
/sys/bus/platform/drivers/lcd_spi
/sys/bus/platform/drivers/spi_imx
/sys/bus/spi
/sys/bus/spi/devices/spi1.1
/sys/bus/spi/drivers/spidev
/sys/class/spi_master
/sys/class/spi_master/spi1
/sys/class/spidev
/sys/module/spidev
/usr/src/linux/include/linux/spi
/usr/src/linux/include/linux/spi/spidev.h
但是/dev 目录下没有spi设备。请问我该怎么操作作呢?因为我需要在应用程序中操作spi接口(打开,读写等操作),用来与外部spi设备通信。请问我我该怎么实现?
我看网上有的说需要在添加内核驱动的时候选择 user mode spi device driver support 。我已经添加了,但还是不行。
root /$ find / -name '*spi*'
/sys/devices/platform/mxc_spi.0
/sys/devices/platform/mxc_spi.0/spi_master
/sys/devices/platform/mxc_spi.0/spi_master/spi1
/sys/devices/platform/mxc_spi.0/spi1.1
/sys/bus/platform/devices/mxc_spi.0
/sys/bus/platform/drivers/mxc_spi
/sys/bus/platform/drivers/mxc_spi/mxc_spi.0
/sys/bus/platform/drivers/lcd_spi
/sys/bus/platform/drivers/spi_imx
/sys/bus/spi
/sys/bus/spi/devices/spi1.1
/sys/bus/spi/drivers/spidev
/sys/class/spi_master
/sys/class/spi_master/spi1
/sys/class/spidev
/sys/module/spidev
/usr/src/linux/include/linux/spi
/usr/src/linux/include/linux/spi/spidev.h
|
不需要选择user mode spi device driver support,假如使用内核自带的SPI驱动的话,就需要选择user mode spi device driver support。
SPI子系统框架中注册spi_device 的注册需要在arch/arm/mach-xx/目录的版文件中添加spi_board_info(配置spi设备的基本特性包括频率,模式,片选信号),这样会在/sys/bus/spi/device/下产生spi设备节点,但是/dev目录下的设备节点需要自己手动创建或者在spi设备驱动中probe函数中添加自动创建设备节点的代码例如:
data_spi->devt = MKDEV(SPI_MAJOR,0);
device_create(spi_class,&spi_dev->dev,data_spi->devt,data_spi,"mp");
spi_class = class_create (THIS_MODULE,"mp");
这样就会在/dev目录下产生mp设备节点
SPI子系统框架中注册spi_device 的注册需要在arch/arm/mach-xx/目录的版文件中添加spi_board_info(配置spi设备的基本特性包括频率,模式,片选信号),这样会在/sys/bus/spi/device/下产生spi设备节点,但是/dev目录下的设备节点需要自己手动创建或者在spi设备驱动中probe函数中添加自动创建设备节点的代码例如:
data_spi->devt = MKDEV(SPI_MAJOR,0);
device_create(spi_class,&spi_dev->dev,data_spi->devt,data_spi,"mp");
spi_class = class_create (THIS_MODULE,"mp");
这样就会在/dev目录下产生mp设备节点
|
需要在arch/arm/mach-xx/目录的版文件中添加spi_board_info(主要是配置你的spi设备的基本特性包括频率,模式,片选信号),并注册,这样才会产生spi的设备节点。
|
有些设备文件可以手动添加。
|
可以看看 kernel下的Documentation下的spi文档
|
实在不行,把spi驱动做成char型驱动,直接操作硬件接口