一.device tree中的写法

二. mailbox框架 (driver/mailbox/mailbox.c)

structmbox_controller {struct device *dev; // 特定mailbox驱动probe时赋值 dev = &pdev->devconst struct mbox_chan_ops *ops; // mailbox channel需要实现的功能函数struct mbox_chan *chans; // mailbox channel指针数组intnum_chans; // mailbox channel个数booltxdone_irq;                        // 通过中断来判断上次传输是否完成booltxdone_poll;// 通过poll机制来判断上次传输是否完成

unsigned txpoll_period; // POLL 周期, 以ms计struct mbox_chan *(*of_xlate)(struct mbox_controller *mbox,const struct of_phandle_args *sp); // 获取特定channel的回调函数/*Internal to API*/

structhrtimer poll_hrt;structlist_head node;

};structmbox_chan {struct mbox_controller *mbox; // contronller指针

unsigned txdone_method;struct mbox_client *cl; // client指针structcompletion tx_complete; //void *active_req;

unsigned msg_count, msg_free;void *msg_data[MBOX_TX_QUEUE_LEN];

spinlock_tlock; /*Serialise access to the channel*/

void *con_priv;

};structmbox_chan_ops {int (*send_data)(struct mbox_chan *chan, void *data); // 发送数据(需要last data sent)int (*startup)(struct mbox_chan *chan); // 特定mailbox 启动void (*shutdown)(struct mbox_chan *chan); // 特定mailbox 关闭bool (*last_tx_done)(struct mbox_chan *chan); // 如果TXDONE_BY_POLL 该回调会被使用bool (*peek_data)(struct mbox_chan *chan); // 检测是否有数据

};structmbox_client {struct device *dev; // client 设备booltx_block; // block until last data is all transmitted

unsignedlongtx_tout; // max block period for timeoutboolknows_txdone; // txdone 回调,如果controller已经有txdone,则该配置无效void (*rx_callback)(struct mbox_client *cl, void *mssg); // 收到数据void (*tx_prepare)(struct mbox_client *cl, void *mssg);    // 准备数据void (*tx_done)(struct mbox_client *cl, void *mssg, intr); // 检测txdone

};

三. mailbox client 流程

通过mbox_request_channel_byname 根据"mbox-names"申请channel

创建mbox设备

通过mbox设备的write read 函数访问controller

其中write 通过调用mbox_send_message,

add_to_rbuf拷贝msg到chan->msg_data[MAX = 20]

msg_submit读取msg_data[idx],放到tx_prepare中,调用具体驱动的send message写寄存器

其中read 通过irq驱动

irq读取寄存器得到消息,调用mailbox.c中的mbox_chan_received_data,再调用client的rx_callback将得到的数据放到client->rx_buffer中

四. mailbox driver流程

配置controller属性:

申请chan,配置chan个数

配置of_xlate回调,获取chan

配置chan_ops

配置txdone判断方式

通过mailbox_controller_register 注册controller

五. 总结

driver 通过mbox_controller_register 注册controller

client 通过mbox_request_channel调用driver->startup

client 通过mbox_send_message调用driver->send_data,并等待txdone

driver 收到remote的中断读取数据调用mbox_chan_received_data将数据放到 client->rx_buffer中

linux创建mbox设备,linux mailbox模型相关推荐

  1. linux创建mbox设备,Linux运维知识之linux mailbox模型

    本文主要向大家介绍了Linux运维知识之linux mailbox模型,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 一.device tree中的写法 二. mailbox框 ...

  2. 手把手教linux驱动11-linux设备驱动统一模型-设备树

    1. 设备树概念 1.1.设备树感性认识 设备树(Device Tree),将这个词分开就是"设备"和"树",描述设备树的文件叫做DTS(Device Tree ...

  3. Linux总线、设备、驱动模型

    一.Linux总线设备驱动模型框架 从Linux2.6开始Linux加入了一套驱动管理和注册机制-platform平台总线驱动模型.platform平台总线是一条虚拟总线,platform_devic ...

  4. 【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】

    目录 1.Linux内核输入子系统概念导入 1.1 输入设备工作机制 1.2 运行框架 1.3 分层思想 2.驱动开发步骤 2.1 在init()或probe()函数中 2.2 在exit()或rem ...

  5. linux查看hid设备,linux hid设备读写

    当前位置:我的异常网» 热门搜索 » linux hid设备读写 linux hid设备读写 www.myexceptions.net  网友分享于:2013-01-21   搜索量:13次 场景:l ...

  6. linux读写红外线设备,Linux中的红外线设备(转)

    Linux中的红外线设备(转)[@more@]本文主要绍介有关Infrared与Linux之间的关系,对Infrared的种类.Linux Infrared支持的协议.架构等说明.Linux IrDA ...

  7. linux创建定时任务命令,linux下添加定时任务

    linux下添加定时任务 linux下添加定时任务 ### linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /cle ...

  8. bio linux 创建_Linux设备驱动--块设备之概念和框架以及相关结构体

    基本概念 块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到 ...

  9. Linux 总线、设备、驱动模型的探究

    学习交流加 个人qq:1126137994 个人微信:liu1126137994 学习交流资源分享qq群:962535112 之前一直做项目,做项目的过程虽然也学习到了不少知识,但是,一直没有好好研究 ...

最新文章

  1. dns (域名系统)
  2. c++引用专题之常引用
  3. 机器学习:决策树过拟合与剪枝,决策树代码实现(三)
  4. java富文本编辑器wangEditor-3.1.1的使用流程
  5. java gb13000_浅谈 GB13000
  6. 笨方法“学习python笔记之元组(tuple)
  7. select * from什么意思_SQL入门教程第15课:什么是内连接
  8. getParameterValues
  9. 魔兽争霸无法在这个计算机,win10魔兽争霸三无法初始化directx怎么办_win10魔兽争霸三不能初始化directx解决步骤...
  10. Windows系统下的IE浏览器降级
  11. 【深度学习】半监督学习入门:Mean teachers
  12. sony单反数码相机闪光灯-TTL的研究
  13. 高防服务器单机防御是什么意思?服务器防御100G是什么意思?
  14. sourcetree clone很大的项目
  15. App爬虫进阶——抓包拿不到数据怎么办
  16. SpringBoot——服务端数据校验
  17. linux挂载设备目录命令,使用mount命令进行设备或者文件系统挂载时,需要用到的设备名称位于( )目录...
  18. 实测:Python程序员全职接单,一个月收入能到多少
  19. Android大疆无人机对接大牛直播sdk视频H.264码推流
  20. jetspeed开发实战

热门文章

  1. Google 游戏开发者峰会盘点|视频合集来了!
  2. 边玩边学!15 个学编程的游戏网站!
  3. electron安装教程
  4. 将rtthread-4.0.3 移植到LS1B的踩坑记录
  5. 80 Gbps 的 USB4 2.0 要来了!
  6. 这样的AI芯片公司在2019年很危险!
  7. matlab 三维数组运算,MATLAB二维三维画图仿真数组运算
  8. 计算机工程师中级答辩内容,中级工程师论文答辩(注意事项及答辩准备)
  9. 计算机三级信息安全技术常考知识点总结
  10. 根据系统的业务需求,数据库设计可以设置三张表,分别为客户信息表、账号表、交易日志记录表,其表的具体设置如下: