QCC300x固件升级

1.概述

QCC300X升级功能提供了在外部Flash中下载和升级组件的能力,适用于QTIL语音设备和音乐设备,升级可用于更新或修改:

· 外部Flash应用程序

· ROM固件补丁(由高通公司提供)

· ROM DSP补丁(由高通公司提供)

· 外部Flash中的文件系统

· 外部Flash中的音频提示数据文件

升级提供了一个一步升级过程,在升级操作开始之前,将包含许多升级组件的单个文件下载到外部Flash中。

1.1 升级概述

2.外部Flash分区

升级要求Flash的物理分区布局与应用程序配置中的逻辑分区映射兼容。物理分区布局只能通过SPI接口设置,一旦初始设备镜像被刷新,就不能更改。

要使QCC300X设备可升级,它必须是双分区。也就是说,必须有两个大小相同的分区。这是因为其中一个分区将由VM应用程序使用,另一个分区用于在升级下载期间存储新数据。

2.1默认的分区布局

QCC300x ADK包含默认的Flash分区表,并为每个受支持的设备匹配逻辑分区配置。默认的分区布局表可以在< QCC300x ADK安装文件夹>\apps\sink\<device_variant>.ptn中找到。

默认的分区布局有单独的可升级分区:

· 固件和或DSP补丁

· 音频提示数据

· PSFS文件

· VM应用程序(包括应用程序配置)及其他数据。

2.2物理分区表

nvscmd工具使用一个分区表文件(.ptn文件)来设置闪存芯片中的分区结构。

分区表定义的格式为:

物理分区号、16位字大小(K=1024)、分区类型、分区内容(例如要刻录到分区上的文件或(擦除)要擦除分区内容)。

2.1 物理分区类型

下面是QCC3003设备的默认分区表文件:

0, 8K, PS, (none) # For PS Store

1, 32K, RO, qcc3003_patch_bundle.xuv # Logical #0 : For DSP & firmware patches #0,1

2, 32K, RO, (erase) # Logical #0 : For DSP & firmware patches #0,2

3, 612K, RO, audio_prompts.xuv # Logical #1 Audio prompts #1,1

4, 612K, RO, (erase) # Logical #1 Audio prompts #1,2

5, 300K, RO, qcc3003.xuv # Logical #2 Main application image and other files. #2,1

6, 300K, RO, (erase) # Logical #2 Main application image and other files. #2,2

7, 8K, RO, sink_system_qcc300x.xuv # Logical #3 PSFS  #3,1

8, 8K, RO, (erase) # Logical #3 PSFS #3,2

9, *, RS, (erase)

2.3逻辑分区映射表


2.2 逻辑分区映射表

逻辑分区映射表的每一行定义一个表示一个或两个物理分区的逻辑银行。

列定义为:

· 逻辑分区索引

· 逻辑分区的类型

    ◆ Single (erased)

        ▪ QCC300x设备不支持这种类型

    ◆ Double (mounted)

        ▪ 双分区文件系统分区

        ▪ 升级后文件系统表将被更新,以便升级后的分区作为只读文件系统安装在设备引导上

    ◆ Double (unmounted)

        ▪ 双分区数据分区

        ▪ 升级后的活动分区将不会添加到只读文件系统

        ▪ 目前QC300x设备不使用这种类型,但如果客户有自己的非文件系统分区类型,则支持这种类型

· 逻辑分区使用的第一个物理分区

· 逻辑分区使用的第二个物理分区,仅对双分区有效

2.4初始化设备Flash

图2.3显示了刷新新QCC300X设备时使用的输入初始分区。它还显示:

· 物理分区表由nvscmd工具用于闪存设备,但不存储在设备本身

· 逻辑分区映射表存储在VM应用程序配置集中

虚拟机应用程序配置集内置于应用程序本身中—它不是单独的文件。


2.3 默认的QCC300x分区部署


3.生成生产固件

生成生产固件所需的命令行工具位于QCC300x ADK安装之后的<QCC300x ADK安装文件夹>\tools\bin文件夹中(如:D:\ADK_QCC300x.WIN.1.0.167\tools\bin)。

所有QCC300x升级都根据创建的(OEM,密钥可以随意命名)密钥对进行验证:

· OEM私钥用于对升级文件内容进行签名

· OEM公钥被写入设备PS存储中,用于验证下载的升级文件的内容

· 如果QCC300x升级文件没有OEM私钥签名,或者设备PS store不包含OEM公钥,升级将会失败。


3.1 生成生产固件流程图

(1)使用 dfukeygenerate命令创建一个用于升级验证的密钥对

dfukeygenerate –o oem,生成oem.public.key和oem.private.key

(2)修改默认分区表文件

默认的分区布局表可以在< QCC300x ADK安装文件夹>\apps\sink\<device_variant>.ptn中,根据设备实际Flash大小修改ptn文件。

(3)编译运行程序

对于DFU升级,需修改配置以进入DFU模式。

对于OTAU升级,使能如下选项:

    Device Upgrade

    GAIA

如果需要支持BLE OTA,使能如下选项:

    Enable BLE/GATT

    Enable GATT GAIA Server

(4)将公钥文件转换为.psr文件

dfukeyinsert -v -o oem_key -ka oem.public.key,生成oem_key.psr

(5)将PSKeys merge到设备上

pscli -usb <SPIPORT> merge oem_key.psr

(6)使用量产工具dump出生产固件

4.生成升级文件

生成升级文件的过程是:

· 为每个要升级的分区创建一个新的只读分区文件

注意:升级分区文件中不需要包含所有分区,只包含要更改的分区。

· 定义升级文件的内容

· 生成升级文件,并用OEM私钥签名

4.1升级内容

升级文件包括:

· 包含设备型号、升级版本和其他数据的标题部分

· 一个或多个分区数据段,包含将要升级分区的数据

· 包含验证密钥的页脚部分

升级的内容在升级分区文件(.upg)中指定,upgradefilegen.exe从该文件分析并创建升级文件。

图4.1 升级文件格式


4.1.1 设置设备变量

upg文件中必须包含device_variant定义行,并且必须与设备的产品id对应,如果他们不匹配升级将被拒绝。

图4.2 产品id到device_variant的映射


4.1.2设置升级版本

升级文件包含升级后应用程序的新版本的版本信息,以及可以安装升级应用程序的先前版本的信息。开发者可以控制升级版本,以及它可以安装到哪些以前的版本上。

4.1.3定义要升级的分区

通过在.upg文件中添加一行来将分区添加到升级文件中,行格式为:

<逻辑分区号> <逻辑分区类型> <完整路径文件名>

图4.3 升级分区类型

下面是用于升级应用程序和音频提示分区的.upg文件示例:

device_variant QC3003

# Set the upgrade version and previous version(s)

# that are compatible to upgrade from. The minor

# version can be '*' to act as a wildcard.

upgrade_version 2.1

compatible_upgrade 1.*

compatible_upgrade 2.*

# Set the ps config version and previous version(s)

# that are compatible to upgrade from (hex values)

ps_config_version 2

ps_prev_config_version 0

ps_prev_config_version 1

# Filesystem containing audio prompts

1 3 audio_prompts.xuv

# Filesystem containing application and related data

2 0 qcc3003.xuv

4.2生成升级文件

图4.4 生成升级文件流程

(1)创建升级分区(.upg)文件

(2)生成.xuv格式升级文件

UpgradeFileGen qcc3003.upg qcc3003_upg.xuv,生成qcc3003_upg.xuv

(3)用OEM密钥签署升级文件

dfusign -v -f -u -h qcc3003_upg.xuv -o qcc3003_upg_signed.xuv -ka oem.private.key,生成qcc3003_upg_signed.xuv

(4)转换为二进制格式

XUV2BIN -d qcc3003_upg_signed.xuv qcc3003_signed.bin,生成qcc3003_signed.bin

5.DFU升级

工具包含在安装目录下tools\bin文件夹中(如:D:\ADK_QCC300x.WIN.1.0.167\tools\bin)。按键让设备进入DFU模式,使用命令行执行以下命令:

HidDfuCmd upgradebin 0A12 FFFF 0 FF00 qcc3003_upg_signed.bin,选择Yes,等待两分钟左右(有进度提示),升级完成。

6.OTAU升级


图6.1 下载升级文件到设备流程
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,161评论 0 9
  • Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。 内核、shell和文件系统一起形成了基本...
    请爱护小动物阅读 2,545评论 0 22
  • Linux系统一般有4个主要部分: 内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本...
    偷风筝的人_阅读 3,241评论 1 17
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,813评论 0 5
  • 目标: 标语优化 场景排序 场景构图描述 底料:朋友相聚,“走,吃火锅!”1.在重庆,朋友相聚必吃火锅,家有喜事必...
    我是果阅读 383评论 0 0