Android SMD数据通信概述

Qualcomm平台qcril初始化及消息处理流程(原) 本节主要来介绍Qcril的初始化流程以及消息在Qcril中如何传递。 Android平台不同厂商的AP侧可以相同,但是Modem侧肯定会有很大的差异,RILC要解决一个问题就是适配不同厂商的Modem,为了达到兼容性要求,Android在AP与Modem之间搭建了RILC的框架,由不同的Modem厂商将自己的协议连接到AP侧。对于高通平台来说,他的RILC就是QCRIL。 阅读详情

在Linux中,基于SMD的数据通信是以信道的形式作为一个设备存在的,作为一种双向信道,其接口的实现遵循Linux设备驱动规范。在Qucalcomm平台上,SMD的缓冲大小为8192bit,最大信道数为64,SMD的头大小为20bit。

SMD的相关代码实现主要位于aurora\msm\msm\arch\arm\mach-msm目录下。主要文件包括:smd.c、smd_nmea.c、smd_qmi.c、smd_rpcrouter.c、smd_rpcrouter_clients.c、smd_ rpcrouter_device.c、smd_rpcrouter_servers.c、smd_tty.c等。

SMD信道需要同时维护接收信道、发送信道的状态和数据信息,SMD的信道定义如下:

struct smd_channel {
        volatile struct smd_half_channel *send; //发送握手信道
        volatile struct smd_half_channel *recv; //接收握手信道
        unsigned char *send_buf; //发送信道数据
        unsigned char *recv_buf; //接收信道数据
        unsigned buf_size;
        struct list_head ch_list; //信道列表
        unsigned current_packet;
        unsigned n;
        void *priv;
        void (*notify)(void *priv, unsigned flags);
        int (*read)(smd_channel_t *ch, void *data, int len); //读数据
        int (*write)(smd_channel_t *ch, const void *data, int len); //写数据
        int (*read_avail)(smd_channel_t *ch); //是否可读
        int (*write_avail)(smd_channel_t *ch); //是否可写
        int (*read_from_cb)(smd_channel_t *ch, void *data, int len);
        void (*update_state)(smd_channel_t *ch);
        unsigned last_state;
        char name[20];
        struct platform_device pdev;
        unsigned type;
    };

共享信道的信道状态在其握手信道中记录,握手信道的定义如下:

struct smd_half_channel {
        unsigned state;
        unsigned char fDSR;
        unsigned char fCTS;
        unsigned char fCD;
        unsigned char fRI;
        unsigned char fHEAD; //头部
        unsigned char fTAIL; //尾部
        unsigned char fSTATE; //状态
        unsigned char fUNUSED;
        unsigned tail;
        unsigned head;
    };

在实际实现中,SMD信道分配被封装在SMEM(Shared Memory Manager)模块中,系统提供了smem_init()、smem_alloc()、smem_get_entry()等内存操作函数供SMD和SMSM操作。

SMD的状态共有SMD_SS_CLOSED、SMD_SS_OPENING、SMD_SS_OPENED、SMD_SS_FLUSHING、SMD_SS_CLOSING、SMD_SS_RESET、SMD_SS_RESET_OPENING等。其变化过程如图1-1所示。

图1-1  SMD的状态机

Android 4G上网全流程解析:从PPP协议到数据收发(附详细流程图) 本文深入解析Android 4G上网全流程,从PPP协议到数据收发的核心技术细节。通过剖析基带芯片、协议栈优化及Android网络子系统架构,揭示4G通信背后的完整数据通路,并分享性能优化与调试技巧,帮助开发者深入理解移动数据通信机制。 阅读详情

相关推荐

高通平台smd分析及smem共享内存的创建笔记

高通平台smd分析及smem共享内存的创建笔记 tags : linux driver 最近研究高通平台的音频相关,由于实在受不了没头没尾的数据,所以就顺便研究了一下smd以及smem,这篇博客就是一个笔记,比较杂乱,主要用来备忘! 网上找到一些关于smd的文章,但是基本上都仅限于smd,只讲述了smd的channel相关,但是channel的内存到底哪里来的,smem到底是怎么回事好像...

whshiyun的专栏 1万+

阅读笔记_QCRIL

参考文档 80-n4863-1_c_qmi_idl_qcci_qcsi_overview IDLInterface Definition Language QCSI: QMI Common Service Interface QCCI QMI Common Client Interface IPC InterProcess Communication 是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管道)...

4AM_明朝百晓生 1452

SDX55如何使用adb命令读写AT指令

adb shell cat /dev/smd8 & # echo -e "AT\r\n" > /dev/smd8 # AT OK 查看当前注册是LTE还是NSA或者SA echo -e "AT+CPSI?\r\n" > /dev/smd8 +CPSI: LTE,Online,460-01,0x1824,9398815,248,EUTRAN-BAND3,1650,5,5,-100,-694,-395,15

sdrgtywretyeruet的专栏 1449

高通QMI协议

QMI(Qualcomm MSM Interface,官方名称应该是Qualcomm Message Interface)是高通用来替代OneRPC/DM的协议,用来与modem通信。 QMI协议定义了多个服务: DMS(设备管理Device Management) 提供载入 设备信息的功能 NAS(网络访问Network Access)提供欧冠你注册网络的动作 WDS(数据连接) PDS(GP...

weixin_30702887的博客 4678

linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)

本系列导航: linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析) linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构) linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解) 从adsp获取数据的方法分为同步、异步两种方式,但一般在实际使用中使用异步方式,因为同步获取数据会因

Radia的专栏 1万+

李大勇matlab密码,基于MatlabSimulink的太阳能热水系统仿真研究 沈超.doc

基于MatlabSimulink的太阳能热水系统仿真研究 沈超中国工程热物理学会 工程热力学与能源利用 编号:141090基于Matlab/Simulink的太阳能热水系统仿真研究沈 超1 1 余 鹏1 李洪欣1 魏新利2郑州大学土木工程学院,郑州 450001郑州大学化工与能源学院,郑州 45...

weixin_42298437的博客 1340

android 使用SMD(共享内存)作為跨processes溝通媒介

前言: 多核間的通訊 在智慧型手機SOC平台中,為了保證個別功能在平台上的流暢運行,都會依照功能使用專門的處理器來處理。如在Qucalcomm MSM 7K 平台上,就包含了4 個處理器內核,Qucalcomm MSM 7K 平台採用ARM 9(mARM,modemARM)處理基帶業務;採用mDSP(Modem DSP)來處理協議protocol的事情;採用ARM 11(aARM ,applic

1802

PostgreSQL中idle in transaction状态的5个隐藏危害及实战解决方案

本文深入剖析了PostgreSQL中`idle in transaction`连接状态的五大隐藏危害,包括内存与锁泄漏、VACUUM受阻导致表膨胀、事务ID加速消耗、连接池资源耗尽以及增加故障排查复杂度。文章提供了基于`pg_stat_activity`视图的监控方法、识别高危事务的SQL脚本,并给出了从数据库参数调优(如设置`idle_in_transaction_session_timeout`)到应用层编码规范与连接池配置的完整实战解决方案。

zzz56的博客 234

Android多媒体编程从初学到精通

深入浅出,依靠深厚行业经验讲透技术原理  循序渐进,详解典型应用案例提升实战能力 《Android多媒体编程从初学到精通》 基本信息 作者: 苗忠良    宛斌    丛书名: 华清远见系列图书 出版社:电子工业出版社 ISBN:9787121125324 上架时间:2011-4-29 出版日期:2011 年5月 http://product.china-pub.com/198...

weixin_33963189的博客 306

保姆级教程:在Ubuntu 22.04上用Conda搞定nuPlan数据集环境(Python 3.9 + PyTorch)

本文提供了一份详细的Ubuntu 22.04环境下使用Conda配置nuPlan自动驾驶数据集的保姆级教程,涵盖Python 3.9安装、Conda环境管理、PyTorch配置及数据集可视化验证等关键步骤,帮助开发者高效搭建开发环境。

weixin_29061997的博客 253

uniapp原生安卓插件开发之路

声明: 我的功能需求:全局悬浮框,也就是在其他应用上依旧能悬浮。查遍uni文档,无法实现,甚至native.js也无法实现,无奈只能走上原生插件开发这条不归路了。(吐槽:天天写前端js,突然写了下android简直要炸,public static String啥的,var不香嘛,不过别人严谨肯定还是有别人道理的,加油吧,争取能入个门!) 本人不懂安卓开发,完全安卓小白,所以安卓方面可能表达的不是很好,安卓代码可能写的不优美,但我功能最终还是实现了。但是为了需求,能力总能被“逼”出来。有描述错误的还望指正

Jone's Area 1万+

《深入浅出Android多媒体编程》即将出版,非常期待~~~~~~~

《深入浅出Android多媒体编程》即将有人 民邮电出版社出版 内容简介<br />     在本书中,主要围绕着Android多媒体编程进行,纵向上,从共享内存、IPC通信、HAL、原生服务、JNI调用以及多媒体的图像、音频、视频框架等 多个层次和子系统着手,横向上,贯穿了移动互联网、Android体系应用框架、OpenMAX多媒体框架、渲染机制等方面,深入浅出的介绍了开发多媒体 应用需要了解和掌握的多媒体框架及相关知识。涉及到了Android多媒体编程的所有主要内容。<br />   

ccskyer的专栏 1944

内模控制(IMC)——理论、应用与实践

内模控制方法的核心思想是利用被控对象的数学模型(即内模)构建控制器,使得控制器可以“预知”被控系统的动态响应,从而在控制输入中提前补偿模型的固有特性和扰动影响。常见的内模控制结构中,将系统分为无延迟部分和扰动部分,并利用内部模型预测输出值,再通过反馈回路进行误差修正。utuimctufbtutui​mctuf​bt其中,uimctu_imc(t)ui​mct为内模预测得到的预补偿控制量,ufbtu_fb(t)uf​bt。

闲人编程的博客 2628

《深入浅出Android多媒体编程》8月份即将上市

《深入浅出Android多媒体编程》8月份即将上市。

942

【WRF工具】WRF 模型输出可视化工具 RIP4

【WRF工具】WRF 模型输出可视化工具 RIP4

WW、forever的博客 1593

避坑指南:新手爬百度图片3个致命错,改完批量保存本地(亲测有效)

新手爬百度图片的核心是“绕开静态HTML,抓准API接口+处理反爬+提取原图”,改完本文提到的3个核心错,就能稳定批量保存高清图片。这套思路可复用在其他图片网站(如必应图片、360图片),只需修改API接口和参数即可。如果想进一步优化,可添加代理IP池、多线程下载(新手不建议,容易触发反爬)、图片去重等功能!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1586

I2S,PCM,IOM-2,I2C,SPI,UART,GPIO

概述 I2S,PCM,IOM-2都是数字音频接口,传数据的。 I2C,SPI,UART,GPIO是控制接口,传控制信令的。 I2S I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频 数据传输而制定的一种总线标准。      I2S至少3根线: 1. 比特时钟线 首先解释一下比特时钟线。比特时钟线上对每个bit有一个脉冲,比特时钟频率是2×采样频率

Android系统攻城狮 1527

2、硬件工程师笔试面试汇总(2025版本)

本文摘要:文章系统梳理了硬件工程师笔试面试中的电子元器件知识要点,涵盖电阻、电容、电感、二极管、三极管、MOS管等器件的工作原理、选型要点和应用场景。详细解析了UART、I2C、SPI等通信协议的特点及实现方式,并探讨了电源管理、信号处理、PCB设计等核心问题。针对常见电路如放大电路、滤波电路、逻辑电路等提供了深入分析,同时介绍了示波器使用、单片机系统设计等实用技能。文章还包含器件封装、电平转换、时序分析等工程实践内容,并附有相关真题解析和仿真实验指导,为硬件工程师提供全面的技术参考。

XU157303764的博客 9003

物联网卡

1.1 什么是物网卡? 物联网卡是基于三大运营商(移动、联通、电信)提供物联网专用号码段(11位或13位)移动通信接入服务,其硬件和外观与普通SIM卡完全相同,承载智能硬件和物联网设备的专用功能,采用专用号码段和独立的网络单元,充分满足智能硬件和物联网对设备联网的管理需求,以及集团公司连锁企业的移动信息应用需求。 这种卡一般没有语音通话和短信服务,也没有乱七八糟的其他服务资费,是一种专门用来支持各...

蓝晴明的博客 1511

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

软考——架构师笔记

该文章可作为系统架构设计师考试的参考笔记。

weixin_43930239的博客 696

高通QMI调试记录

高通QMI调试记录

我有一壶酒 3229

高通平台,AP和CP端相关qmi接口,AT命令,NV等porting目录

由于现在主要负责modem(CP),AP端相关code的porting,现在做一下porting目录的相关整理,以便日后参考! 新项目一开始需要porting一些必须的qmi接口,常用AT命令的相关代码,RF的配置等。 1 qmi接口: CP端 :modem_proc/mmcp/mmode/qmi/~ qmi_voice.c qmi_voice.h qmi_voice_cm_if.c

嘿v小米的博客 9598
上一篇: Linux设备驱动模型 .
下一篇: Qualcom camera tuning
TopicDev
博客等级 码龄14年 128粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值