2012-01-07 22:21:29

效果图:

理论学习后,主要是linux中spi子系统设备框架的了解后,主控制器与设备分离的思想,那么我要开始动手了。

1,  make menuconfig添加spi配置

2,platform_driver及platform_device数据结构都有了。于是在mach-tq2440.c中tq2440_devices[]结构添加里         &s3c_device_spi1,//by apple

3,接着开始make zImage。

出错,发现串口信息显示

<3>s3c2410-spi s3c2410-spi.1: No platform data supplied

s3c2410-spi: probe of s3c2410-spi.1 failed with error -2

于是查看源代码如下。

hw->master = spi_master_get(master);

hw->pdata = pdata = pdev->dev.platform_data;

hw->dev = &pdev->dev;

if (pdata == NULL) {

dev_err(&pdev->dev, "No platform data supplied\n");

err = -ENOENT;

goto err_no_pdata;

}

说明s3c24xx_spi_probe函数中的pdev->dev.platform_data没有赋值。

Pdata到底应该赋什么值呢?继续从代码中找线索

master->num_chipselect = hw->pdata->num_cs;

master->bus_num = pdata->bus_num;

搜索了下num_cs及bus_num都是属于s3c2410_spi_info结构的。于是乎,之前网上也查找过相关移植。需要加s3c2410_spi_info结构的数据。于是在devs.c中添加如下代码。

//add by apple

#include <mach/spi.h>

#include <mach/regs-gpio.h>

//add by apple

static struct s3c2410_spi_info s3c2410_spi1_platdata = {

.pin_cs = S3C2410_GPG3,

.num_cs = 1,

.bus_num = 0,

};

struct platform_device s3c_device_spi1 = {

.name                  = "s3c2410-spi",

.id                = 1,

.num_resources         = ARRAY_SIZE(s3c_spi1_resource),

.resource   = s3c_spi1_resource,

.dev              = {

.dma_mask = &s3c_device_spi1_dmamask,

.coherent_dma_mask = 0xffffffffUL,

.platform_data = & s3c2410_spi1_platdata,  //add by apple

}

};

4,重新make zImage,下载后,串口没有提示任何spi的信息。于是下载文件系统。在sys/bus/platform/device看到了spi的设备文件信息。但是/dev下确实没有spi设备信息。

5,编译了spidev_test.c

方法如下:

修改头文件#include <linux/spi/spidev.h>为

#include </study/opt/EmbedSky/linux-2.6.30.4/include/linux/spi/spidev.h>

于是保存退出,执行arm-linux-gcc spidev_test.c -o spidev_test命令即可产生一个spidev_test的可执行文件。从linux虚拟中Copy到PC上。当然也可以用如下方法

arm-linux-gcc –I /study/opt/EmbedSky/linux-2.6.30.4/include spidev_test.c -o spidev_test就不用修改头文件路径了。

6,copy到文件系统。通过“传输”->“zmodem上传列表”中选spidev_test后点击“确定”,启动开发板,进入sbin文件夹或其他文件夹后,选中“传输”->“开始上传zmodem列表”即可完成上传文件至开发板了。然后需要用命令chmod 777 spidev_test来修改权限。

7,./spidev_test即可执行测试程序。果然显示出错。

can't open device: No such file or directory

Aborted

8,再来,我做了如下修改,把spi设备及平台都添加了。

A, 在tq2440_machine_init函数中,添加

spi_register_board_info(s3c2410_spi1_board, ARRAY_SIZE(s3c2410_spi1_board));//by apple

s3c24xx_fb_set_platdata(&tq2440_fb_info);

B, 在mach-tq2440.c中添加数据

static struct spi_board_info s3c2410_spi1_board[] = {

[0] = {

.modalias = "spidev",

.bus_num        = 1,

.chip_select        = 0,

.irq = IRQ_EINT9,

.max_speed_hz         = 500*1000,

},

};

C, 添加头文件

#include <linux/spi/spi.h>

#include <mach/spi.h>

D, 把devs.c中的.bus_num统一改成1

E,  编译make zImage 通过。烧录到开发板。

9,查看/dev文件夹下信息。有了是spidev1.0

10,下载并运行spidev_test测试程序。但是同样显示

can't open device: No such file or directory

Aborted

怎么可能呢?我的dev下都找到设备号了呀!于是再看源码中有提示,默认的设备是/dev/spidev1.1.所以我该了下-D参数。Linux下Spi驱动回路测试成功!

Linux Spi驱动移植小结的更多相关文章

  1. linux驱动基础系列--linux spi驱动框架分析

    前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...

  2. linux驱动基础系列--linux spi驱动框架分析(续)

    前言 这篇文章是对linux驱动基础系列--linux spi驱动框架分析的补充,主要是添加了最新的linux内核里设备树相关内容. spi设备树相关信息 如之前的文章里所述,控制器的device和s ...

  3. Linux spi驱动分析(二)----SPI核心(bus、device_driver和device)

    一.spi总线注册 这里所说的SPI核心,就是指/drivers/spi/目录下spi.c文件中提供给其他文件的函数,首先看下spi核心的初始化函数spi_init(void).程序如下: 点击(此处 ...

  4. linux网卡驱动移植

    这里重要的是物理层PHY receiver,MAC(media access control)层,这里与软件中的协议栈不同,在硬件上MAC是PHY的下一层.DM9000A将MAC和PHY做到一起,也可 ...

  5. linux spi驱动开发学习-----spidev.c和spi test app

    一.spidev.c文件 看一个设备驱动的方法: module_init标识的入口初始化函数spidev_init,(module_exit标识的出口函数) 设备与设备驱动匹配时候调用的probe方法 ...

  6. Linux SPI驱动(一)

    转载:http://www.cnblogs.com/lknlfy/p/3265019.html (原作者注:)根据我个人所知道的,Linux SPI一直是处于被“忽略”的角色,市场上大部分板子在板级文 ...

  7. Linux网卡驱动移植--Dm9000网卡驱动分析

    1. Linux网络体系结构由以下5部分组成 ① 系统调用接口: 位于Linux网络子系统的顶部,为应用程序提供访问内核网络子系统的方法,主要指socket系统调用. ② 协议无关接口: 实现一组基于 ...

  8. Linux VGA驱动移植实验【转】

    本文转载自:http://m.blog.csdn.net/bzw73/article/details/46564275 有了前面的LCD驱动的框架,再移植VGA驱动就相当的容易了.默认在光盘中已经支持 ...

  9. linux SPI驱动——简单的gpio模拟SPI驱动测试 (二)

    1: /* 2: * Add by xuyonghong for duotin car radio fm 3: * Copyright (C) 2016-5-24 xuyonghong@duotin. ...

随机推荐

  1. MariaDB基本操作--(创建用户)(转)

    一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用户名 host:指定该用户 ...

  2. MyISAM和Innodb区别,为什么?

    事务支持 MyISAM不支持事务,而InnoDB支持. InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度, 所以最好是把多条SQL语句显 ...

  3. 解析CommandMessage

    Json 解析: void CommandMessage::ParseCmdBody() { try { Json::Reader reader; Json::Value root; if (!rea ...

  4. 工具包分享-常用工具。by-某某

    下载地址: 链接:http://pan.baidu.com/s/1hsseqm4 密码:a6rc 里面的工具全部来自互联网,本人不是工具的生产者,只是它的收集工. 都是一些很常用,顺手的工具,仅用于技 ...

  5. vins-mono中的imu参数设置

    na:加速度计的测量噪声 nw:陀螺仪的测量噪声 nba: randow walk noise随机游走噪声 nbw:randow walk noise随机游走噪声 ba:加速度计的偏差 bw:陀螺仪的 ...

  6. linux mysql 定时备份

    1.查看磁盘空间情况: 既然是定时备份,就要选择一个空间充足的磁盘空间,避免出现因空间不足导致备份失败,数据丢失的恶果! 存储到当前磁盘这是最简单,却是最不推荐的:服务器有多块硬盘,最好是把备份存放到 ...

  7. js canvas获取图片base64 dataUrl

    function getImgBase64(path, callback) { var img = new Image(); img.src = path; //图片加载完成后触发 img.onloa ...

  8. Linux Shell 用法

    目录 Shell test 命令 数值测试 字符串测试 文件测试 函数返回值 Shell test 命令 Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测 ...

  9. spring 相关注解详情(二)

    @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法 /* 数据源的属性类 */ public class DataSourcePro ...

  10. Spark入门到精通--(第十节)环境搭建(ZooKeeper和kafka搭建)

    上一节搭建完了Hive,这一节我们来搭建ZooKeeper,主要是后面的kafka需要运行在上面. ZooKeeper下载和安装 下载ZooKeeper 3.4.5软件包,可以在百度网盘进行下载.链接 ...