SemiDrive E3 打包說明

一、 概述

        本文介紹 E3 PAC 打包,編譯器生成 bin 文件需要通過打包生成 PAC 包,再通過 SDToolBox 工具將 PAC 包燒寫到晶片,PAC 包的物理載體分為 Flash、eMMC、SD,一個 PAC包最多支持 3 個BootPackage;本文主要描述打包方式、打包注意事項、PAC 包下載的物理地址,打包方式分為手動打包(命令行打包)和自動打包(Python 腳本自動打包)。

        硬體平台:E3640官方開發板(SD103_E3_GATEWAY_ePOWERTRAIN_A03_019);

        軟體環境:SDToolBox、IAR Embedded Workbench for ARM 8.50.6。



                                                                                                                                              圖1 E3640 官方開發板


二、 打包說明

晶片復位後,當啟動核從復位狀態退出時,集成於晶片內部的 ROM 程序在啟動核中開始運行,以完成晶片的啟動過程,因此為了能夠啟動 E3 晶片,需要完成以下步驟:

  1. 將編譯得到的各個 core 的可執行程序(bin文件)合併並簽名,得到 Boot Package 文件,如下圖打包過程 1;
  2. 如啟動設備為 Flash,則需要加載 SFS 文件,同時如果需要在 Flash 中加密啟動,則需要再加載 RFD 文件,如果不需要加密啟動,則 RFD 文件可以不存在;如果啟動設備為 eMMC、SD 卡,則不需要 SFS 文件、 RFD 文件;如下圖打包過程 2;
  3. 將上述文件打包在一個 PAC 文件中,使用 SDToolBox 下載工具完成燒寫。

 

 
1.1    Boot Package

1.1.1    Boot Package 組成

        由編譯器生成的 bin 文件,需要簽名生成 Boot Package 才能生成 PAC 包,燒寫進晶片,其中 Boot Package 組成部分如下:

        BPT(Boot Package Table):位於 Boot Package 最前端,共占用 4096(0x1000)個字節。BPT 包括以下信息:

  1. Boot Package 的簽名信息
  2. 各個鏡像在 Image 組合中的相對位置(DLP)
  3. 鏡像加載地址(Load Address)
  4. 鏡像運行時的入口地址(Entry)
  5. HASH 校驗信息
  6. PSN 信息

      程序鏡像組合(Images):多個 core 的用戶程序鏡像組合,包含:

  1. CPU cluster0 鏡像
  2. CPU cluster1 程序鏡像(可配置為 Split 或者 Lockstep)
  3. CPU cluster2 程序鏡像(可配置為 Split 或者 Lockstep)
  4. Bootloader 鏡像
  5. SCB 系統控制塊(System Configuration Block)

註:圖中 Image download 地址為相對於 BPT 相對偏移地址


1.1.2    Boot  Package 類型與存儲方式

        一個 PAC 包中支持三種 Boot Package ,分別為:Normal Boot Package、Backup Boot Package、Third Boot Package,三個 Boot Package 互為冗餘。

       晶片從不同介質啟動,設備能支持的 Boot Package 類型和存儲地址見下表:

                                                                                                                             Boot Package 類型與存儲地址分配表

啟動設備

Normal Boot Package存儲地址

Backup Boot Package存儲地址

Third Try Boot Package存儲地址

備註

HyperFalsh

0xC0000

0x4C0000

0x8C0000

表中標註為默認地址,具體存儲地址參見SFS文件,地址劃分需要與Flash晶片扇區對齊

NorFlash

0x7000

0x407000

0x807000

eMMC

BOOT1分區 offset=0

BOOT2分區 offset=0

User Areas分區 offset=20KB

 

SD 卡

offset=20KB

 

 

 

 

1.2    download 文件

1.2.1    Dloader

        如果使用 USB 下載,需形成可用的 Dloader;目前在 ssdk\devices\$(PART)\-

       dloader 路徑下提供預編譯好的 binary 文件,此 Dloader 需要進行簽名形成 Boot Package 才能用於下載。以 e3_gateway 板卡的 HyperFlash 版本的 Dloader 為例,將 e3_gateway_hyperFlash.bin 拷貝到 ssdk\tools\sdtools\temp\src\-e3_gateway_hyperFlash.bin ,使用命令進行簽名。


註:Dloader命令行打包時加載地址與入口地址必須是 0x404000,與 Dloader 軟體保持一致,設置其他參數有誤。


1.2.2    Flashloader

       如果使用 JTAG 下載,需形成可用的Flashloader。目前 ssdk\devices\$(PART)\Flashloader 路徑下提供預編譯好的 binary 文件,此 Flashloader 供工具使用,無需進行簽名。以 e3_gateway 板卡的 HyperFlash 版本的 Flashloader 為例,直接將 Flashloader_hyperFlash.out 拷貝到 ssdk\tools\sdtools\temp\ 路徑下重命名為downloader_e3_gateway_signed.bin 即可。

1.3   SFS 文件

       SFS 是 Flash 的配置文件,在撥碼到 Flash 啟動模式前,需要先在 Flash 的起始位置預先燒寫 SFS 供 ROM 解析,否則從 Flash 啟動會失敗。可以使用 CMD 命令根據配置文件來生成 SFS 文件,示例配置文件路徑為: ssdk\tools\sdtools\sfs\xxx.json 可以使用如下命令將配置文件轉換為 sfs.img 用於下載。

1.3.1   命令行方式


       其中 0x7000,0x407000, 0x807000 是指定 3 個 Boot Package 的地址,is25-1-1-4.json 是 SFS 配置文件示例,sfs_is25-1-1-4.img 為輸出文件。

1.3.2    JSON 文件方式

       根據 pac_config.json 中 sfs 欄位查找SFS的配置文件進行打包,例如: ssdk\devices\E3640\pacconfig\pac_config_5_core.json 中 sfs 的配置信息為:



       該打包配置文件中使用了 sfs 的配置文件為 s26h-hyperFlash.json ,Boot Package 配置地址為 0xC0000,0x4C0000,0x8C0000。在執行打包的過程中, sfs.img 將會被生成並打包到 PAC 包中。


1.4    RFD 文件

        關於 RFD 相關部分參加芯馳官方文檔《AppNote_E3_Boot_and_OTA》第 11 章節。


1.5    命令行打包

1.5.1    打包過程一:bin 文件簽名 Boot Package

  • 先把編譯產物拷貝到指定路徑下,以 ssdk\tools\sdtools\temp_boot_core 路徑為例(如果沒有temp_boot_core文件夾可新建一個);
  • 在 SSDK 根目錄打開 cmd 命令行,再進入 ssdk\tools\sdtools 路徑;或者可以在 sdtool 根目錄下打開命令行;
  • 使用如下指令將各個 core 的編譯產物(binary文件)打包成 Boot Package 文件:


上述命令行的參數信息如下表;

參數

數據

--v

固定寫 2,表示當前 atb_signer 版本為 v2

--sec_ver

表示安全啟動的版本,ROM 會與 FUSE_PKG_VER[0:127]

中燒寫的版本信息進行比較,如果低於fuse中燒寫的版本號,則無法用於啟動,該

功能用於防回滾到某個較低版本。

--dgst

指定校驗算法的類型(sha256/sha512)

--rcp

表示使用的簽名的私鑰路徑。例:key=sign_tool\keys\TestRSA2048_ossl.pem

--iib

每一個 image 都通過一個 --iib 表示,iib之後的參數為:

* " flag ": 值為 0x80 時 ROM 不 kick sp0/sp1/sx0/sx1;值為 0xc0 時 ROM 不 load sp0/sp1/sx0/sx1;

* " core ":對應鏡像屬於哪個核,0 表示為 SF core,2 表示為 SP core0,3 表示為 SP core1,4 表示為 SX core0,5 表示為 SX core1,6 表示為 SX in lockstep mode,7 表示 SP in lockstep mode;

* " type ":鏡像的類型,0 表示普通鏡像,0xf 表示 SF core 的 Bootloader 程序;

* " image ":鏡像文件的路徑;

* "dlp" :表示鏡像在 Boot Package 中存儲的相對位置,以 512 字節為單位,比如 0x8,表示存儲的位置相對於 Boot Package 起始位置的偏移為 8*512=4096 字節;

* " to ":鏡像的加載地址,此處指定的均為 IRAM 地址;

* " entry ":程序的入口地址,通常和"to"參數是一樣的,ROM 會在鏡像加載到"to"參數指定的地址後,跳轉到"entry"指定的地址開始執行;

* " noHASH ":表示該 iib 對應的程序不做 HASH 校驗

--psn

指定 PSN 版本號

--of

指定輸出文件的路徑和格式

按照上述命令我們可以依次打包得到: Backup Boot Package、Third Try Boot Package。




1.5.2    打包過程二:生成 PAC 包

該過程會把 Boot Package文件、Downloader 程序、SFS 等文件打包成 PAC 文件,用於 USB 或 JTAG/SWD 下載。

 

  • Flash 打包形成 PAC 文件的命令為:
  • eMMC/SD 卡形成 PAC 包文件的命令為(無需SFS與RFD):
  • 將現有的 bin 文件加到 PAC 包中,命令行如下:


具體打包命令的參數解析如下表所示:

參數

解析

make_pac_image_no_gpt

使用無分區表的打包方式

--output

輸出的pac包路徑

--allow_empty_partitions

運行分區表為空(不使用分區表無效果)

--da

Downloader(Dloader/Flashloader)所在的路徑Dloader在USB下載過程中被ROM下載到IRAM中運行,Dloader完成與PC機的通訊,下載Normal/Backup/Third Try BootPackage 與SFS等。

Flashloader在JTAG/SWD下載過程中被工具加載到IRAM中,工具調用其中的函數下載Normal/Backup/Third Try Boot Package與SFS等

--preload

為所需下載的BootPackage以及SFS、RFD對應的固件路徑。SFS用於Flash啟動,RFD文件用於加密啟動。

--image 0x140000

將現有的bin文件打包到PAC包,0x140000為用戶自行設置的bin文件下載到的地址(切記不能與SFS文件分配地址重疊)。

 

1.5.3    命令行打包舉例

1.5.3.1     ssdk\boards\e3_gateway\app_demo\boot_core  打包

       由於 SSDK 採用 AMP 軟體架構提供的 Demo 工程,故使用命令行打包時,可以將多個核的 bin 文件根據運行內核的不同簽名到一個 BootPackage 中。

bin 文件簽名形成 Boot Package


給 Dloader bin 文件進行簽名


生成 PAC 包


運行結果


Memory 內存數據

       RAM 空間的數據由 ROM 搬運至不同的加載地址至,數據如下圖:

        SDToolBox 下載 PAC 包時,按照 BootPackage 打包時不同的 DLC 參數,將不同核的鏡像下載到不同的Flash 地址,具體計算方式見 1.1.1 章節,Flash 內部存儲數據如下圖。

根據該命令行打包參數,內存映射圖如下



1.5.3.2     ssdk\boards\e3_gateway\app_demo\multicore-xip 打包

        multicore-xip Demo 採用 XIP 模式,分為 Bootloader 與 APP 應用,上電 ROM 需要驗簽 Bootloader,故將 Bootloader bin 文件進行簽名,將 APP 應用追加至 PAC 包內。

bin 文件簽名形成 Boot Package


生成 PAC 包


運行結果:

 


1.5.3.3     ssdk\boards\e3_gateway\driver_demo\gpio 分別打包成 3 個 Boot Package

bin 文件簽名形成 Boot Package


SFS 文件生成


Dloader 文件簽名


打包成 PAC 包


memory 內存數據如下圖:


Normal BootPackage Flash 存儲地址

Backup Bootloader Flash 存儲地址

Third Boot Package Flash 存儲地址


1.6    Python 文件自動打包

       Python 腳本打包,SemiDrive 提供的 SSDK 中包含自動打包腳本 tools/genpac.py , genpac.py 可以解析項目的打包配置文件 pac_config.json 進行打包,可以一鍵完成:

  1. 將編譯產物 binary 合成 BootPackage;
  2. 選擇 SFS 的配置文件,將配置文件轉換為 img 用於打包,同時能夠指定 Boot Package 的地址;
  3. 選擇打包 Dloader 或 Flashloader,對 Dloader 進行簽名,Flashloader 不簽名;
  4. 可以進行加密配置;
  5. 形成 SDFactoryTool 軟體燒錄所需的 PAC 文件;Python腳本自動打包有兩種方式,區別如下表所示。

方式

特點

傳入多個參數指定 SSDK demo 進行打包

根據參數自動匹配 demo 的 binary、Downloader 的默認路徑。僅適用於非 XIP 類的 demo。

傳入打包配置文件的路徑名作為參數進行打包

Demo 的 binary 的路徑在打包配置文件中指定。Downloader的路徑在打包配置文件中指定。可適用於所有demo。

注意:XIP類demo必須使用此種方式進行打包

 

1.6.1    指定 SSDK Demo 打包

在 SSDK 根目錄執行 CMD 指令,輸入以下指令:

1.6.2    指定打包配置文件打包

        SSDK可以直接指定某個 pac_config.json進行打包,前提是該pac_config.json配置文件直接指定了打包所需文件的路徑。這種 pac_config.json 文件的示例存放在 ssdk\tools\genpac\pac_config.json 路徑下,該文件中指定了打包所需的文件的路徑:

 



         用戶可以修改為自己的編譯產物以及所使用的 Downloader的絕對路徑;在 SSDK 目錄下執行 CMD ,並輸入如下所示的指令,打包配置文件解析參見《AppNote_E3_Boot_and_OTA_Rev01.06》9.1.2 章節。



三、 參考文檔

《AppNote_E3_Boot_and_OTA_Rev01.06》

《AppNote_E3_燒錄流程_Rev2.0》




歡迎在博文下方留言評論,我們會及時回復您的問題。如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com

作者:Linna Wang / 王麗娜

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論