UICC 架构与卡状态机详细设计

从开机问候到SIM卡菜单:一文搞懂UICC CAT主动式命令的实战应用 本文深入解析UICC CAT主动式命令的实战应用,涵盖从开机问候语到动态菜单系统的嵌入式实现。通过ETSI TS 102 223规范,开发者可以掌握CAT技术,实现SIM卡与终端的双向交互,提升智能卡在物联网和移动设备中的功能扩展能力。 阅读详情

description: “SIM卡/UICC模块的核心架构设计,剖析从底层 HAL 状态上报到 Framework 层的对象树建立、卡状态流转、eSIM MEP 支持以及 Google 的核心设计技巧。”

本篇文档聚焦于 SIM卡/UICC模块(Universal Integrated Circuit Card)。主要讲解当用户将一张 SIM 卡插入手机后,Android Telephony 框架是如何感知、建立卡状态树,并管理这张卡的生命周期的。

设计理念: Google 在 UICC 模块的设计中体现了多项经典软件工程实践:全局单例控制、分层对象树建模、观察者模式事件分发、双缓存(内存+SharedPrefs)快速卡识别、以及完善的关机保护机制。

1. 核心职责

UICC 模块是 Telephony 运行的基石,它的核心职责包括:

  • 状态监听:接收底层 HAL (Radio) 的 SIM_STATUS_CHANGED 等事件,并解析为 Framework 可读的状态。
  • 卡对象树维护:在内存中构建和维护一套反映物理卡片层次结构的对象树(UiccSlot -> UiccCard -> UiccProfile -> UiccCardApplication)。
  • 安全与认证:处理 PIN/PUK 码校验,读取卡上的文件系统(EF,Elementary File)获取 IMSI、ICCID 等核心参数。
  • eSIM/MEP 支持:支持 eUICC(嵌入式 SIM)及 MEP(Multiple Enabled Profiles)特性,实现单卡多 Profile 的管理。

2. 核心类与源码锚点 (Source Code Anchors)

当前工作区内的核心类均位于 frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/ 目录下:

  • [UiccController.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccController.java):UICC 模块的"总司令",全局单例。负责监听所有 RIL 实例的卡状态变化事件。
  • [UiccSlot.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccSlot.java):代表手机上的物理卡槽或 eUICC(eSIM)卡槽。
  • [UiccCard.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccCard.java):代表插在卡槽里的物理卡片。如果卡槽为空,则该对象为 null。
  • [UiccProfile.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccProfile.java):代表卡片上激活的配置文件。对于传统的实体 SIM 卡,一张卡对应一个 Profile;对于 eSIM,一张卡可以包含多个 Profile,但同一时刻只有一个被激活。
  • [UiccCardApplication.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java):代表 Profile 中的具体应用(如 USIM 应用负责 3G/4G 网络认证,CSIM 应用负责 CDMA 网络认证,ISIM 负责 IMS 认证)。
  • [IccCardStatus.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/IccCardStatus.java):从底层 HAL 上报的卡状态原始数据结构模型。
  • [EuiccCard.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/euicc/EuiccCard.java):继承自 UiccCard 的 eSIM 卡片实现,支持 Profile 下载、切换等 eUICC 特有操作。
  • [PinStorage.java](file:///d:/Resource/Android%2016/android-16/frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/PinStorage.java):PIN 码安全存储模块,负责 PIN/PUK 码的加密持久化存储。

3. UICC 对象树模型 (Object Hierarchy)

Android 框架通过严格的层级关系在内存中模拟了真实的物理卡片结构。

"1 对 多"

"1 对 1"

"1 对 多 (MEP)"

"1 对 多"

"eSIM 扩展"

«Singleton»

UiccController

-UiccSlot[] mUiccSlots

-int[] mPhoneIdToSlotId

-CommandsInterface[] mCis

-ArrayList<String> mCardStrings

-int[] mSimCardState

-int[] mSimApplicationState

-int mDefaultEuiccCardId

+getUiccSlot(int phoneId)

+getUiccProfile(int phoneId)

+getUiccCardForPhone(int phoneId)

UiccSlot

-UiccCard mUiccCard

-boolean mActive

-boolean mIsEuicc

-int[] mPortToActiveAppIndex

UiccCard

-UiccProfile[] mUiccProfiles

-int mCardId

Android 13 双卡手机开机后,SIM卡信息是怎么一步步加载到系统的? 本文深入解析Android 13双卡手机启动时SIM卡信息加载的全流程,从硬件层初始化到系统服务构建,再到数据加载与双卡场景优化。特别关注Telephony框架的改进,包括多SIM并发控制、状态机精细化和资源仲裁机制,帮助开发者理解Android 13在双卡支持上的架构演进。 阅读详情

相关推荐

Android SIM卡加载全流程解析:从MODEM到RIL的完整通信链路(附日志分析)

本文深入解析了Android系统中SIM卡从硬件MODEM检测到Android框架RIL层加载的完整通信链路。详细剖析了MODEM、RIL与UICC的协同工作机制,并基于UiccController、IccRecords等核心模块的日志,提供了从状态查询、对象树构建到数据加载与广播的全流程实战分析,帮助开发者精准定位SIM卡相关疑难杂症。

python9snake的博客 503

保姆级图解:Android开机时,你的SIM卡到底经历了什么?(AOSP Telephony源码解析)

本文深入解析Android开机时SIM卡的完整加载流程,从硬件检测到信号栏显示的每个环节。通过AOSP Telephony源码分析,揭示SIM卡在基带处理器唤醒、UICC状态机协作、Subscription信息同步等关键阶段的工作原理,并提供实用调试指南和性能优化策略。

weixin_42566424的博客 231

Android SIM卡加载全流程解析:从MODEM到RIL的底层通信机制

本文深入解析了Android系统中SIM卡从物理插入到系统可用的完整加载流程。文章从AP与CP协同架构入手,详细剖析了MODEM如何通过RIL层上报状态变化、UiccController如何管理状态、以及IccRecords如何加载卡内数据的底层通信机制,为开发者排查SIM卡兼容性问题提供了清晰的调试思路。

s8t9u0v1w的博客 773

从开机问候到SIM卡菜单:一文搞懂ETSI TS 102 223规范里的CAT命令到底在做什么

本文深入解析ETSI TS 102 223规范中的CAT(Card Application Toolkit)命令机制,揭示SIM卡如何通过主动式命令实现与手机的交互。从开机问候语到SIM卡菜单的构建,CAT技术让UICC智能卡具备主动通信能力,支撑运营商服务的多样化扩展。文章详细剖析DISPLAY TEXT、SET UP MENU等核心命令流程,并探讨5G时代CAT在物联网中的创新应用。

weixin_33742618的博客 367

逆向工程师必备:用pySim-trace解码SIM卡通信协议(含Osmocom SIMtrace2实战案例)

本文详细介绍了如何利用pySim-trace工具解码SIM卡通信协议,并结合Osmocom SIMtrace2硬件进行实战分析。文章从构建分析实验室、实时捕获GSMTAP-UDP数据流,到深度解析AUTHENTICATE等关键指令与加密参数,并进阶探讨了eUICC(嵌入式通用集成电路卡)中ISD-R的激活过程。通过完整的案例和操作指南,帮助逆向工程师和安全研究人员透视SIM卡内部交互,高效诊断问题与发现安全漏洞。

2y3u4i5o6p的博客 770

Android手机开机时,SIM卡到底在后台偷偷干了啥?一个UiccController的完整工作流拆解

本文深入解析Android手机开机时SIM卡初始化的完整流程,从UiccController的诞生到Subscription数据库的持久化。通过分析AOSP源码,详细拆解了Telephony架构中SIM卡状态检测、硬件抽象层对接、运营商配置加载等关键步骤,揭示了多卡设备下的协调机制。

weixin_30652491的博客 295

UICC 之 USIM 详解全系列——智能卡硬件接口与通信协议探秘

本文深入解析了UICC中USIM卡的硬件接口与通信协议,详细介绍了ISO/IEC 7816标准下的物理接口设计、底层通信协议及信号交互实战细节。通过实际案例分享,揭示了智能卡鉴权过程中的关键技术和常见问题解决方案,为硬件工程师提供了宝贵的设计经验和优化建议。

weixin_30642869的博客 337

ETSI TS 102 223规范解析:手把手教你用Wireshark抓包分析CAT会话

本文深入解析ETSI TS 102 223规范,详细介绍如何使用Wireshark抓包分析CAT会话。从协议基础到实验环境搭建,再到CAT会话生命周期解析,帮助开发者掌握UICC与终端间的主动式命令交互机制,提升移动通信系统调试能力。

weixin_33725126的博客 464

别再只盯着Radio日志了!Android手机开机SIM卡识别慢?用这招定位UiccController到SubscriptionController的流程瓶颈

本文深入解析Android手机开机时SIM卡识别延迟问题,突破传统Radio日志的局限,提供从UiccController到SubscriptionController的全链路优化方案。通过AOSP源码分析、关键事件时序监控、状态机阻塞检测及订阅数据库写入优化,有效定位并解决SIM卡初始化瓶颈,特别针对多卡场景下的竞态条件提出实用解决方案。

weixin_28744423的博客 365

第 36 章:电话与 RIL

无线接口层是 Java 电话框架和厂商调制解调器固件之间的桥梁。早期 RIL 是 C 语言守护进程 rild,通过 Unix 套接字、自定义二进制协议与框架通信。Android12 及以后迁移到稳定 AIDL HAL,把旧的单体 IRadio HIDL 接口拆分为多个按业务域划分的 AIDL 接口。# 列出全部radio‑hal aidl文件# 统计IRadioVoice接口方法数量# 统计IRadioData接口方法数量# 查看语音通话数据结构体Call.aidl。

dengfuma的专栏 262

3.3.1 eUICC Package Download and Execution: A Step-by-Step Guide to Secure Profile Management

本文详细解析了eUICC包下载与执行的安全流程,涵盖签名验证、配置生效、异常处理等关键环节。通过实战案例和性能优化技巧,帮助开发者掌握远程SIM配置技术,确保物联网设备安全高效地管理运营商配置文件。

weixin_30823001的博客 494

嵌入式SIM卡驱动源码:含复位控制、APDU读写与响应解析

一套轻量级C语言实现的SIM卡底层通信模块,专注ISO/IEC 7816-3协议在MCU上的落地。代码主体为SIM_card.c,完整封装卡复位流程(包括冷复位、热复位及ATR解析),支持构造并发送任意APDU指令,同时提供响应数据接收、状态字SW1/SW2提取与基础错误判别功能。所有接口面向裸机或RTOS环境设计,无第三方库依赖,适配STM32、GD32等主流ARM Cortex-M系列芯片,可直接集成进智能卡读卡器、eSIM管理固件或协议调试工具中。包含初始化配置、时序控制、T0协议帧处理等关键逻辑,兼

a0b1c2d3的专栏 226

ISO/IEC 7816-4:2005智能卡通信协议标准详解

ISO/IEC 7816-4是智能卡应用层交互的规范核心,定义了命令集、文件系统结构、安全机制及应用生命周期管理。其采用分层模型,支持多应用并行运行,并通过标准化APDU格式实现跨平台互操作性。

weixin_33622085的博客 1388

传输线的特征阻抗

信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输入端或输出端处于阻抗匹配状态,简称为阻抗匹配。否则,便称为阻抗失配。有时也直接叫做匹配或失配。指一个电路输入端的等效阻抗。在输入端上加上一个电压源U,测量输入端的电流I,则输入阻抗Rin就是U/I。可以把输入端想象成一个电阻的两端,这个电阻的阻值,就是输入阻抗。- 对于电压驱动的电路,输入阻抗越大,则对电压源的负载就越轻,因而就越容易驱动,也不会对信号源有影响;

学海无涯的专栏 4462

Altium Designer操作技巧(4)——如何利用嘉立创EDA来输出3D封装到AD封装库?

本文介绍了利用嘉立创EDA和FreeCAD软件为PCB元件添加3D模型的方法。首先在嘉立创EDA中搜索元件编号并导出3D模型,然后使用FreeCAD删除3D模型中的PCB基板部分,最后将处理后的3D模型导入PCB封装库并更新到PCB设计中。文章详细讲解了每个步骤的操作流程,包括模型导出、基板删除、位置调整等关键环节,并提供了解决常见问题的方法。通过这种方法,电子工程师可以快速获得元器件的3D模型,提高PCB设计的准确性。

u012526819的博客 2582

‌NTRU算法详细教程 | 2025年最新版(基于NIST后量子密码标准更新)

‌:NTRU是当前抗量子加密的黄金标准,‌。

blns_yxl的博客 1802

Spring Cloud Gateway 结合OAuth2提供UAA服务

微服务做用户认证和授权一直都是一个难点,随着OAuth2.0的密码模式被作废,更是难上加难了。今天胖哥群里的一个群友搭建用户认证授权体系的时候遇到了一些棘手的问题,这让胖哥觉得是时候分享一些思路出来了。 两种思路 通常微服务的认证和授权思路有两种: 所有的认证授权都由一个独立的用户认证授权服务器负责,它只负责发放Token,然后网关只负责转发请求到各个微服务模块,由微服务各个模块自行对Token进行校验处理。 另一种是网关不但承担了流量转发作用,还承担认证授权流程,当前请求的认证信息由网关中继给下游

duan18888的博客 648

【论文详解】AlphaGenome——Sequence-to-Multimodal-Genome-Track

**AlphaGenome** 是由 **Google DeepMind** 于 2025 年 6 月发布的突破性 AI 模型,专门用于预测非编码区遗传变异的功能效应。该模型采用受 **U-Net** 启发的卷积架构结合 **Transformer** 模块,创新性地解决了传统模型在输入序列长度与预测分辨率之间的核心矛盾——能够在 **1M 碱基对的超长上下文** 下实现 **单核苷酸分辨率** 的精准预测。

zwhszdx的博客 958

Python头歌实验题目(2024版)

武汉理工大学头歌平台实验题目

2401_84152595的博客 2万+

OpenCV轮廓匹配实战:5分钟搞定Hu矩形状识别(附完整代码)

本文详细介绍了使用OpenCV进行轮廓匹配的实战技术,重点讲解了Hu矩形状识别在工业质检等领域的应用。通过完整的代码示例和参数调优技巧,帮助开发者在5分钟内实现高效的形状识别,提升工业检测的准确性和效率。

nnn11的博客 675

置顶必读(1) |《滚雪球学SpringBoot 3.x》· 高质量专栏介绍,你值得拥有!

《滚雪球学SpringBoot 3.x》 并不是普通的技术讲解合集,它是专为开发者精心设计的系统化学习路径。通过不断“滚动学习”,我们将带领你从基础入门到高阶应用,从理解每一行代码到设计和优化大规模分布式系统,最终帮助你成长为一位精通 spring架构 的工程师。

**My Coding Family** 12万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: Android Tethering/netd 集成架构深度分析
下一篇: IMS (IP Multimedia Subsystem) 架构设计
爆打葡萄汁
博客等级 码龄7年 30粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值