Linux设备驱动剖析之SPI(一)

写在前面

初次接触SPI是因为几年前玩单片机的时候,由于普通的51单片机没有SPI控制器,所以只好用IO口去模拟。最近一次接触SPI是大三时参加的校内选拔赛,当时需要用2440去控制nrf24L01,从而实现数据的无线传输。nrf24L01是一种典型的SPI接口的2.4GHz无线收发器,当时搞了很久,由于时间比较紧,而且当时根本不熟悉Linux的SPI子系统,香港空间,最后虽然采用IO口模拟SPI的方式勉强实现了,但是这根本就不符合Linux驱动的编程规范,或者说是在破坏Linux、污染kernel。

根据我个人所知道的,香港服务器,Linux SPI一直是处于被“忽略”的角色,市场上大部分板子在板级文件里都没有关于SPI的相关代码,而大部分讲驱动的书籍也没有专门的一章来讲述关于Linux SPI方面的内容,与IIC相比,香港服务器,SPI就是一个不被重视的“家伙”,为什么?我也不知道。为了帮SPI抱打不平,我决定基于Linux-2.6.36,说说Linux中SPI子系统。

先给出Linux SPI子系统的体系结构图:

SPI子系统体系结构

下面开始分析SPI子系统。

Linux中SPI子系统的初始化是从drivers/spi/spi.c文件中的spi_init函数开始的,看看它的定义:

__init spi_init(void)00001026 {00001027int status;00001028 00001029buf = kmalloc(SPI_BUFSIZ, GFP_KERNEL);00001030if (!buf) {00001031status = -ENOMEM;00001032goto err0;00001033}00001034 00001035status = bus_register(&spi_bus_type);00001036if (status < 0)00001037goto err1;00001038 00001039status = class_register(&spi_master_class);00001040if (status < 0)00001041goto err2;;00001043 00001044 err2:00001045bus_unregister(&spi_bus_type);00001046 err1:00001047kfree(buf);00001048buf = NULL;00001049 err0:00001050return status;00001051 }只有一条路不能拒绝——那就是成长的路。

Linux设备驱动剖析之SPI(一)

相关文章:

你感兴趣的文章:

标签云: