<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>vessial的安全Trash Can</title>
    <link>https://wechat2rss.xlab.app/feed/f70b4cdac52ea7e980b9fa4ab8fbf79a8516f1f3.xml</link>
    <description>一个安全研究人员的自留地&#xA;(wechat feed made by @ttttmr https://wechat2rss.xlab.app)</description>
    <managingEditor> (vessial的安全Trash Can)</managingEditor>
    <image>
      <url>https://wx.qlogo.cn/mmhead/Q3auHgzwzM4ZibVbmksoKb9fKSHpsX20842QeXKXrCBTg9JN0K6LsTQ/0</url>
      <title>vessial的安全Trash Can</title>
      <link>https://wechat2rss.xlab.app/feed/f70b4cdac52ea7e980b9fa4ab8fbf79a8516f1f3.xml</link>
    </image>
    <item>
      <title>深度揭密高通4/5G移动基带消息系统和状态机</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIxMjY0NjA2Mw==&amp;mid=2247483706&amp;idx=1&amp;sn=ac274ff6efbc7cb173c841d29a08561b</link>
      <description>背景MarkDown格式可以直接github上查看https://github.com/vessial/ba</description>
      <content:encoded><![CDATA[<p>
<span>阿里安全 谢君</span> <span>2021-04-09 17:31</span> <span style="display: inline-block;"></span>
</p>

<p>背景MarkDown格式可以直接github上查看https://github.com/vessial/ba</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=df9bed72&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F6A8ibk8vw6YRmoNplzNYOTRcg8MptzK8uP6W0ZnrgcvweUrNBs2Ns0hzjeicTywH1iaibcoJ2ppVic3Cb6qVkxl4Gsw%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;"></span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.75em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">背景</span></h2><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">MarkDown格式可以直接github上查看</span></p><p style="margin-top: 0.8em;margin-bottom: 0.8em;box-sizing: border-box;line-height: inherit;orphans: 4;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><a href="https://github.com/vessial/baseband/blob/master/Qualcomm_BaseBand_Messaging_and_State_Machine.md" target="_blank">https://github.com/vessial/baseband/blob/master/Qualcomm_BaseBand_Messaging_and_State_Machine.md</a></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">本技术分析文章通过对高通的4/5G移动基带系统进行深入逆向工程提示其内部消息通信机制以及核心架构设计逻辑，本文的研究基于高通的4G基带MDM9707以及5G基带模块sdx55的固件之上分析完成，高通基带系统现在都是基于高通主流的hexagon DSP指令架构来实现，该架构非常适合应用于音视频编解码，计算机视觉等，软件无线电等应用中的浮点和向量计算，在高通骁龙处理器的子系统中大量使用，大多应用于手机，汽车，可穿戴设备以及移动通信设备中，Hexagon DSP相关信息可以从</span>这里<span style="box-sizing: border-box;">获取，运行在Hexagon DSP芯片上的操作系统QuRT是由高通设计的实时操作系统，高通基带系统所有的上层业务将会运行在该操作系统之上，阅读该技术分析文章之前，假定你已经对操作系统的原理有所了解，例如CPU调度，IPC(进程间通信)，以及基本的数据队列enqueue/dequeue的操作。</span><br/></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.75em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">消息机制简介</span></h2><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">一个系统里面运行着不同的任务，不同任务在不同的运行状态在处理相应的业务逻辑时可能需要与其它任务交换数据或者同步信息，这里面就需要操作系统的底层IPC机制来完成了，3GPP组织定义了不同移动通信技术从物理层/链路层/逻辑处理层等各种标准，例如（5GNR/4GLTE/3G WCDMA/TD-SCDMA/CDMA2000/2G /GSM等通信技术），这些技术标准在基带系统里面实现会被划分成不同的任务来维护不同的状态，处理不同的消息信令，以及维护不同通信技术的切换等操作，比如现在的大部分智能手机基带系统基本上都支持2/3/4G通信相关的技术，这些基带系统根据移动运营商支持的移动通信技术和国家区域支持的标准的不同会使用相应的移动通信技术，比如中国在3G时代中国移动使用的TD-SCDMA，而中国联通使用的是WCDMA技术，为了保证移动设备的一些基本功能的可用性（语音通信和sms短信息），比如某些地方部署了4G基站，你可以在那里使用4G LTE的（Voice-over-IP/SMS-over-IP）通信技术，在一些偏远的地区可能只部署了2G基站，这时基带系统根据环境切换到GSM的协议栈，这些功能的维护与切换从基带系统层面来讲都需要系统消息机制来配合完成。</span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">高通基带系统的消息机制建立在运行的实时操作系统QuRT之上，之前我有一篇</span>文章<span style="box-sizing: border-box;">有简单介绍过底层IPC机制，今天我将详细介绍上层业务逻辑相关的消息传递机制与数据结构。我们把运行在基带系统上的业务逻辑实体的最小单位定义为线程（thread），根据线程生命周期的不同分为以下两大类：</span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">短生命周期线程</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">驱动/任务初始化线程（Driver initiator/Services Launcher)</span></p></li><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">中断服务例程（IST)</span></p></li></ul><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">长生命周期线程</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">阻塞型消息接受线程</span></p></li></ul></ul><p style="text-align: center;"><img class="rich_pages js_insertlocalimg" data-ratio="0.9195751138088012" data-s="300,640" style="" data-type="png" data-w="659" src="https://wechat2rss.xlab.app/img-proxy/?k=3ab75f6d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YRmoNplzNYOTRcg8MptzK8uicp0KPs6NVaOppktUH2bg3ZQPwAwn3vEzt7TKTgoJnrpJ4VhUonibYAw%2F640%3Fwx_fmt%3Dpng"/></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">消息通信底层API封装简介：</span></p><pre spellcheck="false" lang="" style="box-sizing: border-box;font-family: var(--monospace);font-size: 0.9em;break-inside: avoid;text-align: left;overflow: visible;white-space: normal;background-image: inherit;background-position: inherit;background-size: inherit;background-repeat: inherit;background-attachment: inherit;background-origin: inherit;background-clip: inherit;background-color: rgb(248, 248, 248);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);border-radius: 3px;padding: 8px 4px 6px;margin-bottom: 15px;margin-top: 15px;width: inherit;"><div lang="" style="box-sizing: border-box;height: auto;overflow: hidden;background: inherit;"><p><br/></p><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">//信号发送</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">int rex_send_sigs(utcb *dst_task_obj,unsigned int signal_id);</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">//第一个参数为向目标任务发送消息的结构定义，第二个参数为要发送的信号id</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">int rex_wait_sigs(unsigned int recv_sigs_masks);</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">//第一个参数为可以允许接受信号id的掩码，每个任务最多可以设置可接受信号id个数为32个，每个任务可以接受多个信号id时，通过信号id的或操作来得到该任务可以接受信号的掩码，返回值为接受到的信号id</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">//如果是带数据的信号发送，封装底层API，类似如下</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">int send_sigs_with_dat(utcb *dst_task_obj,unsigned int signal_id,data_queue *send_data_queue);</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">int recv_sigs_with_dat(unsigned int recv_sigs_masks,data_queue *recv_data_queue);</span></pre></div></pre><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">而根据任务线程的业务功能的不同划分成以下几大类：</span></p><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">系统功能任务</span></p></li><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">通信技术协议栈分层任务</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">GSM/WCDMA/TDSCDMA/LTE L1/L2/L3相关的协议栈的任务等</span></p></li></ul><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">上层应用任务</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">IMS volte/ecall/数据服务/包服务等</span></p></li></ul><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">外设相关的任务</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">UIM/SIO/A2等</span></p></li></ul></ul><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">我在</span>这里<span style="box-sizing: border-box;">记录了高通MDM9607基带系统一次实时运行的任务快照列表。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.75em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">高通基带系统消息机制</span></h2><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">消息通信核心架构设计逻辑</span></h3><ul style="margin-top: 0.8em;margin-bottom: 0.8em;padding-left: 30px;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);" class="list-paddingleft-2"><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">兼容性</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">在新的基带芯片上面开发新的移动通信技术单元的同时，保证老的功能模块能够正常使用，例如在开发5G功能的同时，以往的4G/3G/2G功能都能够正常使用和切换。</span></p></li></ul><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">可扩展性</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">在已有的功能模块上增加新的功能，具备灵活的扩展性，而不需要作太大的软件和硬件改动。</span></p></li></ul><li style="box-sizing: border-box;white-space: pre-wrap;"><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-bottom: 0.5rem;width: inherit;"><span style="box-sizing: border-box;">低耦合性</span></p></li><ul style="padding-left: 30px;list-style-type: square;" class="list-paddingleft-2"><li style="box-sizing: border-box;"><p><span style="box-sizing: border-box;">新增的功能模块与已有系统上功能模块的耦合度低，接口少，减少引入问题的接口点和测试成本。</span></p></li></ul></ul><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">基于以上的设计理念，高通设计一套灵活的消息通信系统，一直到现在5GNR的基带系统也在用，接下来我将详细介绍该消息系统的架构，相关的算法和数据结构。</span></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">消息通信架构</span></h3><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">为了区分不同任务所接受到的消息以及任务所能处理相应消息的原语操作权限，通过接受到的消息来区分消息来源以及接受到相应消息后的相应的处理动作，高通的消息系统引入了任务消息接受体（msgr_client）和UMID（Unique Message ID）的机制，任务消息接受体由相应的任务创建生成，并通过初始注册可接受消息UMID来设置任务相应原语操作的权限，每个任务可以创建一个或者多个msgr_client，每一个UMID消息也可以注册给多个msgr_client，每一个UMID消息标示着一次相应的原语操作，在MDM9607里面定义的UMID数量多达1万多个，而在最新高通的5G基带里面可使用的UMID高达2万多，每个UMID背后都对应着相应的原语操作，UMID的值与相应的命名规则如下。</span></p><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">UMID由32位组成，结构如下表</span></h4><figure style="box-sizing: border-box;overflow-x: auto;margin-top: 1.2em;margin-bottom: 1.2em;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><table width="1140" style="width: 768px;"><thead style="box-sizing: border-box;background-color: rgb(248, 248, 248);"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Name</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">offset and length</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Comment</span></th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">tech_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">24~31 8bits</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">eg, LTE-&gt;0x04, IMS-&gt;0x15, MDM9607 0x1b, SDX55 0x20</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">mod_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">16~23 8bits</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">eg, 0xd -&gt; RRC 0xf -&gt; MAC 0x11-&gt; RLC DL</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">type_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">8~15 8bits</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">type &lt;= 0x09) </span><span style="box-sizing: border-box;">|</span><span style="box-sizing: border-box;">|</span><span style="box-sizing: border-box;"> (type &gt;= 0x11 &amp;&amp; type &lt;= 0x17,totally 0x11 type_ids</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">op_type_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">4~8 4bits</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Op entity ,eg IRAT_FROM_LTE_TO_G</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">op_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0~3 4bits</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Opcode seq, eg abort/search/startup/deinit/init/cfg etc</span></td></tr></tbody></table></figure><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">注：if type_id&gt;9 ,type_id=type_id-6</span><span style="box-sizing: border-box;">offset bit 8~15 8bits type_id list</span></p><figure style="box-sizing: border-box;overflow-x: auto;margin-top: 1.2em;margin-bottom: 1.2em;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><table width="1140" style="width: 768px;"><thead style="box-sizing: border-box;background-color: rgb(248, 248, 248);"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Type_name</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">value</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Comment</span></th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">CMD</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">1</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Command primitive</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">2</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">request</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RSP</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">3</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">response</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">4</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">indication</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">DLM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">7</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">downlink message</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">8</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">confirm</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">TMR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">9</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">timer</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x12</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">request Internal</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RSPI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x13</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Response internal</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x14</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">indication internal</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x15</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">confirm internal</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">TMRI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x16</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">timer internal</span></td></tr></tbody></table></figure><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">举个例子UMID 0x40D120E 对应的描述原语是LTE_RRC_IRAT_FROM_LTE_TO_G_RESEL_REQI，拆分结果如下:</span></p><figure style="box-sizing: border-box;overflow-x: auto;margin-top: 1.2em;margin-bottom: 1.2em;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><table width="1140" style="width: 768px;"><thead style="box-sizing: border-box;background-color: rgb(248, 248, 248);"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">name</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">value</span></th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x04</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0d</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x12</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RESEL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">IRAT_FROM_LTE_TO_G</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0e</span></td></tr></tbody></table></figure><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">注：这种UMID值的解析方法在某些定义里面并不适用，比如LTE_ML1_DLM_TST_SKIP_RACH_REQ的值为6，就没法用上面的方法解析，有些值并不严格遵循这种解析算法，可能是由于历史原因，定义UMID值的规则不一样。</span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">基带系统把任务标示为多个不同的技术大类，来标示和模块化相应的子功能，以MDM9607为例：</span></p><figure style="box-sizing: border-box;overflow-x: auto;margin-top: 1.2em;margin-bottom: 1.2em;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><table width="1140" style="width: 768px;"><thead style="box-sizing: border-box;background-color: rgb(248, 248, 248);"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">tech_id</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Tech_name</span></th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">MCS(Modem Common Service)</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">2</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">MM_CM(0x201) UI(0x20a) (Unnumbered Information) MM_DOM(0x202),MM_MMOC(0x251)</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">4</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">5</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">FTM</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">6</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">rfa_tech （0x600 rf_fwrsp,0x603 rfgsm, 0x604 rf_1x ,0x601 0x605 rf_hdr ,0x606 rfgsm_ftm,0x607 rf_lte,0x608 rf_lte_ftm,0x60b rf_qmi, 0x60c rf_meas,0x40f/0x1a04 rf_lte ,0x120f rf_tdscdma）</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">7</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">cdma</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">8</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">hdr</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">9</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">gsm</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0a</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">location(gps/gnss)</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0b</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">wcdma</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0c</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ds(data service)</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0d</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">1x(csfb)</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x0f</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">nas(0xf19 mm, 0xf1c esm)</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x10</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">gstk(Generic SIM Application Toolkit)</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x12</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">tdscdma</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x13</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">wms</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x15</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ims</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x16</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">qmi</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x17</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ecall 0x1701 ecall_app ,0x1702 ecall_ivs</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x18</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">policyman</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x1a</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">rflm</span></td></tr></tbody></table></figure><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">模块ID</span></h4><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">下图是MDM9607 LTE的部分子模块ID的对应关系</span></p><figure style="box-sizing: border-box;overflow-x: auto;margin-top: 1.2em;margin-bottom: 1.2em;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><table width="1140" style="width: 768px;"><thead style="box-sizing: border-box;background-color: rgb(248, 248, 248);"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">tech_id+mod_id</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">name</span></th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x401</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1 MGR</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x407</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LL1_SRCH</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x408</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LL1_DL</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x409</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LL1_UL</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40a</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LL1_SYS</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40b</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LL1_Async</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RRC</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">MAC</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x411</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RLC DL</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x412</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RLC UL</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x413</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">PDCP DL</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x414</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">PDCP UL</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x41b</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1_GM</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x41e</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">SW.app</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x420</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1_GM_SCHDLR</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x427</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">TLB(Test Loop )</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x42b</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1_GM_Sleep</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x434</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1_AFC</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x43b</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">PDCP offload</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x43e</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1 offload</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x43f</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1 Co-existence</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x441</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1 GM MSMGR</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x442</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">PDCPCOMP</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x445</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">ML1 SM FSCAN</span></td></tr></tbody></table></figure><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">关键消息发送API:</span></p><pre spellcheck="false" lang="" style="box-sizing: border-box;font-family: var(--monospace);font-size: 0.9em;break-inside: unset;text-align: left;overflow: visible;white-space: normal;background-image: inherit;background-position: inherit;background-size: inherit;background-repeat: inherit;background-attachment: inherit;background-origin: inherit;background-clip: inherit;background-color: rgb(248, 248, 248);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);border-radius: 3px;padding: 8px 4px 6px;margin-bottom: 15px;margin-top: 15px;width: inherit;"><div lang="" style="box-sizing: border-box;height: auto;overflow: hidden;background: inherit;"><p><br/></p><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">msgr_send(umsg *buf,uint32 buf_size);</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct umsg{</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">       struct msgr_hdr_struct_type{<span role="presentation" cm-text="	" style="box-sizing: border-box;"> </span></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>uint32  dest_umid;  //offset 0      ，要发送的UMID号</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>uint16  src_tech_mod_id; //offset 4，发送源tech_mod_id的标识</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">                uint8    num_attach;// offset 7</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">            <span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>uint8    tail_flag ;// offset 8 ，头部结尾标志0x7f</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>uint8    inst_id;// offset 9，</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">         uint8 send_dsm_flag;//offset 0x10 ,置1表示发送数据通过dsm结构承载的标志</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">         dsm *dsm_obj;//offset 0x14 , 发送数据dsm结构指针</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> }</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">msgrq_wait(void *msgr_client_ptr,void *msg_recv_buf,uint32 msg_recv_buf_size,uint32 *msg_recvd_size_ptr);//接受消息的函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">msgr_register(uint16 mod_id,void *msgr_client_ptr,void *mailbox_obj,uint32 umid);//msgr_client注册umid的消息路由</span></pre></div></pre><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"> </p><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">消息路由</span></h4><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">我们已经了解到UMID所对应原语操作的含义，如果需要执行相应的原语操作，只需要向注册过UMID的模块发送umid消息即可，接下来我们需要了解umid消息是如何路由到相应模块(tech_mod_id)的消息接收器(msgr_client)的，下面会详细介绍相应的算法和数据结构，我整理了几张表来描述。</span></p><figure style="box-sizing: border-box;overflow-x: auto;margin-top: 1.2em;margin-bottom: 1.2em;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><table width="1147" style="width: 768px;"><thead style="box-sizing: border-box;background-color: rgb(248, 248, 248);"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">map_name</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">map_size</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">key</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">value</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">value_size</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Memory Attribution</span></th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">techs_map</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">techs * 8</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">tech_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">module_counts, modules_map</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">8 bytes</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Read Only</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">modules_map</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">module_counts * 0x11 * 2</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">(mod_id * 0x11+type_id) * 2</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">types_map_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">2 bytes</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Read Only</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">types_map</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">types_map_ids * 0x20</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">types_map_id * 0x20 +(op_type_id&amp;0x1e)</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">tech_mod_type_seq</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">2 bytes</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Read/Write</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">umids_map</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">umid_seq_id * 0x8</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">8 * (tech_mod_type_seq+op_id)</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">umid, next_umid_seq_id,msgr_client_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">8 bytes</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Read/Write</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">msgr_clients_map</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x34*total_msgr_client_counts</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">msgr_client_seq_id</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">msgr_client_desc</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x34</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Read/Write</span></td></tr></tbody></table></figure><pre spellcheck="false" lang="" style="box-sizing: border-box;font-family: var(--monospace);font-size: 0.9em;break-inside: unset;text-align: left;overflow: visible;white-space: normal;background-image: inherit;background-position: inherit;background-size: inherit;background-repeat: inherit;background-attachment: inherit;background-origin: inherit;background-clip: inherit;background-color: rgb(248, 248, 248);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);border-radius: 3px;padding: 8px 4px 6px;margin-bottom: 15px;margin-top: 15px;width: inherit;"><div lang="" style="box-sizing: border-box;height: auto;overflow: hidden;background: inherit;"><p><br/></p><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct msgr_client_desc{ //全局msgr_client结构描述</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    uint32 umids_registered;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    uint16 msgr_client_reg_type;//1 -&gt;msgrq_sig type,2-&gt; rexq_sig</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    uint16 tech_mod_id;//</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    union *msg_sig_p{ //offset 0x10</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">        struct msgrq_sig *msgq_p;//msgr reg type 1,4G及以后使用的mailbox消息传递系统</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">        struct rexq_sig *rexq_p;//msgr reg type 2,兼容2G/3G时代使用的Rex IPC消息传递系统</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    }</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    struct msgrq *msgrq_p;//offset 0x14 ,if reg type 1    </span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    struct msgr_client_obj *msgr_client_obj_ptr;//offset 0x30</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    </span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct msgr_client_obj{//msgr_client结构体</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     unsigned int msgr_client_reg_type;//1-&gt; msgrq aka mailbox,2-&gt;rex_q,接受消息的方式</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     unsigned int register_umid_counts;//offset 8 ,消息接受器注册的umid的总数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     unsigned int total_reged_recv_signal_counts;//offset 0x0c,注册的接受消息的signal的个数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     union sig_recv_obj{</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">       msgrq_sig  *msgrq_signal_obj;// offset 0x10 msgrq_sig type,4/5G未来的主流类型</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">       rexq_sig *rex_signal_obj;//offset 0x10  rexq_sig type ,这个主要是为了兼容之前2/3G的系统的数据结构</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     }    </span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     unsigned int task_recv_signal_set_mask;//offset 0x14 ,注册的接受消息的signal号的掩码</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     uint32 err_counts;//offset 0x18</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     unsigned int recvd_signal_id;//offset 0x1c,当前接受到的signal id,msgr_client_reg_type为1</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     struct msgrq *recvd_msgrq_ptr;//offset 0x20,当前接受消息承载的msgrq对象,msgr_client_reg_type为1</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     struct msgrq *msgrq_first_entry;// offset 0x24,接受msgrq消息链表结构指针,msgr_client_reg_type为1</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     unsigned int total_msgrq_counts;//offset 0x28, 可以接受msgrq消息的总数,通过可以task_recv_signal_set_mask来确定,msgr_client_reg_type为1</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> }</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> </span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> struct msgrq_sig{</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    uint32 sig_ready_flag;//must be 1</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    struct sig_def{</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">        uint32 signal_id_for_recv;//offset 8</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">        uint32 signal_reged_wait_mask;//offset 0xc</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">        void * kernel_msg_queue;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">        unsigned int attribute;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    };</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    </span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    </span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> }</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> struct rexq_sig{ //size 0x1c, 兼容2/3G系统的数据结构</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     utcb *msgr_client_utcb_ptr;//offset 0  任务接受消息使用的utcb标识</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     uint32 msgr_client_signal_id;//offset 4 接受消息使用的signal id</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     msg_queue *msgr_out_msg_q;//offset 0x8</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     msg_queue *rex_msg_in_q;//offset 0xc</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     uint16 msg_data_q_used_size;//offset 0x10</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     uint16 rexq_id;//offset 0x12</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     uint16 msg_data_q_size;//offset 0x14</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> }</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">  struct msg_data_q{</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">         struct msg_data_q *prev_q;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">         struct msg_data_q *next_q;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">         char data[msg_data_q_size-8];</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     }</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> struct msg_queue{</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    struct msg_data_q *headp;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    struct msg_data_q *tailp;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    uint32 total_q_counts;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> }</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> </span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> struct msgrq{</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> <span role="presentation" cm-text="	" style="box-sizing: border-box;">   </span>void *msg_recv_buf_header;//offset 0</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> <span role="presentation" cm-text="	" style="box-sizing: border-box;">   </span>void *msg_recv_end_buf;//offset 4</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    char msgrq_name[16];//offset 0x10</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    int msgrq_recvd_seq;//ofset 0x18</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    unsigned int reged_recv_signal_id_mask;//offset 0x1c,可供接受消息signal的掩码</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    void *msgr_buf_remain_ptr;//offset 0x20,可供接受消息的剩余空间起始地址</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    void *msgr_recv_buf;//offset 0x24,当前接受到消息的buf地址</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    uint32 msgr_buf_remain_size;//offset 0x28</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    unsigned int total_msg_recv_buf_size;//offset 0x30</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    int8 is_buf_in_use;//offset 0x70 ,0-&gt; in use, 1-&gt; not in use</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    uint32 recvd_msg_blocks;//offset 0x58 ,收到的消息次数总和</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    struct msgrq *next_msgrq;//offset 0x74</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"> }</span></pre></div></pre><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">为了更方便的理解上述的数据结构的关系与操作算法，画了一张简单的图来加深该消息系统的理解。</span><span style="box-sizing: border-box;">通过以上算法和数据结构，可以很方便的完成UMID与tech_mod_id的消息路由的注册，消息发送等操作。</span></p><p style="text-align: center;"><img class="rich_pages" data-galleryid="" data-ratio="0.34796854521625165" data-s="300,640" style="" data-type="png" data-w="1526" src="https://wechat2rss.xlab.app/img-proxy/?k=2be0a6cc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YRmoNplzNYOTRcg8MptzK8u4E9nJWlPzEmeZPPqcI03lGgKc9ujPdsOx0TUJgETib15CnrkicFpAiaOw%2F640%3Fwx_fmt%3Dpng"/></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">需要说明的一点就是一个tech_mod_id可能会关联多个msgr_client，所以msgr_client_id就成了消息传递的唯一标识，通过msgr_client_id得到全局的msgr_client_desc的结构定义，该结构体里面包含接受消息的任务utcb和接受消息的signal id，这里通过tech_mod_id 0xf19对应的MM（Mobility Management）任务进行举例。</span></p><p style="text-align: center;"><img class="rich_pages" data-galleryid="" data-ratio="0.3382936507936508" data-s="300,640" style="" data-type="png" data-w="1008" src="https://wechat2rss.xlab.app/img-proxy/?k=3328b195&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YRmoNplzNYOTRcg8MptzK8ulQkSLSl8ln8dTA0LziccqBhTM81jkvymxrtbcNIOIe6RGqBjQa8AEng%2F640%3Fwx_fmt%3Dpng"/></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">我在一个实时运行的MDM9607系统上面，描绘出所有UMID和tech_mod_id之间的消息路由情况，由于实在太大，</span><span style="box-sizing: border-box;">可以在</span><a href="https://github.com/vessial/baseband/blob/master/umid_pro.svg" target="_blank">https://github.com/vessial/baseband/blob/master/umid_pro.svg</a><span style="box-sizing: border-box;"> 进行查看。</span></p><h3 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.5em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.43;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">消息状态机（State Machine）</span></h3><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">高通基带系统里面的消息状态机，是实现3GPP定义功能最重要的组成部分，消息状态机在移动通信系统里面扮演着非常重要的角色，也是多模移动通信系统的核心，3GPP在定义的多个移动通信技术的分层协议栈时，不同的通信技术模式之间切换，会通过状态机来维护相应的分层逻辑的状态和可操作功能，接下来将重要介绍高通基带系统使用的状态机数据结构以及相关算法，本文将研究主要流4G LTE和5G NR系统上使用的第二代状态机消息系统，老的第一代状态机系统不在这里介绍了。</span></p><pre spellcheck="false" lang="" style="box-sizing: border-box;font-family: var(--monospace);font-size: 0.9em;break-inside: unset;text-align: left;overflow: visible;white-space: normal;background-image: inherit;background-position: inherit;background-size: inherit;background-repeat: inherit;background-attachment: inherit;background-origin: inherit;background-clip: inherit;background-color: rgb(248, 248, 248);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);border-radius: 3px;padding: 8px 4px 6px;margin-bottom: 15px;margin-top: 15px;width: inherit;"><div lang="" style="box-sizing: border-box;height: auto;overflow: hidden;background: inherit;"><p><br/></p><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct sm_state_instance{ //eg ,size 0x1c</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>struct sm_obj *sm;//状态机对象定义</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned int current_state_id;//状态机当前所处的状态id</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    unsigned int recvd_umid_in_sm_entity_seq;//offset 8, 状态机当前收到的umid所在状态机umid列表中的序列号</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">    unsigned int instance_id;// 状态机实例编号</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>uint8 sm_state_lock;//offset 0x11 0-&gt;state unlock,1-&gt; state lock 状态机锁的状态</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *stm_idle_buf;//offset 0x14 状态机操作可能需要的buf空间</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned int debug_code;//offset 0x18 状态机调试码</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct sm_obj{ //状态机的定义结构</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>struct msgr_stm_obj *stm;</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned char *stm_obj_name; //状态机的名称，例如LTE_RRC_SIB_SM</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned int stm_obj_name_hash; //状态机名称的hash值</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned int stm_inst_id;//stm instance id ，状态机的实例编号，状态机可能存在多个实例，通过这个编号来区别不同的状态机实体</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct msgr_stm_obj {</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>int instance_counts; //该状态机支持的实例个数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>int state_cnts; //该状态机的状态数量</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>struct state_status_def *state_def;//状态机每个不同状态的定义的数据结构,size state_cnts*0x10</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>int umid_cnts;//状态机注册的可接受umid总数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>struct umid_msg_list *umid_msg_def;//存储umid和umid描述信息的指针,size umid_cnts*8</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>struct umid_msg_states_func_cb_list *umid_in_state_cb;//存储着所有umid对应每个状态的回调操作函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *cb_func1;// stm enter //offset 0x18 ,进入该状态机的回调函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *cb_func2;// stm exit  //offset 0x1c ,退出该状态机的回调函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *cb_func3;// stm error //offset 0x20 ,状态机出错的回调函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *cb_func4; //stm debug //offset  0x24 ,状态机调试的回调函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned int  init_state_id; // default 0 ,状态机初始默认状态id</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct umid_msg_states_func_cb_list {//状态机在接受到相应的umid后的原语操作回调函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>    void *umid_msg_in_states_1_cb_list[umid_cnts];</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>    void *umid_msg_in_states_2_cb_list[umid_cnts];</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>    void *umid_msg_in_states_3_cb_list[umid_cnts];</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>    ...</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>    void *umid_msg_in_states_state_cnts_cb_list[umid_cnts];</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct state_status_def{//每个状态的定义</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned char *state_name; //状态名称，eg,active/inactive etc</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *cb_func1; //state enter //状态机进入该状态的回调函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *cb_func2; //state exit  //状态机退出该状态的回调函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>void *cb_func3; //state debug ?//可能是调试函数</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">struct umid_msg_list{//状态机可接受的umid消息定义</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned char *umid_msg_name; //umid对应的描述名称</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"><span role="presentation" cm-text="	" style="box-sizing: border-box;">    </span>unsigned int umid;            //umid</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">}</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;"></span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">关键API描述</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">stm_instance_activate(struct sm_state_instance *sm_st_inst,uint32 inst_id,uint32 initial_state_id);//初始化状态机实例</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">stm_instance_process_input(uint32 state_id,struct sm_state_instance *sm_st_inst,uint32 sm_inst_id,uint32 umid_input,void *stm_payload_ptr);//对状态机接受到的umid和数据进行原语操作</span></pre></div></pre><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">我从MDM9607固件里面提取的详细的状态机信息可以在</span><a href="https://github.com/vessial/baseband/blob/master/lte_sm.log" target="_blank">https://github.com/vessial/baseband/blob/master/lte_sm.log</a><span style="box-sizing: border-box;"> 进行查看。</span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">3GPP定义的L3层的RRC(Radio Resource Control)的状态机是最为复杂的，高通在实现4G LTE的RRC时使用了大量的状态机进行功能管理。</span><span style="box-sizing: border-box;">MDM9607 4G LTE RRC状态机类型如下:</span><span style="box-sizing: border-box;">state name: LTE_RRC_CSG_ASF_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_DT_SM       //</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_TO_G_MGR_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_LLC_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_CAPABILITIES_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_FROM_1X_MGR_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_SEC_SM //sim认证和密钥协商管理相关的状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_CRP_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_FROM_DO_MGR_SM //负责从CDMA-EVDO切换到LTE的管理状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_FROM_TDS_MGR_SM //负责从TDSCDMA切换到LTE的状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_PAGING_SM //寻呼管理的状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_CONFIG_SM </span><span style="box-sizing: border-box;">state name: LTE_RRC_MISC_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_MEAS_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_CEP_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_TO_1X_MGR_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_FROM_W_MGR_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_MDT_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_TO_DO_MGR_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_CONTROLLER_SM  //关键的LTE的控制状态机，控制服务的停止和开启</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_TO_TDS_MGR_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_TO_W_MGR_SM  //从LTE切换到WCDMA的管理状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_EMP_SM</span><span style="box-sizing: border-box;">state name: LTE_RRC_MH_SM </span><br style="box-sizing: border-box;"/><span style="box-sizing: border-box;">state name: LTE_RRC_UEINFO_SM  //UE信息管理的状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_SIB_SM     //系统信息块的管理状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_PLMN_SEARCH_SM  //搜索网络使用的状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_IRAT_FROM_G_MGR_SM  //从GSM切换到LTE的状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_CSP_SM  //cell search plmn状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_ESMGR_SM // EMBMS管理状态机</span><span style="box-sizing: border-box;">state name: LTE_RRC_CRE_SM</span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">我们拿LTE_RRC_PAGING_SM状态机定义作例子与之对应的数据结构作解析</span></p><pre spellcheck="false" lang="" style="box-sizing: border-box;font-family: var(--monospace);font-size: 0.9em;break-inside: unset;text-align: left;overflow: visible;white-space: normal;background-image: inherit;background-position: inherit;background-size: inherit;background-repeat: inherit;background-attachment: inherit;background-origin: inherit;background-clip: inherit;background-color: rgb(248, 248, 248);border-width: 1px;border-style: solid;border-color: rgb(231, 234, 237);border-radius: 3px;padding: 8px 4px 6px;margin-bottom: 15px;margin-top: 15px;width: inherit;"><div lang="" style="box-sizing: border-box;height: auto;overflow: hidden;background: inherit;"><p><br/></p><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">LTE_RRC_PAGING_SM addr 0xd10b35e0</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     state machine name: LTE_RRC_PAGING_SM inst_cnts 1 total states 3  total umid 10</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     state name: INITIAL state enter 0xd0b923a8 state exit 0xd0b923c8 state debug 0x0</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     state name: IDLE_CAMPED state enter 0xd0b923e0 state exit 0xd0b92400 state debug 0x0</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">     state name: CONNECTED state enter 0xd0b92418 state exit 0xd0b92450 state debug 0x0</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d140c   LTE_RRC_CAMPED_INDI</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d0207   LTE_RRC_DRX_INFO_REQ</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d0206   LTE_RRC_SIM_UPDATE_REQ</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d0401   LTE_RRC_SERVICE_IND</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d0710   LTE_RRC_PAGING_DLM</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d1405   LTE_RRC_CONNECTED_INDI</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d022a   LTE_RRC_MTC_CFG_REQ</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d1400   LTE_RRC_STOPPED_INDI</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d140b   LTE_RRC_NOT_CAMPED_INDI</span></pre><pre role="presentation" style="box-sizing: border-box;font-family: inherit;break-inside: avoid;padding-right: 4px;padding-left: 4px;border-radius: 0px;border-top-width: 0px;border-right: none;border-bottom-width: 0px;border-left-width: 0px;background: 0px 0px;font-size: inherit;white-space: pre-wrap;overflow-wrap: break-word;color: inherit;z-index: 2;overflow: visible;word-break: normal;width: inherit;"><span role="presentation" style="box-sizing: border-box;padding-right: 0.1px;">0x040d1402   LTE_RRC_SIB_UPDATED_INDI</span></pre></div></pre><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">下图为MDM9607 4G LTE_RRC的状态机图谱</span></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js" data-lang="xml"><code><span class="code-snippet_outer"><span class="code-snippet__tag">&lt;<span class="code-snippet__name">img</span> <span class="code-snippet__attr">src</span>=<span class="code-snippet__string">&#34;<a href="https://github.com/vessial/baseband/raw/master/sm.svg" target="_blank">https://github.com/vessial/baseband/raw/master/sm.svg</a>&#34;</span> <span class="code-snippet__attr">style</span>=<span class="code-snippet__string">&#34;max-width:100%;&#34;</span>&gt;</span></span></code></pre></section><h4 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.25em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.4;cursor: text;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">状态机操作实例</span><br/></h4><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">为了更直观的理解消息状态机的操作过程，我这里提供了一个例子来展示消息传递过程以及状态机的处理过程，这个过程是在基带处理IDLE状态下，没有接入任何移动通信网络，到基带一次接入4G LTE网络到SIM认证的过程，这里只提供RRC的状态机的处理过程。</span></p><figure style="box-sizing: border-box;overflow-x: auto;margin-top: 1.2em;margin-bottom: 1.2em;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><table width="1170" style="width: 768px;"><thead style="box-sizing: border-box;background-color: rgb(248, 248, 248);"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">发送端</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">接受端</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">接受UMID号</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">描述信息</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">处理状态机</span></th><th style="box-sizing: border-box;border-top-width: 1px;border-bottom: 0px;border-top-color: rgb(223, 226, 229);border-right-color: rgb(223, 226, 229);border-left-color: rgb(223, 226, 229);padding: 6px 13px;"> </th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 emm</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0204</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SERVICE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 emm</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0204</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SERVICE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_IRAT_FROM_W_MGR_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 emm</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0204</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SERVICE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_IRAT_FROM_G_MGR_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 emm</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0204</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SERVICE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_IRAT_FROM_TDS_MGR_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1442</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CLEAR_DEPRI_FREQ_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MEAS_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d120d</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_MODE_CHANGE_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0803</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_START_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x412 LTE_RLCUL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4120801</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RLCUL_START_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x411 LTE_RLCDL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4110801</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RLCDL_START_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x413 LTE_PDCPDL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4130806</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_PDCPDL_START_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x414 LTE_PDCPUL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4140807</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_PDCPUL_START_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0801</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_START_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1513</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_MODE_CHANGE_CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CFG_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0809</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_SYSTEM_SCAN_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CFG_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0800</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_ACQ_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1202</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_GET_SIBS_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x403 LTE_ML1_DLM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_MIB_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40F LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0406</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_RRC_BCCH_DL_DATA_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">BCCH DL SCH SIB1</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0823</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_TDD_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40F LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0406</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_RRC_BCCH_DL_DATA_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">BCCH DL SCH SI</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1514</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_GET_SIBS_CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40F LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0406</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_RRC_BCCH_DL_DATA_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">BCCH DL SCH SIB1</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c080a</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_CELL_SELECT_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CFG_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0804</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_COMMON_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0805</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_DEDICATED_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0801</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1516</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CFG_CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d140c</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CAMPED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">inactive</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d140c</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CAMPED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">active</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d140c</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CAMPED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MEAS_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d140c</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CAMPED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CAPABILITIES_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d140c</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CAMPED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d140c</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CAMPED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MISC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1516</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CFG_CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIB_UPDATED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIB_UPDATED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIB_UPDATED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_PAGING_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIB_UPDATED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MEAS_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIB_UPDATED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSG_ASF_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIB_UPDATED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_IRAT_TO_G_MGR_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1402</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIB_UPDATED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_IRAT_TO_TDS_MGR_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40D0401</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SERVICE_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSG_ASF_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40D0401</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SERVICE_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_PAGING_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c LTE_ML1_MGR</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0815</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_IDLE_MEAS_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MEAS_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0225</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_AVOIDANCE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40F LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0406</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_RRC_BCCH_DL_DATA_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">SI</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1437</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_INTERFREQ_LIST_UPDATE_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xf19 EMM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0200</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CONN_EST_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">Attach Request NAS msg</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40D1404</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CONN_ESTABLISHMENT_STARTED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">RRC Connection Request</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40D143d</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_TRM_PRIORITY_CHANGE_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 EMM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIM_UPDATE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CONTROLLER_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 EMM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIM_UPDATE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_PAGING_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 EMM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIM_UPDATE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SEC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">SIM Update Req received from NAS</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 EMM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SIM_UPDATE_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CAPABILITIES_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x404 LTE_ML1_ULM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40c0421</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_CPHY_RACH_MSG1_SCHED_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE MAC RACH Attempt</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0800</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_ACCESS_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f LTE_MAC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40f0405</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_MAC_RRC_CCCH_DL_DATA_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MH_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">CCCH RRC Connection Setup</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0703</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_RRC_CONNECTION_SETUP_DLM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">CCCH RRC Connection Setup</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1206</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CFG_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40D1408</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_PROCEED_WITH_RESEL_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CSP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x411 LTE_RLCDL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4110800</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RLCDL_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x412 LTE_RLCUL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4120800</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RLCUL_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x413 LTE_PDCPDL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4130800</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_PDCPDL_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x414 LTE_PDCPUL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4140800</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_PDCPUL_CFG_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_LLC_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1516</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CFG_CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1200</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SEND_UL_MSG_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MH_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1405</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_CONNECTED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_SIB_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><br/></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x414 LTE_PDCPUL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4140802</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_PDCPUL_SDU_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MH_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1504</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_RRC_CONNECTION_SETUP_COMPLETE_CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_CEP_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">UL_DCCH RRC connection Setup Complete</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x413 LTE_PDCPDL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4130400</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_PDCPDL_SDU_IND</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MH_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">DL_DCCH info Transfer</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0705</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_DL_INFORMATION_TRANSFER_DLM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_DT_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">DL_DCCH Auth Request Msg recvd</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d141f</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_DLM_PROCESSED_INDI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MH_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0xF19 EMM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d0201</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_UL_DATA_REQ</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_DT_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">send Auth Resp data</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1200</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_SEND_UL_MSG_REQI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MH_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">UL_DCCH ULinfo Transfer send NAS Auth resp</span></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x414 LTE_PDCPUL</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x4140802</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_PDCPUL_SDU_CNF</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_MH_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr><tr style="box-sizing: border-box;break-inside: avoid;break-after: auto;border-top: 1px solid rgb(223, 226, 229);background-color: rgb(248, 248, 248);"><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">0x40d1509</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;text-align: center;"><span style="box-sizing: border-box;">LTE_RRC_UL_INFORMATION_TRANSFER_CNFI</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><span style="box-sizing: border-box;">LTE_RRC_DT_SM</span></td><td style="box-sizing: border-box;border-color: rgb(223, 226, 229);padding: 6px 13px;"><br/></td></tr></tbody></table></figure><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"> </p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">DL_DCCH的Information Transfer字段里面包含了来自MME发送过来的认证请求数据(LTE NAS EMM信令消息id 0x52)，包含有nas key set id, </span><span style="box-sizing: border-box;">16个字节的认证随机数据auth_param rand，以及16个字节的auth param AUTN数据，SIM卡通过收到的这两个关键信息进行认证，</span><span style="box-sizing: border-box;">并计算生成Auth_resp发送给MME进行比较完成本地端和服务器端的认证，本地端计算如下。 </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">本地端收到的rand(16bytes)+AUTN(16bytes)</span><br style="box-sizing: border-box;"/><span style="box-sizing: border-box;">K为sim卡和MME都持有的sim卡的唯一隐私数据，sim卡端只有sim卡芯片可以读取。 </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">SIM卡端密钥派生认证过程，f1/2/3/4/5为sim卡的计算功能函数  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">AK=f5(K,rand)  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">IK=f4(K,rand)  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">CK=f3(K,rand)  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">RES=f2(K,rand) //计算给MME进行认证SIM卡的数据  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">SQN=AUTN^AK  (6bytes)</span><br style="box-sizing: border-box;"/><span style="box-sizing: border-box;">AMF=AUTN[6:8]  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">MAC=f1(K,SQN,rand,AMF)  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">SIM卡端认证MME端过程  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">sim_autn=SQN^AK(6bytes)+AMF(2bytes)+MAC(8bytes)  </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">比较MME发过来的AUTN和sim_autn ，相等则认为MME合法。 </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">基带把sim卡计算得到的RES通过LTE NAS EMM 信令消息号0x53包裹到UL_DCCH的InformationTransfer字段里面发给基站进而到MME进行认证。 </span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">MME认证SIM卡的过程就比较简单了。</span><span style="box-sizing: border-box;">MME端计算XRES=f2(K,rand)，然后比较收到的RES，相等表示MME认证SIM卡成功，至此认证完成。</span><span style="box-sizing: border-box;">由于上述操作涉及EMM和RRC之间的交互过程比较复杂，这里只是简单提一下，EMM的状态机会在下一篇文章里面单独详细介绍。</span></p><h2 style="box-sizing: border-box;break-after: avoid-page;break-inside: avoid;orphans: 4;font-size: 1.75em;margin-top: 1rem;margin-bottom: 1rem;font-weight: bold;line-height: 1.225;cursor: text;border-bottom: 1px solid rgb(238, 238, 238);width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">结语</span></h2><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box;">由于从全球公开的信息渠道中并不能获取高通基带系统的深入信息，所以花费1年多的时间通过对底层操作系统和上层3GPP实现的业务系统进行深度逆向工程，这篇文章只是系统性的介绍了高通4/5G基带系统的消息机制和消息状态机，我认为这是一个关键的架构设计，梳理清楚其消息架构对于理解3GPP实现的消息原语操作以及对移动通信技术的多模分层设计有非常大的帮助，该消息系统架构设计具有非常好的扩展性，可以很灵活的增加新的功能到该消息框架中去，可以很好的减少系统测试成本，有很多设计理念值得学习和借鉴，由于现今高通5G基带所支持的UMID操作数高达2万多个，所以这里的展示的例子只是揭示了状态机功能操作的冰山一角，后续会持续研究对于状态机安全漏洞的挖掘研究，实现高效的5G安全测试体系，通过对基带系统的深刻认知，可以更好的对基站系统和核心网系统进行安全评估。</span></p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"> </p><p style="box-sizing: border-box;line-height: inherit;orphans: 4;margin-top: 0.8em;margin-bottom: 0.8em;white-space: pre-wrap;width: inherit;font-family: &#34;Open Sans&#34;, &#34;Clear Sans&#34;, &#34;Helvetica Neue&#34;, Helvetica, Arial, sans-serif;font-size: 16px;text-align: start;background-color: rgb(255, 255, 255);"><br/></p><p><br/></p>



<p><a href="2247483706">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=fbb9b105&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIxMjY0NjA2Mw%3D%3D%26mid%3D2247483706%26idx%3D1%26sn%3Dac274ff6efbc7cb173c841d29a08561b%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 09 Apr 2021 17:31:00 +0800</pubDate>
    </item>
    <item>
      <title>Qualcomm QSEECOM接口漏洞（CVE-2019-14040）分析</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIxMjY0NjA2Mw==&amp;mid=2247483696&amp;idx=1&amp;sn=c38732d8d688275a649cbbd903cd6bf5</link>
      <description>Qualcomm  QSEECOM接口漏洞&#xA;（CVE-2019-14040）漏洞分析</description>
      <content:encoded><![CDATA[<p>
<span>阿里安全（谢君）</span> <span>2020-04-17 17:14</span> <span style="display: inline-block;"></span>
</p>

<p>Qualcomm  QSEECOM接口漏洞</p>
<p>（CVE-2019-14040）漏洞分析</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=aca564bc&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F6A8ibk8vw6YTOXCnWgiaCHZHz4Bmib9o5WlSQdibvNXn2OkX49txVw00opywQ7EAWRffEtAd3LfOFZXLlT5ic1LjsJg%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;">QualcommQSEECOM接口漏洞（CVE-2019-14040）漏洞分析</p><p style="text-align: center;"> </p><p style="text-align: center;"><br/></p><p style="text-align: center;"> </p><p style="text-align: left;">背景：</p><p style="text-align: left;text-indent: 28px;">今天看到腾讯玄武实验室推送的一篇国外的安全公司zimperium的研究人员写的一篇他们分析发现的高通的QSEECOM接口漏洞文章，<a href="https://blog.zimperium.com/multiple-kernel-vulnerabilities-affecting-all-qualcomm-devices/其中一个Use-After-Free的漏洞（CVE-2019-14041）我觉得挺有意思，但是原文有些部分写的比较生涩或者没有提到关键点上，所以我想稍微续叼写的更具体一些，以及我对这种类型漏洞的一些思考或者是对我的启发，以及安全研究人员和产品开发人员对安全的理解方式。" target="_blank">https://blog.zimperium.com/multiple-kernel-vulnerabilities-affecting-all-qualcomm-devices/其中一个Use-After-Free的漏洞（CVE-2019-14041）我觉得挺有意思，但是原文有些部分写的比较生涩或者没有提到关键点上，所以我想稍微续叼写的更具体一些，以及我对这种类型漏洞的一些思考或者是对我的启发，以及安全研究人员和产品开发人员对安全的理解方式。</a></p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;">这名叫<span style="font-family:Roboto,serif;color:#F25E30;background:white;">TamirZahavi-Brunner</span>的安全研究者在2019年的7月底发现两个高通QSEECOM接口的漏洞，一个是条件竞争的漏洞CVE-2019-14041，一个就是我今天要讲的内核内存映射相关的Use-After-Free漏洞CVE-2019-14040。</p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;">简单介绍一下这个QSEECOM接口，它是一个内核驱动连接用户态Normal world和Secure world的一个桥梁，Secure world就是我们常说的Trustzone/TEE/Security Enclave安全运行环境，Normalworld就是非安全运行环境，这个高通的QSEECOM接口可以实现一些从用户态加载/卸载一些安全的TA（TrustApplcation）到TrustZone中去运行，比如我们手机常用的指纹/人脸识别的应用，这些应用都是在TrustZone中运行的，在这种运行环境下，可以保证我们用户的关键隐私不被窃取，这个QSEECOM架构如下。</p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;">要想了解这个漏洞的成因，需要先了解这个QSEECOM接口的功能处理逻辑，用户态通过ION设备（一个内存管理器，可以通过打开/dev/ion进行访问）申请的内存可以通过QSEECOM接口映射到内核地址空间，可供内核或者TrustZone访问，而对于QSEECOM驱动模型中（/dev/qseecom）提供给用户的接口有open/close/ioctl，对应着QSEECOM内核处理函数为<span style="font-size:13px;color:black;background:white;">qseecom_open/qseecom_ioctl/qseecom_release</span>。</p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;"><strong>漏洞成因：</strong></p><p style="text-align: left;text-indent: 28px;">说到Use-After-Free漏洞，我们需要先了解内存在哪里Free掉的，然后是在哪里Use的，如何Use的。</p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;"><strong>Free操作过程：</strong></p><p style="text-align: left;text-indent: 28px;">用户态每次打开qseecom设备（/dev/qseecom），都会在内核态生成一个<span style="font-size:13px;color:black;background:white;">qseecom_dev_handle的<span style="font-family:等线;">结构指针</span>，这个结构指针会被关闭qseecom设备<span style="font-family:等线;">（用户态通过</span>close<span style="font-family:等线;">函数）</span>或者来自用户的IO操作号QSEECOM_IOCTL_UNLOAD_APP_REQ请求予以销毁，需要了解这个结构指针的销毁过程，那么得先了解这个指针的初始化过程。</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;"> </span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">打开qseecom设备时会调用qseecom_open分配一个qseecom_dev_handle结构体</span></p><p style="text-align: left;text-indent: 28px;"><br/></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">static int qseecom_open(struct inode *inode, struct file*file)</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">{</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    int ret = 0;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    structqseecom_dev_handle *data;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    </span><span style="font-size:13px;color:red;background:white;">data = kzalloc(sizeof(*data), GFP_KERNEL);</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    if (!data)</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">       return -ENOMEM;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    file-&gt;private_data= data;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    data-&gt;abort = 0;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    …</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">用户通过QSEECOM_IOCTL_SET_MEM_PARAM_REQ ioctl请求通过函数qseecom_set_client_mem_param来建立用户态ion内存在内核地址空间的映射，而qseecom_set_client_mem_param函数通过copy_from_user函数来获取用户传递的ion用户内存的地址信息以及这个内存的长度信息，我把关键的代码标示出来。</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">staticint qseecom_set_client_mem_param(struct qseecom_dev_handle *data,</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">                     void __user *argp)</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">{</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    ion_phys_addr_t pa;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    int32_t ret;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    struct qseecom_set_sb_mem_param_req req;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    size_t len;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    /* Copy the relevant information needed forloading the image */</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    if (copy_from_user(&amp;req, (void __user*)argp, sizeof(req)))</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">       return -EFAULT;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    ...</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">    data-&gt;client.ihandle =ion_import_dma_buf_fd(qseecom.ion_clnt,</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">                     req.ifd_data_fd);</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    ...</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    /* Get the physical address of the ION BUF*/</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    </span><span style="font-size:13px;color:red;background:white;">ret =ion_phys(qseecom.ion_clnt, data-&gt;client.ihandle, &amp;pa, &amp;len);</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">    if (ret) {</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">       pr_err(&#34;Cannot get phys_addr for theIon Client, ret = %d\n&#34;,</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">           ret);</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">       return ret;</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">    }</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    if (len &lt; req.sb_len) {</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">       pr_err(&#34;Requested length (0x%x) is&gt; allocated (%zu)\n&#34;,</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">           req.sb_len, len);</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">       return -EINVAL;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    }</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    /* Populate the structure for sending scmcall to load image */</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    data-&gt;client.sb_virt = (char *)ion_map_kernel(qseecom.ion_clnt,</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">                         data-&gt;client.ihandle);</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    if (IS_ERR_OR_NULL(data-&gt;client.sb_virt)){</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">       pr_err(&#34;ION memory mapping forclient shared buf failed\n&#34;);</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">       return -ENOMEM;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    }</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">    data-&gt;client.sb_phys = (phys_addr_t)pa;</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">    data-&gt;client.sb_length = req.sb_len;</span></p><p style="text-align: left;"><span style="font-size:13px;color:red;background:white;">    data-&gt;client.user_virt_sb_base =(uintptr_t)req.virt_sb_base;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">    return 0;</span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">}</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">这个代码流程如下：</span></p><p style="text-align: left;text-indent: 28px;"><br/></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;"> </span></p><p style="text-align: center;"><img class="rich_pages" data-ratio="1.354564755838641" data-s="300,640" style="" data-type="png" data-w="471" src="https://wechat2rss.xlab.app/img-proxy/?k=3ea8b116&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTOXCnWgiaCHZHz4Bmib9o5WlweDCv6YhVW8oBIXuXFEfNFpF7LicIyq8grHOJNuDDppf0Vf2gGFfboA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: left;text-indent: 28px;"><br/></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;"> </span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;"> </span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">我们从qseecom_dev_handle结构体上能够发现client是它的子成员结构体</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;"> </span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">struct qseecom_dev_handle {</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    enumqseecom_client_handle_type type;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    union {</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    </span><span style="font-size:13px;color:red;background:white;">    structqseecom_client_handle client;//这个指针没有置空</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">       structqseecom_listener_handle listener;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    };</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    bool released;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">…</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;"> </span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">struct qseecom_client_handle {</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    u32  app_id;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    u8 *sb_virt;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    phys_addr_t sb_phys;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    unsigned longuser_virt_sb_base;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    size_t sb_length;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    </span><span style="font-size:13px;color:red;background:white;">struct ion_handle *ihandle;     /*Retrieve phy addr */</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    charapp_name[MAX_APP_NAME_SIZE];</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    u32  app_arch;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    structqseecom_sec_buf_fd_info sec_buf_fd[MAX_ION_FD];</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">    bool from_smcinvoke;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;">};</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size:13px;color:black;background:white;"> </span></p><p style="text-align: left;"><span style="font-size:13px;color:black;background:white;">而销毁qseecom_dev_handle结构指针的时候只是把子成员结构体client的子成员ion_handle结构指针ihandle给置空了，client结构体的其它成员并没有置空，也就是说client结构体中的sb_virt地址还sb_length的值还是残留的，这也为后续的freed的内存重新use提供了前提。</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">static int qseecom_unmap_ion_allocated_memory(struct qseecom_dev_handle*data)</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">{</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">       int ret = 0;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">       if(!IS_ERR_OR_NULL(data-&gt;client.ihandle)) {</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">              ion_unmap_kernel(qseecom.ion_clnt,data-&gt;client.ihandle);//解除用户态  ion内存到内核态的映射</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">              ion_free(qseecom.ion_clnt,data-&gt;client.ihandle);//</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">              data-&gt;client.ihandle= NULL; //只是把这个指针置空了</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">       }</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">       return ret;</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 14px;">}</span></p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;"><strong>Use的过程：</strong></p><p style="text-align: left;text-indent: 28px;">上面我们已经讲了<span style="font-size:13px;color:black;background:white;">qseecom_dev_handle的销毁的过程，接下来我们看看攻击者是如何使用释放掉的内存的。</span></p><p style="text-align: left;text-indent: 28px;">我们知道当释放掉的内存被以同样大小以及同样的内存分配式来申请的时候，之前释放掉的内存是很容易被重新命中的，同理常见于浏览器use-after-free漏洞通过heap spray的方式进行大量内存申请来命中之前被释放掉的对象。之前我们说过了，通过qseecom_open打开qseecom设备的时候会分配一个<span style="font-size:13px;color:black;background:white;">qseecom_dev_handle结构体，但是很不幸的是这个初始化过程也没有完全把这片内存给清0。</span></p><p style="text-align: left;text-indent: 28px;">static int qseecom_open(struct inode *inode, struct file *file)</p><p style="text-align: left;text-indent: 28px;">{</p><p style="text-align: left;text-indent: 28px;">       int ret = 0;</p><p style="text-align: left;text-indent: 28px;">       structqseecom_dev_handle *data;</p><p style="text-align: left;text-indent: 28px;">       data =kzalloc(sizeof(*data), GFP_KERNEL);</p><p style="text-align: left;text-indent: 28px;">       if (!data)</p><p style="text-align: left;text-indent: 28px;">              return -ENOMEM;</p><p style="text-align: left;text-indent: 28px;">       file-&gt;private_data =data;</p><p style="text-align: left;text-indent: 28px;">       data-&gt;abort = 0;</p><p style="text-align: left;text-indent: 28px;">       data-&gt;type =QSEECOM_GENERIC;</p><p style="text-align: left;text-indent: 28px;">       data-&gt;released =false;</p><p style="text-align: left;text-indent: 28px;">       <span style="color:red;">memset((void*)data-&gt;client.app_name, 0, MAX_APP_NAME_SIZE);//似乎还差一点点</span></p><p style="text-align: left;text-indent: 28px;">      </p><p style="text-align: left;text-indent: 28px;">这个初始化前后的内存对比是这样的</p><p style="text-align: left;text-indent: 28px;"><br/></p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.8176895306859205" data-s="300,640" style="" data-type="png" data-w="554" src="https://wechat2rss.xlab.app/img-proxy/?k=1406f359&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTOXCnWgiaCHZHz4Bmib9o5WlFs7xNQUpHmmhD31micsfbhWxKAogAZWFVib9QG5jT6OzTrDt7ia99YsxA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: left;text-indent: 28px;">接下来就是use过程的关键了，我们的目标就是能够使用这些free掉的结构中残留的数据，如何能够保证残留数据可用，第一，残留的关键数据不被接下来的流程所覆盖，第二，保护流程正常走下去，现有的qseecom_dev_handle结构不被无效的操作释放。为了保证满足第二条，我们需要满足qseecom_dev_handle成员client的ihandle指针不能为空（<span style="font-size:13px;color:black;background:white;">__validate_send_service_cmd_inputs会检查</span>），因为之前释放的时候这里被置空了。好的，现在只需要保证第一条，关键的残留数据不被覆盖就好了。</p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;">为了达到这个残留数据不被覆盖的目标，只需要用户态发送一个<span style="font-size: 17px;"><span style="color: black;background: white;">QSEECOM_IOCTL_SET_MEM_PARAM_REQ</span> ioctl<span style="color: black;background: white;">请求，且用户提交的ION内存分配的长度信息大于实际用户所分配的大小即可（例如用户只分配了0x1000字节内存，但是用户提交给内核说我分配了0x2000个字节，当然内核也不是傻子，你说多少就多少，内核说我要检查一下，检查发现，好小子你才分配了0x1000字节的内存，你却告诉我有0x2000字节，是不是当我傻，内核就立即返回操作出错的信息给用户），还记得上面提到的qseecom_set_client_mem_param函数处理流程吗? 虽然内核直接返回操作错误告之给用户态，但是最重要的是</span>qseecom_dev_handle指针没有被销毁，而且就是因为这个错误的操作，那个残留数据也没有被覆盖，且结构体里面的ihandle也赋值了不为空，两个条件都满足了，然后接下来的正常业务处理逻辑将会把之前残留的sb_virt/sb_phys地址用于内存读写操作，完成真正的use操作。</span></p><p style="text-align: left;text-indent: 28px;"><span style="font-size: 17px;"> </span></p><p style="text-align: left;text-indent: 28px;">当然最后这个漏洞的修补过程也比较简单，把client结构成员全部清空即可。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.296028880866426" data-s="300,640" style="" data-type="png" data-w="554" src="https://wechat2rss.xlab.app/img-proxy/?k=1893a0f1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTOXCnWgiaCHZHz4Bmib9o5Wlu4kTrxICEOt1EPXUGwwHjFlpG7jiboHJHGEbia70Nr8bLLMLjrGHVqxw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: left;text-indent: 28px;"><br/></p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;">写到这里漏洞分析过程就结束了，这个漏洞的利用危害，我觉得比较容易实现的一点可能是泄露一些内存信息，这个需要关联上下文深入研究，作者说可能用于提权获取root权限，我觉得还是挺麻烦的，而且需要把不太可控的读写转化成可控的读写，比较复杂，最终也有可能利用不成功，因为越是复杂的系统掺杂的噪音越多，需要排查的东西也越多。</p><p style="text-align: left;text-indent: 28px;"> </p><p style="text-align: left;text-indent: 28px;"><strong>最后的一些思考：</strong></p><p style="text-align: left;text-indent: 28px;">也是我觉得比较有意思的一点，这个漏洞的根源当然是释放的内存没有清空，但是有一个很重要点就是内核态和用户态的状态机制不同步造成的（不知道这样说对不对），比如内核返回给用户说，我判断了，你给我的信息不对，你的行为不对，我警告过你了，但是用户根本不管，我继续做我认为是正确的事情，从这里可以看出安全研究人员与开发人员对于安全风险视角的不同了，或者可以看出安全研究人员是如何定位攻击面，如何挖掘漏洞的。</p><p><br/></p><p style="text-align: center;"><br/></p><p><br/></p>



<p><a href="2247483696">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=e03915a9&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIxMjY0NjA2Mw%3D%3D%26mid%3D2247483696%26idx%3D1%26sn%3Dc38732d8d688275a649cbbd903cd6bf5%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Fri, 17 Apr 2020 17:14:00 +0800</pubDate>
    </item>
    <item>
      <title>移动基带安全研究系列文章之概念与系统篇</title>
      <link>https://mp.weixin.qq.com/s?__biz=MzIxMjY0NjA2Mw==&amp;mid=2247483685&amp;idx=1&amp;sn=840a7fa589a083765124f8d2ed8ad47e</link>
      <description>移动基带安全研究系列文章概念和系统篇  背景随着5G大浪潮的推进，未来万物互联将会有极大的井喷爆发的可能，而</description>
      <content:encoded><![CDATA[<p>
原创 <span>阿里安全 谢君</span> <span>2019-09-09 10:18</span> <span style="display: inline-block;"></span>
</p>

<p>移动基带安全研究系列文章概念和系统篇  背景随着5G大浪潮的推进，未来万物互联将会有极大的井喷爆发的可能，而</p>
<p></p>



<p>
<img src="https://wechat2rss.xlab.app/img-proxy/?k=b3d26ad1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F6A8ibk8vw6YQ31jSxTJOicVL0iae7ySpZn5ja753Oich3HCtQl0RX3k6S0tcjvtHewLkNAk29Kz1N19GibUwfwzR20w%2F0%3Fwx_fmt%3Djpeg"/>
</p>


<p style="text-align: center;"><br/></p><p style="text-align: center;text-indent: 2em;"><span style="font-size:19px;">移动基带安全研究系列文章</span><br/></p><p style="text-align:center;"><span style="font-size:19px;">概念和系统篇</span></p><p style="text-align:center;"> </p><p style="text-align:center;"> </p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p><strong>背景</strong></p></li></ul><p style="margin-left:28px;text-indent:28px;">随着5G大浪潮的推进，未来万物互联将会有极大的井喷爆发的可能，而移动基带系统作为连接世界的桥梁，必将成为未来非常重要的基础设施，而基础设施的技术自主能力已经上升到非常重要的国家层面上的战略意义，从美国对待中国的通信产商华为的禁令就可以看得出基础技术的发展对一个国家的震慑，现今人类的生产生活已经离不开移动通信，未来也将会继续是引领人类科技的发展的重要媒介，人工智能，自动驾驶，物联网以及你所能想到的一切科技相关的发展都会与移动通信产生重要的联系，在此之上其安全性和可靠性将会成为人类所关心的重要问题，这也是笔者为了写这个系列文章的初衷，也希望更多的安全研究人员参与到基础设施的安全研究当中来，挖掘出更多的缺陷与隐患，完善未来的基础设施的安全。</p><p style="margin-left:28px;text-indent:28px;"> </p><ul class=" list-paddingleft-2" style="list-style-type: disc;"><li><p><strong>概念和研究目的</strong></p></li></ul><p style="text-indent:0in;">  3GPP  移动通信的标准化组织3<sup>rd</sup> Generation Partnership Project，成立于上世纪末，主要职能是为了制订移动通信的技术标准，保证各个不同国家以及运营商在移动通信方面的兼容性，最常见的例子就是能够让我们的手机可以做到在不同的国家漫游使用。</p><p style="text-indent:0in;">3GPP所制定的移动通信技术标准涵盖了所有的2/3/4/5G通信相关的技术体系，产生了大量的技术文档供研究人员学习和参考，有兴趣的可以从3GPP的官方网站获取。</p><p style="text-indent:0in;"> </p><p style="text-indent:0in;">  本系列文章研究对像是指3GPP定义的移动通信相关2/3/4/5G的基带软硬件和通信系统，例如手机的语音/短信/数据流量，以及物联网中使用的相关移动通信技术的端设备。基带系统本身是泛指无线通信系统里面的软/硬件和通信技术的集合体，例如蓝牙/Wi-Fi/GSM都有基带系统，所以本系列文章所指的基带系统单指移动通信相关的2/3/4/5G技术相关的基带系统。</p><p style="text-indent:0in;"> </p><p style="text-indent:0in;">  研究对象和目的：高通的基带芯片以及对3GPP定义的对通信协议栈的实现，基带系统是一个非常庞大且复杂的系统，包括软/硬件和通信技术的完美融合，所以具有相关设计能力的芯片产商很少，从2018年基带芯片的市场份额分布，高通是这个领域市场份额做的最大的芯片产商，高通是多个国内手机产商的供应商，例如小米，oppo/vivo等，而华为现在已经有了自己基于海思芯片设计的基带系统，打破了国外基带芯片市场的垄断，现在华为的手机产品都是用的海思基带芯片，不过软件系统还是基于人家的vxworks，而基带系统又是非常封闭的系统，我研究的目的之一就是挖掘里面的一些设计逻辑，结合3GPP的协议的定义来更好的理解整个基带系统的实现，并且深入挖掘里面的攻击面以及如何更好的发现里面的安全问题。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.4277456647398844" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=965e02a9&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwy2IibbEGKxibFMPrJib5ic4CRJaCdicDVTmc7eu6NtDOMUf5VMQxxm3diacA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-indent:0in;">上面图片来源strategyanalytics<br/></p><p style="text-indent:0in;">研究方法：</p><p>整个系列文章将会围绕高通基带系统对3GPP定义的协议栈的实现来挖掘里面的一些业务逻辑以及挖掘相关的攻击面来进行，所以我的研究方法会针对如下层次来进行。</p><p>1．<span style="font:9px &#39;Times New Roman&#39;;">  </span>操作系统</p><p>2．<span style="font:9px &#39;Times New Roman&#39;;">  </span>应用系统</p><p>3．<span style="font:9px &#39;Times New Roman&#39;;">  </span>3GPP实现的协议栈</p><p>4．<span style="font:9px &#39;Times New Roman&#39;;">  </span>攻击面研究以及缺陷挖掘</p><p style="text-indent:0in;"> </p><p>封闭的基带系统需要大量的逆向工程的工作，来获取对基带系统行为的了解，逆向工程是安全研究者在挖掘未知的必备技能，什么时候需要逆向工程，在你无法获取目标研究对象的源代码和设计文档或者仅能够获取极少文档信息的情况下，想了解其目标对象的一些设计逻辑，原理和算法，这个时候你只能通过逆向工程这种合法手段来达到上面的目的。</p><p>逆向工程也分软件和硬件，现今的数字系统基本上都是通过软件来定义的，我们对于硬件的逆向工程就不展开讲了，有机会单独写出来，所以本文讨论的也基本上是软件层面上的逆向工程，而基带系统与硬件结合又是非常紧密的，所以对基带系统的逆向工程也需要硬件研究能力的支撑，逆向工程的难易程度也是分等级的，如下是我个人对逆向工程难易的理解，默认下面所有应用的固件都可以获取，通过研究工具的获取和研究的成本来分类。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.33367875647668394" data-s="300,640" style="" data-type="png" data-w="965" src="https://wechat2rss.xlab.app/img-proxy/?k=634c90e8&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwr5N1BFBN6sZI1eEHyBFicn3or84LY41pice3QxdPlEnwic6wkcv3gu9OA%2F640%3Fwx_fmt%3Dpng"/></p><p>而我们选择的研究对象高通的MDM系列芯片按我的理解难度应该在上图的L3的级别，非常有限的芯片信息的情况下，下图就是我们将研究的对象。</p><p> </p><p style="text-align: center;"><img class="rich_pages" data-ratio="1.3333333333333333" data-s="300,640" style="" data-type="jpeg" data-w="960" src="https://wechat2rss.xlab.app/img-proxy/?k=23a0c9a6&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_jpg%2F6A8ibk8vw6YQ31jSxTJOicVL0iae7ySpZn5ZD0nVJTLAvsBoJtOzHF9aia514EZiarjBMP8VJ4T8IXeYMd7c8meDDoQ%2F640%3Fwx_fmt%3Djpeg"/></p><p style="text-align: center;"><br/></p><ul style="" class=" list-paddingleft-2"><li><p><strong>高通基带硬件系统介绍</strong></p></li><br/></ul><p style="text-indent:0in;">高通的基带硬件按照功能的不同分为两类：</p><p>1．<span style="font:9px &#39;Times New Roman&#39;;">  </span>MSM系列   （MobileStation Modem）</p><p>2．<span style="font:9px &#39;Times New Roman&#39;;">  </span>MDM系列    (Mobile DataModem)</p><p style="margin-left:28px;">MSM系列主要是给手持移动通信设备使用，例如手机等</p><p style="margin-left:28px;">MDM系列主要是给移动数据流量设备使用，车联网或其它物联网设备等</p><p style="text-indent:0in;"> </p><p style="text-indent:0in;">MSM系列与MDM系列的区别</p><p style="text-indent:0in;">MSM系列芯片包括应用处理器（Application Processor）和基带系统处理器(Baseband Processor)还有Wi-Fi，蓝牙等,这个主要是提供整体的手机解决方案来给手机产商使用，Android生态的大部分手机都是运行在高通的MSM系列的SoC之上，例如小米5手机搭载的高通骁龙系列S820的SoC就是MSM8996系列的芯片，应用处理器运行的是Android系统。</p><p style="text-indent:0in;"> </p><p style="text-indent:0in;">MDM系列早期只包含（Baseband Processor），主要是提供数据modem和语音的功能，苹果手机生态和车联网以及4G无线上网卡等应用中比较常见，比如iPhone8/8 Plus和iPhone X都是配备的高通MDM9655的基带芯片，而宝马/奥迪车联网的TBOX则配备的MDM6x00系列的基带芯片,而15年生产的通用安吉星系统TBOX则采用的是MDM9215系列，为了能够提供更强大的业务逻辑能力，MDM系列基带芯片SoC剥离了基带系统和业务系统，由两个core组成，比如mdm9xxx系列芯片包含一个hexagon的DSP基带处理核，以及一个ARM Cortex-A系列的核。</p><p style="text-indent:0in;"> </p><p style="text-indent:0in;">从功能上来说，MSM系列的功能是包含了MDM系列的功能</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.41965317919075146" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=d0002398&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwkKSQy9nvEicLDRKKKQy1rBFPdb327YzWMzKnb107C9Al9iajibiar3qeDQ%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-indent:0in;"> </p><p style="text-indent:0in;">所以高通的MDM系列的BasebandProcessor并不是严格意义上的一块处理器，而是至少有3个core。</p><p>1．<span style="font:9px &#39;Times New Roman&#39;;">  </span>一个基于ARM的微处理子系统</p><p style="text-indent:0in;">a. ARM1136                                                      <span style="font-family:Wingdings;">à</span> MDM6600</p><p style="text-indent:0in;">b. ARM Cortex-A5 + Hexagon DSP   <span style="font-family:Wingdings;">à</span> MDM9215</p><p>2．<span style="font:9px &#39;Times New Roman&#39;;">  </span>一个基于高通Hexagon QDSP架构的Modem DSP(mDSP)</p><p>3．<span style="font:9px &#39;Times New Roman&#39;;">  </span>一个基于高通Hexagon QDSP架构的ApplicationDSP(aDSP)</p><p style="text-indent:0in;"> </p><p style="text-indent:0in;">这3个core的主要功能如下：</p><p>1．<span style="font:9px &#39;Times New Roman&#39;;">  </span>这个基于ARM的微处理器属于基带系统的子系统（MDM6x00基于ARM1136的架构，MDM9x15系列基于ARMCortex-A5以及新增了一个hexagon DSP处理器），它将协助mDSP和aDSP的初始化和与这两个core进行通信交互以及实现3GPP定义通信的所需的协议栈功能和算法，也可作为特定应用相关处理平台，例如在车联网中会将它作为TBOX的应用逻辑的处理器，MDM9x15把3GPP协议栈的实现转移到了hexagon DSP上，而MDM6x00的3GPP协议栈的实现是在这个ARM1136上完成。</p><p>2．<span style="font:9px &#39;Times New Roman&#39;;">  </span>mDSP的主要功能就是无线信号的调制与解调，在3G为代表的MDM6x00系列的mDSP主要实现CDMA/WCDMA/GSM/GNSS信号的调制与解调，在4G为代表的MDM9x15系列主要实现了包括CDMA/WCDMA/GSM/LTE/GNSS信号的调制与解调。</p><p>3．<span style="font:9px &#39;Times New Roman&#39;;">  </span>aDSP(ApplicationDSP)，主要功能是实现与应用相关的信号调制与解调，例如语音信号的调制与解调（Audio DSP），常见的应用就是我们手机语音通话时编码与解码以及压缩就是通过这个aDSP来实现。</p><p style="text-align:left;"> </p><p style="text-align:left;">下图为高通MDM系列基带芯片的一些特性：</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.5560693641618497" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=4dd929b3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwNpFunraXgAEasKfH9QMvfyDVLArpBicaCBDr2H8oWkqEbWgMlCC24fw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;">上面图片来源高通</p><p style="text-align:left;"> </p><p style="text-align:left;"> </p><ul style="" class=" list-paddingleft-2"><li><p style="text-align:left;"><strong>高通基带软件系统介绍</strong></p></li></ul><p style="text-align:left;text-indent:0in;">高通基带的软件系统从2000年左右就开始应用他们自己设计的嵌入式rtos系统REX来构建他们自己的手机基带应用系统AMSS，而且基础的应用软件架构一直沿用至今，由于基带应用系统其复杂的特性以及大量的功能应用，为了保证其应用良好的移植性和兼容性，所以基带的底层系统采用精简的微内核系统OKL4，这是一个开源的微内核系统，基于ARM的基带处理器都是采用的OKL4微内核，自从高通开发的新的hexagon DSP基带处理芯片后，一个名为QuRT嵌入式微内核系统因此而产生，这个QuRT前期也叫Blast，它的出现应该是专门为QDSPv6架构的DSP处理器而开发的，我们今天分析的MDM6600基带芯片是基于OKL4的微内核+REX AMSS应用系统，而我们重点关注的其实也是运行在REX之上的AMSS应用，下图是整个基带系统的基于ARM和基于hexagon QDSP架构逻辑，未来5G应用还会继续沿用右边的架构。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.5421965317919075" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=52d6019a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwTUSZzBZseVH2aR2WicEtp70BVlw3UQv2iaKmibDO6HMfHO4G4Mh0uygzA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;">    微内核的好处在于，应用系统可以保持高度的可移植性，微内核系统只要满足基本的IPC通信机制，内存管理，CPU调度机制即可，驱动文件系统等以及应用都可以在用户态来初始化完成，这对于需要支持多个硬件平台的高通来说无疑非常高效的做法，如下图是高通的系统架构。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.7884393063583816" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=cfa43a14&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwwVTbDw6EjdTLRjPdicibbz4nWKsFSWzbyLOeWUPjWzQ3WV9WmccyWibXg%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;">基带软件系统主要包括如下部分：</p><p style="text-align:left;">a.<span style="font:9px &#39;Times New Roman&#39;;">     </span>启动管理</p><p style="text-align:left;">b.<span style="font:9px &#39;Times New Roman&#39;;">    </span>内存管理</p><p style="text-align:left;">c.<span style="font:9px &#39;Times New Roman&#39;;">     </span>文件系统</p><p style="text-align:left;">d.<span style="font:9px &#39;Times New Roman&#39;;">    </span>定时器机制</p><p style="text-align:left;">e.<span style="font:9px &#39;Times New Roman&#39;;">     </span>任务管理和IPC通信机制</p><p style="text-align:left;">f.<span style="font:9px &#39;Times New Roman&#39;;">      </span>中断管理</p><p style="text-align:left;"> </p><p style="text-align:left;"><strong>a.<span style="font:9px &#39;Times New Roman&#39;;">     </span></strong><strong>基带系统启动过程</strong></p><p style="text-align:left;text-indent:0in;">高通基带芯片很早就引入了secureboot的启动验证机制，来防止启动过程中运行的代码或数据被篡改，旨在安全可信计算，现在大部分高通系的手机都有这个功能，芯片上电后先被芯片的BootRom接管，该BootRom里面的代码不可篡改，里面存有flash控制器的基本读写功能，而且芯片的OTP区域可以存储产商授权的公钥证书，用于签名认证启动过程中需要认证的分区数据。以MDM6600芯片在某个车联网应用基带设备为例，它的启动过程如下：</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.7606936416184971" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=0911ba1a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwggzdJgeV3SX7MllI7DMOmrNMB01P6wwekZQt6NaG4cfsCGRyqgNicdA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">芯片上电后执行BootRom里面代码检测是否从flash启动，如果是从flash的第一个扇区读入数据到内存并搜索secureboot启动的MagicHeader，然后解析头部相应的数据结构，获取代码和数据的大小和偏移以及装载到内存的地址信息，签名/证书数据偏移和长度，如下图是DBL头部区域信息。</p><p style="text-align:left;">0x00- CodeWord (&#34;D1 DC 4B 84&#34;)</p><p style="text-align:left;">0x04- Magic (&#34;34 10 D7 73&#34;)</p><p style="text-align:left;">0x14– Body start offset (0x2050)</p><p style="text-align:left;">0x18- Loading address (0x20012000)</p><p style="text-align:left;">0x1C- Body size (Code + Signature + Certificate store size)</p><p style="text-align:left;">0x20- Code size</p><p style="text-align:left;">0x24- Signature address</p><p style="text-align:left;">0x28- Signature length (256 bytes)</p><p style="text-align:left;">0x2C- Certificate store address</p><p style="text-align:left;">0x30- Certificate store length</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.6265895953757226" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=bad42dd0&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwNHZqfgelxEs2AaCgACu4vwhPsDekow6LI2YHnliaficfMnr4LKA8wczg%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">证书信息截图</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.6046242774566474" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=8cb83f73&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwTe0rMnliaPI9iaLVgvQS4JfSRiaO9tUzgwkia4LHTJuWtG73HhJ5JYEFCQ%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">当BootRom验证DBL代码和数据签名成功后，此后DBL的代码接管执行，然后搜索MIBIB分区表，获取各个分区的起始block信息，然后在相应的块去读取相应的数据，接着就是验证相应分区数据的签名，然后相应的分区代码接管，完成一系列的信任启动链，DBL验证成功后，验证FSBL，然后是OSBL，最后是AMSS。</p><p style="text-align:left;">0x00- CodeWord (&#34;AA 73 EE 55&#34;)</p><p style="text-align:left;">0x04- Magic (&#34;DB BD 5E E3&#34;)</p><p style="text-align:left;">0x0C– Partition Nums (0xa)</p><p style="text-align:left;">每个分区表信息长度0x1c，例如</p><p style="text-align:left;">0x00– 0x10 partition name (0:FSBL)</p><p style="text-align:left;">0x10– Partition start block information (0x0f)</p><p style="text-align:left;">0x14– Partition block length (0x2)</p><p style="margin-left:21px;text-align:left;">   这里定义的每个页是0x800字节，每个块block有64个页，所以每个block的长度是0x20000字节，所以根据这个信息我们就可以定位这些分区的物理偏移信息。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.5098265895953757" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=1439224a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwpF2WrYPib2ZaKGAeqibNks280eFqNPPK5CV0icdCgdEMaRj2teyqvzMPw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">例如FSBL的物理偏移为0x20000*0xf=0x1e0000</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.2069364161849711" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=0a395d5d&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwnIKB8roWn89QeoqpUuQGUx0EC8sWRG3KJicblCYcRFcx4J8jz6HGDUw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">AMSS的物理偏移为0x20000*0x16=0x2c0000</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.22196531791907514" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=f8282924&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVw7WkdOXx20tiaVnZeab5ibPE1EOPdKBGZgfv2Kc01iadibQO6pqt1A3y4GA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;"><strong>b.<span style="font:9px &#39;Times New Roman&#39;;">    </span></strong><strong>基带系统内存管理</strong></p><p style="text-align:left;text-indent:0in;"><strong> </strong></p><p style="text-align:left;text-indent:0in;">当基带系统的安全信任启动链验证完成后，最后系统被AMSS系统代码接管， AMSS系统定义了代码执行的内核特权模式以及AMSS应用模式，设置页表（映射硬件外设地址到页表中）并且开启MMU(内存管理单元)，在某些敏感的内存地址区域通过MPU的特性来进行保护，只有特定权限的应用的可以访问，应用模式的代码想要进入内核态（例如IPC消息发送），可以通过设置的特权中断指令SVC进入内核态，下图就是进入特权syscall的中断向量表入口。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.3886178861788618" data-s="300,640" style="" data-type="png" data-w="615" src="https://wechat2rss.xlab.app/img-proxy/?k=13b29450&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwLv6SI1SX24RnlERC9rRKMsgoEcwuOnT1yPvHtJu0YA7DmcWiblN0blw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.37341040462427744" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=860284c3&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwoj31Wk8sW8qVFbs2MHvHQz61PicrgGlzBVIicuD8uib60iceoqt0wdic23g%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">通过初始化页表完成内核地址空间和外设硬件地址映射，开启mmu，进入用户空间创建第一个rootTask任务，初始化用户态需要创建的应用与驱动，这里主要介绍应用层堆内存结构以及内存分配和回收算法。</p><p style="text-align:left;text-indent:0in;">REX系统堆内存分两种类型：</p><p style="text-align:left;text-indent:0in;">Big chunk（大堆）</p><p style="text-align:left;text-indent:0in;">small heap（小堆）</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">大堆在不同应用初始化的时候指定内存的起始地址与长度，而且根据应用功能的不同，分配方式也不同，小堆将会在大堆上进行分配使用，大堆由于给使用的应用不同，分配小堆的方式有所不同。</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;">a．<span style="font:9px &#39;Times New Roman&#39;;">  </span>大堆类型1,内存连续，分配小堆的方式是顺序分配，前面是分配好的小堆，后面是连续的空闲堆块，分配小堆只会在连续的空闲块上进行分配，例如前面多个分配好的小堆其中一个需要被释放后，只是把这个小堆的属性标记为freed，但由于它后面的小堆到连续的空闲块中间有标记为已经分配属性，所以后续在分配小堆的过程中不会考虑这块已经被释放的内存，除非要释放的小堆内存和连续的空闲块紧挨着，下一次分配内存时才会从这个已经标记为释放的内存上进行分配，而是直接到后面的连续空闲块上进行分配，这样做的目的是为了分配和释放内存更高效，虽然牺牲了一些空间，结构如下图。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.6797687861271676" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=2bc462ca&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwb4OhYaKP5NKE8GibPvKjDzgf9fLyHmGlySrMYJKpLYwBKakJUhplwfg%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">下图是这种chunk上分配小堆的状态信息示例</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.8554913294797688" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=ba3fedac&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwzXo9QQqKexSRTBEm6ZZGUOsu7VSOyJROqYFdibRLu30mGHx5k7Amung%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;">b．大堆类型2,（modem chunk）,也是一个连续内存区域，但是chunk header在内存的底部，上部为分配小堆区域，分配顺序也是从上往下分配，小堆的头部数据结构中会指向上一个已经分配好的小堆，通过单向链表进行小堆内存的回溯，最上面的小堆回溯指针为空，但是它的内存分配算法跟上面的不同，就算要被释放的小堆内存和空闲块不挨着，但是它任能在下一次的堆内存申请中被重用，只要它的大小合适，而且小堆数据结构与类型1也不同，基本结构如下图。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.6947976878612717" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=a268bf9a&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwSRFSBBJddUPKLeDZ3VqRhpEJCTCKgvgtVdrKN0T8balUX12CPrQYiaA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">Modem使用大堆结构示例</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.4820809248554913" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=bb274793&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwvptSQ0ZuHYzzib7WYqI7xtmyacOZSyibu9YoZPBH7pUv017dPib7loBSw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">我们可以看到chunk类型1和chunk类型2上面分配的小堆内存结构稍有不同，数据结构如下：</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">Smallheap1{</p><p style="text-align:left;text-indent:56px;">Uint32size;//+0 分配内存空间的长度加上头部长度0xc字节</p><p style="text-align:left;text-indent:14px;">Uint8  mem_flag;//+0x4 内存属性标志，0表示已分配，0xff表示释放掉的内存</p><p style="text-align:left;text-indent:14px;">Uint8  extr_mem_flag;//+0x5 扩展内存属性标志，0表示内存分配过，0xff表示</p><p style="text-align:left;text-indent:154px;">//内存空间，没有被使用过</p><p style="text-align:left;text-indent:14px;">Uint8  mem_extra_size;//+0x6 额外分配的内存长度，为了内存0x10字节对齐</p><p style="text-align:left;text-indent:154px;">//所额外增加的申请内存长度，必须小0x10字节</p><p style="text-align:left;text-indent:14px;">Uint8  mem_pad_char;//+0x7 填充字节0xaa</p><p style="text-align:left;text-indent:14px;">Uint16 crc16_cookie;//+0x8  对传入的第三个参数的crc16计算的值</p><p style="text-align:left;text-indent:14px;">Uint16 mem_id;//0x0a   内存标识,第四个参数传入</p><p style="text-align:left;text-indent:14px;">Uint8 mem_buffer[size-0x0c];//+0xc 用户使用内存buffer</p><p style="text-align:left;text-indent:0in;">}</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">Smallmodem heap{</p><p style="text-align:left;text-indent:0in;">  Uint32size;// +0 分配内存空间的长度加上头部长度0x10字节</p><p style="text-align:left;text-indent:0in;">  Uint32*pre_alloc_ptr;//+4 指向上一个分配好的小堆内存头部指针</p><p style="text-align:left;text-indent:0in;">  Uint8client_id;//+8 申请内存的应用id值，modem功能中定义了</p><p style="text-align:left;text-indent:98px;">//RRC/CM/SM/RLC/gstk/wms等多个应用，这个id来标识申请内</p><p style="text-align:left;text-indent:98px;">//存的应用来自于哪个业务应用</p><p style="text-align:left;text-indent:0in;">  Uint8  mem_flag;//+0x9 内存属性标志，0表示分配了，1表示释放了，</p><p style="text-align:left;text-indent:126px;">//3表示未使用</p><p style="text-align:left;text-indent:0in;">  Uint8 unknown_byte;//+0xa</p><p style="text-align:left;text-indent:0in;">  Uint8  mem_guard_bits;//+0xbmodem内存保护标志0x6a</p><p style="text-align:left;text-indent:0in;">  Uint32  alloc_ret_addr;//+0xc 分配内存函数的下一条指令地址，目的是为了</p><p style="text-align:left;text-indent:154px;">//确定执行内存分配行为的精确地址</p><p style="text-align:left;text-indent:0in;">  Uint8 mem_buf[0xsize-0x10]; //+0x10 供用户使用的内存buffer</p><p style="text-align:left;text-indent:0in;">}</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;"><strong>c.<span style="font:9px &#39;Times New Roman&#39;;">     </span></strong><strong>基带系统文件系统</strong></p><p style="text-align:left;text-indent:0in;">由于篇幅问题，我会对Qualcomm基带的文件系统EFS单独写一篇详细的分析文章。</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;"><strong>d.<span style="font:9px &#39;Times New Roman&#39;;">    </span></strong><strong>高通基带芯片定时器（Timer）</strong></p><p style="text-align:left;text-indent:0in;"><strong> </strong></p><p style="text-align:left;text-indent:0in;">定时器是嵌入式芯片非常重要的组成部分，它在嵌入式操作系统的CPU调度和定时任务执行，以及精确的延时等待等操作中扮演着非常重要的角色，高通的基带芯片的定时器调度算法大体都差不太多，我们基于ARM1136架构的MDM6600基带芯片对定时器算法进行了深入分析。</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">MDM6600的定时器是通过SleepTimer控制器来实现的，它包含两个16位的Timer0和Timer1，以及一个32位的TimeTick的计数器(counter)，它们的功能用途如下.</p><p style="text-align:left;text-indent:0in;">1．Timer0   供watchdog使用</p><p style="text-align:left;text-indent:0in;">2．Timer1   供3G的wcdma的功能模块使用</p><p style="text-align:left;text-indent:0in;">3．TimeTick 系统计数器，服务于系统的子任务模块创建的定时器任务的执行以及延时功能的使用</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">Timer0应用于watchdog功能中，Watchdog在实时嵌入式系统中扮演着非常重要的角色，它监控任务的正常运行，监控的任务必须定时喂狗（feeddog），watchdog才认为你在正常工作，要不然就可能会直接reset系统，后续也会介绍它在基带里面具体监控的应用。</p><p style="text-align:left;text-indent:0in;">Timer1将会在3GWCDMA应用中收发相关的定时中断中会详细介绍。</p><p style="text-align:left;text-indent:0in;">TimeTick是一个32位的系统计数器，初始化后会从0开始计数，计数到0xfffffff后溢出到0后重新开始计数，主要功能如下：</p><p style="text-align:left;">1．<span style="font:9px &#39;Times New Roman&#39;;">  </span>执行定时任务</p><p style="text-align:left;">a.<span style="font:9px &#39;Times New Roman&#39;;">     </span>执行一次</p><p style="text-align:left;">b.<span style="font:9px &#39;Times New Roman&#39;;">    </span>周期性执行</p><p style="text-align:left;">2．<span style="font:9px &#39;Times New Roman&#39;;">  </span>执行延时功能</p><p style="text-align:left;">a.<span style="font:9px &#39;Times New Roman&#39;;">     </span>延时等待</p><p style="text-align:left;">   TimeTick的时钟源为32768Hz，这意味着这个计数器1秒钟会计数32768次，通过这个信息我们可以大致计算出从0计数到0xffffffff需要36个小时。</p><p style="text-align:left;">   定时任务功能特性：</p><p style="text-align:left;">a.<span style="font:9px &#39;Times New Roman&#39;;">     </span>通过设置TimeTick的match value来决定计数器计数到这个值后产生一个中断，中断里面可以处理相应的定时任务，以及设置新的TimeTickmatch value。</p><p style="text-align:left;">b.<span style="font:9px &#39;Times New Roman&#39;;">    </span>所有的定时任务都会存储在定时任务列表中，提供定时任务的插入，删除，暂停，唤醒执行等功能。</p><p style="margin-left:28px;text-align:left;">下图描绘了定时器任务执行的基本过程</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.5884393063583815" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=f51866a4&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVw0gCEqgUReica3PKqt6r94ARvQQzBrKRCCvYclfuDhNXwb7aqZQibqUYw%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">在基带系统中存在多个应用任务，每个任务的执行都是依赖内核的CPU调度，常见的方式就是时间片和优先级切换让各个不同的任务有机会得到执行，而某些任务在运行过程中的某个时机可能会创建一个或者多个定时器任务，例如上图所示的任务Task1创建的定时器任务Timer1，Task2创建的定时器任务Timer2和Timer3，处理这些任务的算法如下：</p><p style="text-align:left;">1．<span style="font:9px &#39;Times New Roman&#39;;">  </span>创建定时任务时，获取当前TimeTick的计数</p><p style="text-align:left;">2．<span style="font:9px &#39;Times New Roman&#39;;">  </span>把延时换算法成计数，比如1秒等于32768次计数</p><p style="text-align:left;">3．<span style="font:9px &#39;Times New Roman&#39;;">  </span>把当前timetick计数加上延时的计数值作为该定时任务中断触发的match value</p><p style="text-align:left;">4．<span style="font:9px &#39;Times New Roman&#39;;">  </span>遍历所有定时任务，根据任务设置的定时任务中断触发的match value大小排序插入到定时任务列表</p><p style="text-align:left;">5．<span style="font:9px &#39;Times New Roman&#39;;">  </span>当timetick的计数到达某个定时任务的Match value的时候产生中断，中断处理例程ISR会通过向DPC（Deferred Procedure Calls）发送执行定时任务的消息去执行该定时任务的例程函数，如果只是延时任务就不需要执行了，同时更新timetick的下一次中断产生的match value，并把这个定时任务从定时任务列表中移除</p><p style="margin-left:.25in;text-align:left;">如上图举例：</p><table cellspacing="0" cellpadding="0"><tbody><tr><td width="184" valign="top" style="border-width: 1px;border-style: solid;border-color: windowtext;padding: 0in 7px;"><p style="text-align:left;"><span style="font-size:7px;">应用任务 </span><span style="font-size:7px;">                       定时任务/MV</span></p></td><td width="184" valign="top" style="border-top: 1px solid windowtext;border-right: 1px solid windowtext;border-bottom: 1px solid windowtext;border-left: none;padding: 0in 7px;"><br/></td><td width="184" valign="top" style="border-top: 1px solid windowtext;border-right: 1px solid windowtext;border-bottom: 1px solid windowtext;border-left: none;padding: 0in 7px;"><br/></td></tr><tr><td width="184" valign="top" style="border-right: 1px solid windowtext;border-bottom: 1px solid windowtext;border-left: 1px solid windowtext;border-top: none;padding: 0in 7px;"><p style="text-align:left;">Task1</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><p style="text-align:left;">Timer1/M1</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><br/></td></tr><tr><td width="184" valign="top" style="border-right: 1px solid windowtext;border-bottom: 1px solid windowtext;border-left: 1px solid windowtext;border-top: none;padding: 0in 7px;"><p style="text-align:left;">Task2</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><p style="text-align:left;">Timer2/M5</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><p style="text-align:left;">Timer3/M3</p></td></tr><tr><td width="184" valign="top" style="border-right: 1px solid windowtext;border-bottom: 1px solid windowtext;border-left: 1px solid windowtext;border-top: none;padding: 0in 7px;"><p style="text-align:left;">Task3</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><p style="text-align:left;">Timer4/M6</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><br/></td></tr><tr><td width="184" valign="top" style="border-right: 1px solid windowtext;border-bottom: 1px solid windowtext;border-left: 1px solid windowtext;border-top: none;padding: 0in 7px;"><p style="text-align:left;">Task4</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><p style="text-align:left;">Timer5/M7</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><br/></td></tr><tr><td width="184" valign="top" style="border-right: 1px solid windowtext;border-bottom: 1px solid windowtext;border-left: 1px solid windowtext;border-top: none;padding: 0in 7px;"><p style="text-align:left;">TaskN</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><p style="text-align:left;">TimerN/M4</p></td><td width="184" valign="top" style="border-top: none;border-left: none;border-bottom: 1px solid windowtext;border-right: 1px solid windowtext;padding: 0in 7px;"><br/></td></tr></tbody></table><p style="margin-left:.25in;text-align:left;">按照时间推进过程，这些定时任务执行需要设置的Match value来产生中断的顺序依次是：</p><p style="margin-left:.25in;text-align:left;">M1 <span style="font-family:Wingdings;">à</span> M4 <span style="font-family:Wingdings;">à</span> M3 <span style="font-family:Wingdings;">à</span> M5 <span style="font-family:Wingdings;">à</span>M6 <span style="font-family:Wingdings;">à</span> M7</p><p style="text-align:left;text-indent:0in;">所以在基带系统里面会有一个专门的定时器应用任务来管理维护其它应用任务产生的定时器任务的调度。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.5815028901734104" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=b5ee0991&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVw7gltKOCo8Xdt6npFBOzgqF5I9BBfOwCYHS01aOcONXfuU3Aic12z8eg%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;"><strong>e.<span style="font:9px &#39;Times New Roman&#39;;">     </span></strong><strong>任务管理和IPC通信机制</strong></p><p style="text-align:left;"><strong> </strong></p><p style="text-align:left;">  上面提到基带系统从内核态切入到应用态会创建第一个rootTask应用任务，这个任务有点类似linux系统里面的init进程，rootTask接下来会创建应用权限很高的DPC_task任务（负责高实时异步任务执行），权限仅次于IST（interruptservice threads,中断服务接管线程），然后是应用层的全局管理任务main_task将会启动，接下来业务所需的各种驱动相关的初始化和通信业务逻辑任务将在main_task任务中得以创建，例如中断接管服务相关的IST(interruptService Threads)，定时器业务相关的timer_task，qualcommEFS文件系统相关的fs_task，任务监控相关的watchdog_task，以及GSM/UMTS业务相关的通信层面的各个任务。</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">每个任务被创建时，REX内核和用户态各自会维护一套数据结构，以及用户自定义的一套TCB结构：</p><p style="text-align:left;text-indent:0in;">内核态—&gt;KTCB（Kernel Task Control Block）</p><p style="text-align:left;text-indent:0in;">用户态—&gt;UTCB（User Task Control Block）</p><p style="text-align:left;text-indent:0in;">用户态—&gt;REX_TCB(用户自定义TCB结构)</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">在内核态，cpu通过KTCB来管理调度所有的任务，以及管理用户态任务在切换时存储任务的context信息。</p><p style="text-align:left;text-indent:0in;">内核态的KTCB列表包含1个idle内核线程,8个IRQ和1个FIQ内核线程任务KTCB结构，以及每一个用户任务UTCB对应的在内核空间存储的KTCB结构。</p><p style="text-align:left;text-indent:0in;">在用户态，每一个任务都会通过UTCB结构存储任务信息供用户读写，并且该UTCB结构也会映射到内核空间供内核读写，而用户态的REX_TCB是供用户自定义的数据结构，用户可以自定义一些方便业务间通信的数据结构。</p><p style="text-align:left;text-indent:0in;">任务的几个重要的特性：</p><ol style="list-style-type: decimal;" class=" list-paddingleft-2"><li><p style="text-align:left;">内核态读取0xf0000008地址存储着当前活动任务的KTCB指针</p></li><li><p style="text-align:left;">内核态0xf001e000存储着所有KTCB结构的列表</p></li><li><p style="text-align:left;">在用户态读取0xff000ff0地址值可以获取当前活动任务的UTCB指针</p></li></ol><p style="margin-left:.25in;text-align:left;">KTCB，UTCB和用户定义的TCB结构关系如下图：</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.5606936416184971" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=924d9c54&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwHtHgY3ibXx6ACdnfNBAbgse4AMpBibUYonMlMjCv6drJRv0mXbicmvPQA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">从上图可知，UTCB结构通过内存映射的方式会被内核态和用户态共同读写，utcb通过timetick计数器来记录任务使用了多少cpu时间，为任务调度提供了很好的判断条件。</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">每个被创建的任务都包含一些信息，初始化时会存储在UTCB结构和用户定义的TCB结构中:</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;"> </p><ol style="list-style-type: decimal;" class=" list-paddingleft-2"><li><p style="text-align:left;">任务的执行函数地址</p></li><li><p style="text-align:left;">任务执行函数参数</p></li><li><p style="text-align:left;">堆栈起始地址</p></li><li><p style="text-align:left;">堆栈的长度</p></li><li><p style="text-align:left;">任务优先级别</p></li><li><p style="text-align:left;">存储用户tcb地址</p></li><li><p style="text-align:left;">任务名称</p></li></ol><p style="text-align:left;text-indent:0in;">任务创建函数定义类似结构如下，不同的版本可能会有一些变形：</p><p style="text-align:left;text-indent:0in;">Void *createTask(void *utcb,void*task_func_ptr,uint32 stack_size,void *stack_buttom,void *stack_top,uint32task_priority，void *pararm)</p><p style="text-align:left;">用户定义tcb结构是一个双向链表结构，每个用户tcb会把高于自己优先的任务插入到前链，低于自己优先级的任务插入到后链，所有的任务中中断接受任务中的FIQ任务的优先级是最高的，它用于快速处理来自于fiq中断请求。</p><p style="text-align:left;text-indent:0in;">下图是枚举出的部分运行的任务列表：</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.5375722543352601" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=cd86a4d1&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVw7v7k0h5Zdsf91y2JLA2CSrNWs7I1cfnb9mbITl5RzHR2Wwwwe2oL0g%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">所有的任务通过优先级的高低，利用双向链表链接起来，如下图，FIQ任务具有最高优先级。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.1722543352601156" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=0bac95c5&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwiaqA6LAX3CcxBbGWUPwD4alwWuTHtzfEaBPoV2aV7wMoDB7Y4YGWrrg%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">而sleep任务具有最低运行优先级。</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.24624277456647398" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=bdb31bfd&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwlRfR0g9QrCmvvxLbjVJ2lL5kpmFbIzCrsmG5vx6d9paw6VlXpNficaA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;">用户态的任务创建和运行流程如下图：</p><p style="text-align: center;"><img class="rich_pages" data-ratio="0.4820809248554913" data-s="300,640" style="" data-type="png" data-w="865" src="https://wechat2rss.xlab.app/img-proxy/?k=c51500ed&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YTVrXsnSChqK0JhVdOedoVwSW8y0Rko2hRr4iaFhDibC08epNZbLic59JrbZ8A1Y1POwKHicica4Qtq8QA%2F640%3Fwx_fmt%3Dpng"/></p><p style="text-align:left;text-indent:0in;">用户态任务运行特性：</p><p style="text-align:left;">a.<span style="font:9px &#39;Times New Roman&#39;;">     </span>每个被创建后的任务会被调度运行起来后，直至到等待信号的循环，阻塞接收消息，此时交出cpu执行权，切换执行任务。</p><p style="text-align:left;">b.<span style="font:9px &#39;Times New Roman&#39;;">    </span>当某个任务接收到消息后，任务等待信号的循环返回，根据接受到信号去处理相应的例程，然后清除接受到的信号值，继续新一轮的信号等待。</p><p style="text-align:left;">c.<span style="font:9px &#39;Times New Roman&#39;;">     </span>任务通过设置接受信号的掩码来设置多个信号处理例程，每个任务最多支持设置32个信号接受值。</p><p style="text-align:left;">d.<span style="font:9px &#39;Times New Roman&#39;;">    </span>信号接受值和信号接受掩码会在utcb结构中设置。</p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;"> </p><p style="text-align:left;text-indent:0in;"><strong>IPC任务间通信</strong></p><p style="text-align:left;">IPC通信是多任务协作通知和同步数据，非常重要的系统机制，在实时操作系统中应用广泛，对于无线通信复杂的状态机制以及低延时同步处理，IPC通信起到了至关重要的作用。</p><p style="text-align:left;">从上图我们可知每个运行的任务都有独立运行环境，有自己的堆栈空间，当不同任务之间进行数据交换和同步的时候，这时候就需要用到IPC机制了，我们把用户任务的rex_tcb结构作为任务的唯一标示，用它与之不同的任务进行通信，这里用到了很重要的信号通知和等待信号通知的机制，从上面我们可知每个任务可以定义最多32个信号量来区分接收到的不同信号，然后根据接受到的不同信号进行相应的处理。</p><p style="text-align:left;">例如A任务需要告之B任务，处理B任务里面的某个分支逻辑时，A只需要设置B任务rex_tcb结构里面信号值即可，当B任务被调度起来后的接受信号等待函数会立即返回取出A发送来的信号值，然后B任务作相应的处理。</p><p style="text-align:left;">该IPC通知机制在基带系统里面应用广泛，后续我也会提到。</p><p style="text-align:left;"> </p><p style="margin-left:24px;text-align:left;">任务调度机制：</p><p style="text-align:left;">a.<span style="font:9px &#39;Times New Roman&#39;;">    </span>中断发生时，cpu将调度到IST接管中断处理，因为IST的优先级比较高</p><p style="text-align:left;">b.<span style="font:9px &#39;Times New Roman&#39;;">    </span>当任务等待消息阻塞时，任务主动交出cpu控制权</p><p style="text-align:left;">c.<span style="font:9px &#39;Times New Roman&#39;;">    </span>应用任务都在等待时，rootTask和Main Task接管CPU，类似idleloop</p><p style="text-align:left;">d.<span style="font:9px &#39;Times New Roman&#39;;">    </span>当各个任务都有接受到消息时，根据任务的优先级和cpu使用时间进行调度</p><p style="margin-left:24px;text-align:left;">如下图系统初始化过程中的任务的切换过程以及CPU使用时间统计。</p><p style="text-align:left;text-indent:0in;"><br/></p><p><img class="" data-ratio="0.5383411580594679" data-s="300,640" style="" data-type="png" data-w="1278" src="https://wechat2rss.xlab.app/img-proxy/?k=bf3abb87&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YQ31jSxTJOicVL0iae7ySpZn5clw0U3Jicp5YQIAVFicruD6dFRS5r84rc22XniaBEAGSF9TsicZyR5yB9A%2F640%3Fwx_fmt%3Dpng"/></p><p><img class="" data-ratio="0.5851735015772871" data-s="300,640" style="" data-type="png" data-w="1268" src="https://wechat2rss.xlab.app/img-proxy/?k=65ec0232&amp;u=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2F6A8ibk8vw6YQ31jSxTJOicVL0iae7ySpZn50A8GSLcLLQb0cHtQJN3OKqMcDRKrp6k7K95BhcMEjcrf0MicBR9njHg%2F640%3Fwx_fmt%3Dpng"/></p><p style="margin-left:24px;text-align:left;">我们可以看到，在系统初始化过程中，各个任务的初始化过程，cpu使用时间都差不太多，因为初始化完了都处于阻塞状态了，只有rootTask和Main Task占有大量的CPU时间，因为rootTask需要负责大量的KTCB切换的通知操作，而且Main Task主动初始化那些应用任务。</p><p style="text-align:left;text-indent:0in;"> <br/></p><p style="text-align:left;"><strong>f.<span style="font:9px &#39;Times New Roman&#39;;">      </span></strong><strong>中断管理</strong></p><p style="margin-left:.25in;">基带系统在系统初始化过程中会初始化中断控制器，注册相应的中断服务例程，设置中断优先级，并且生效中断响应，在高通的MDM6600基带系统中设置了8个响应IRQ的IST任务，和1个响应FIQ的IST任务，优先级依次提升，FIQ的IST任务具有最高的优先级别，因为在中断处理过程，可能会有更高优先级的中断产生，这时需要有高优先级的IST来接管响应来提升中断响应的实时性，由于中断是由硬件产生，而IST在应用态，所以中断处理过程如下。</p><p>1．<span style="font:9px &#39;Times New Roman&#39;;">  </span>硬件中断产生                                                        （物理层）</p><p>2．<span style="font:9px &#39;Times New Roman&#39;;">  </span>判断是否是generic irq还是fiq                                                    （物理层）</p><p>3．<span style="font:9px &#39;Times New Roman&#39;;">  </span>进入到irq exception或者fiq exception向量表                             （内核）</p><p>4．<span style="font:9px &#39;Times New Roman&#39;;">  </span>投递到相应中断处理分发器                                            （内核）</p><p>5．<span style="font:9px &#39;Times New Roman&#39;;">  </span>查询IRQ和FIQ的内核KTCB状态是否空闲                                  （内核）</p><p>6．<span style="font:9px &#39;Times New Roman&#39;;">  </span>通过KTCB结构找到相应的IST任务                                                  （内核）</p><p>7．<span style="font:9px &#39;Times New Roman&#39;;">  </span>相应的IST接管中断，锁定该IST，并查询中断号对应的ISR  （应用层）</p><p>8．<span style="font:9px &#39;Times New Roman&#39;;">  </span>执行ISR后，清除中断状态，解锁IST，等待新的中断响应  （应用层）</p><p style="text-indent:0in;"> </p><p style="margin-left:.25in;"> </p><ul style="" class=" list-paddingleft-2"><li><p style="text-align:left;"><strong>结语</strong></p></li></ul><p style="text-align:left;text-indent:0in;">    本文章的目的主要是为了对高通的基带系统有一个体系化的了解，操作系统作为承载业务系统的基础设施，了解其运行原理对于研究上层业务会有很大的帮助，由于高通的的基带系统非常封闭，研究需要大量的逆向工程的工作，记录了大量的笔记，无法一一整理发出，所以也有可能会有一些遗漏和不足，如果有熟悉的同学，也希望能够指出有错误的地方，便于改正，接下来系列的研究文章将针对高通基带对于3GPP定义的GSM/UMTS/LTE，以及5G的实现上，并且挖掘其安全攻击面，希望能够坚持下去。</p><p style="text-indent:0in;"><strong> </strong></p><p style="text-indent:0in;"><strong> </strong></p><p style="text-indent:0in;"><strong> </strong></p><p style="text-indent:0in;"><strong> </strong></p><p style="text-indent:0in;"><strong> </strong></p><p style="text-indent:0in;"><strong> </strong></p><p style="text-indent:0in;"><strong>                                                                                                    </strong></p><p style="text-indent:0in;"><br/></p><p><br/></p>



<p><a href="2247483685">阅读原文</a></p>
<p><a href="https://wechat2rss.xlab.app/link-proxy/?k=9b9c5627&amp;r=1&amp;u=https%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzIxMjY0NjA2Mw%3D%3D%26mid%3D2247483685%26idx%3D1%26sn%3D840a7fa589a083765124f8d2ed8ad47e%26subscene%3D0">跳转微信打开</a></p>
]]></content:encoded>
      <pubDate>Mon, 09 Sep 2019 10:18:00 +0800</pubDate>
    </item>
  </channel>
</rss>