linux spi驱动与应用调用流程
来源:互联网 发布:网易域名管理网站 编辑:程序博客网 时间:2024/05/21 11:41
linux spi驱动与应用调度流程
一. 驱动注册流程
1. static int nuc970_spi1_probe(struct platform_device *pdev)
2. err = spi_bitbang_start(&hw->bitbang);
3. INIT_WORK(&bitbang->work, bitbang_work);//初始化工作队列
4. INIT_LIST_HEAD(&bitbang->queue);//初始化链表
5. master->transfer = spi_bitbang_transfer;//绑定spi传输函数(这里只是初始化,真正调用该函数是在应用程序部分,第二部分会讲到,只需记住这个关键的函数)
5.1 将应用层spi传输的数据加入到链表中,同时将数据提交给队列bitbang->work
list_add_tail(&m->queue, &bitbang->queue);//m->queue加入到第4点的bitbang->queue链表中
queue_work(bitbang->workqueue, &bitbang->work);//提交给bitbang->workqueue队列,这使将调用第3点的bitbang_work函数
二. 应用程序调用流程
1. spidev.c (SPI设备层,对应应用程序打开的open\read\write...API)
1. 该文件的内部读、写函数最终都会调用核心层spi.c的API向底层驱动交互数据
1. spi.c(SPI核心层)
1. int spi_write_then_read(struct spi_device *spi, const void *txbuf, unsigned n_tx, void *rxbuf, unsigned n_rx)
2. status = spi_sync(spi, &message);
3. __spi_sync(spi, message, 0);
4. status = spi_async_locked(spi, message);
5. __spi_async(spi, message);
6. master->transfer(spi, message);//这个传输函数是个关键函数,将调用第一.5,这样就将应用与驱动挂起勾了
一. 驱动注册流程
1. static int nuc970_spi1_probe(struct platform_device *pdev)
2. err = spi_bitbang_start(&hw->bitbang);
3. INIT_WORK(&bitbang->work, bitbang_work);//初始化工作队列
4. INIT_LIST_HEAD(&bitbang->queue);//初始化链表
5. master->transfer = spi_bitbang_transfer;//绑定spi传输函数(这里只是初始化,真正调用该函数是在应用程序部分,第二部分会讲到,只需记住这个关键的函数)
5.1 将应用层spi传输的数据加入到链表中,同时将数据提交给队列bitbang->work
list_add_tail(&m->queue, &bitbang->queue);//m->queue加入到第4点的bitbang->queue链表中
queue_work(bitbang->workqueue, &bitbang->work);//提交给bitbang->workqueue队列,这使将调用第3点的bitbang_work函数
二. 应用程序调用流程
1. spidev.c (SPI设备层,对应应用程序打开的open\read\write...API)
1. 该文件的内部读、写函数最终都会调用核心层spi.c的API向底层驱动交互数据
1. spi.c(SPI核心层)
1. int spi_write_then_read(struct spi_device *spi, const void *txbuf, unsigned n_tx, void *rxbuf, unsigned n_rx)
2. status = spi_sync(spi, &message);
3. __spi_sync(spi, message, 0);
4. status = spi_async_locked(spi, message);
5. __spi_async(spi, message);
6. master->transfer(spi, message);//这个传输函数是个关键函数,将调用第一.5,这样就将应用与驱动挂起勾了
阅读全文
0 0
- linux spi驱动与应用调用流程
- Linux spi驱动框架之执行流程
- Linux spi驱动框架之执行流程
- LINUX驱动之SPI子系统之三基本的调用流程
- spi 驱动工作流程
- spi驱动数据传输流程
- spi驱动流程学习
- linux驱动调用流程笔记
- spi子系统调用流程
- Linux spi驱动框架之执行流程-nuc970-att7022
- Linux SPI 子系统驱动笔记之Linux spi设备驱动与SPI控制器驱动的匹配问题
- linux spi设备驱动中probe函数何时被调用
- linux spi驱动开发学习(四)-----spi驱动程序完整流程分析
- SPI驱动流程(S3C2440)
- linux spi驱动
- linux spi驱动分析
- linux spi驱动分析
- linux spi驱动分析
- 173.n-1webview的使用字体切换
- 异步Lambda表达式问题的探索
- oracle_home克隆
- Shell while循环
- 为了生活所做的努力
- linux spi驱动与应用调用流程
- 数据结构之单链表
- 详细讲解下HTML中的<form>和<input>的用法
- 2017 计蒜之道 初赛 第二场 百度的科学计算器(简单)
- C++读取整行的方法
- epoll_thred_queue
- 集合类框架
- LeetCode 167. Two Sum II
- <scrapy>python 爬虫框架scrapy安装