This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] OMAP-L138:安全 UART 启动在行&quot 处挂起;(AIS 解析):等待完成..."

Guru**** 2604225 points
Other Parts Discussed in Thread: OMAP-L138

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/585921/omap-l138-secure-uart-boot-suspended-at-the-line-ais-parse-waiting-for-done

器件型号:OMAP-L138
Thread 中讨论的其他器件: OMAPL138

大家好、e2e memebers、

我正在开发基本的安全器件 OMAP-L138 E。我正在尝试使用 SECDEV 工具从 PC UART 主机启动、如此处所述(http://processors.wiki.ti.com/index.php/Basic_Secure_Boot_for_OMAP-L138_C6748)

首先、我从此处下载的软件包(http://www.ti.com/tool/secdevtool-omapl138c6748)中安装 OMAP-L138的 SECDEVTOOL

2.我使用 SecureHexAIS_OMAP-L138.exe 从应用程序目标文件创建安全 AIS 映像、例如"uartEcho.out"文件 (根据 TI 示例构建)。 INI 文件在已安装的文件夹中可用、我没有编写它。

SecureHexAIS_OMAP-L138.exe -ini applications\uartEcho_ini.ini -otype binary -o applications\uartEcho.bin applications\uartEcho.out 

3.生成过程成功,我使用  GenericSecureUartHost.exe 用"uartEcho.bin"启动安全 OMAP-L138。  我在这里遇到问题、其中引导过程总是在" (AIS 解析):等待完成..."这一行停止。

 


这是 UART 工具的日志。

(文件 IO):从文件 C:\ti\OMAPL138_C6748_General_Security\GNU\AISUtils\applications\uartEcho.bin 中读取6248字节。
(串行端口):以115200波特打开 COM7……
(AIS 解析):读取魔术字0x41504954。
(AIS 解析):正在等待 BOOTME... (立即加电或重置目标)
(AIS 解析):收到 BOOTME!
(AIS 解析):正在执行启动字同步...
(AIS 解析):正在执行 Ping 操作码同步...
(AIS 解析):正在处理命令0:0x58535920。
(AIS 解析):正在执行操作码同步...
(AIS 解析):安全密钥加载、进入安全模式。
(AIS 解析):正在处理命令1:0x58535923。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在设置引导退出模式...
(AIS 解析):将退出模式设置为0x00000000。
(AIS 解析):处理命令2:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):处理命令3:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):正在处理命令4:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):处理命令5:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):处理命令6:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):正在处理命令7:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):处理命令8:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):处理命令9:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):处理命令10:0x5853590D。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行函数...
(AIS 解析):安全模式;发送签名。
(AIS 解析):处理命令11:0x58535921。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在加载编码段...
(AIS 解析):将156字节段加载到地址0xC1080000。
(AIS 解析):处理命令12:0x58535921。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在加载编码段...
(AIS 解析):将5344字节的段加载到地址0xC108009C。
(AIS 解析):处理命令13:0x58535921。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在加载编码段...
(AIS 解析):将92字节段加载到地址0xC1081710。
(AIS 解析):处理命令14:0x58535921。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在加载编码段...
(AIS 解析):将52字节段加载到地址0xC1081770。
(AIS 解析):处理命令15:0x58535906。
(AIS 解析):正在执行操作码同步...
(AIS 解析):正在执行跳转和关闭...
(AIS 解析):安全模式;发送签名。
(AIS 解析):AIS 完成。 跳转至地址0xC1080000。
(AIS 解析):正在等待完成...

有人能告诉我原因是什么、我如何解决?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已通知 RTOS 团队。 他们的反馈将在此处发布。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据您的日志、引导 ROM 似乎无法验证您在安全引导映像上的签名。 请在此处提供您的 INI 文件以供分析。

    您尝试使用的是什么硬件。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Rahul Prahu

    这是我的 INI 文件、我还认为其中存在问题、但我不知道它是什么。 我的硬件配置与 OMAPL138_LCDK 套件的配置非常相似、安全部件 OMAP-L138 E 除外

    e2e.ti.com/.../uartEcho_5F00_ini.ini

    ;可在主机代码中覆盖的常规设置
    ;调用 AISGen 库。
    [常规]
    ;可以是8或16 -用于 EMIFA
    总线宽度=8
    
    ;SPIMASTER、I2CMASTER、EMIFA、NAND、EMAC、UART、PCI、HPI、USB、MMC_SD、VLYNQ、RAW
    引导模式= NAND
    
    ;8、16、24 -用于 SPI、I2C
    ;AddrWidth=8
    
    ;no_crc、section_crc、single_crcCheckType=n_CRC
    
    
    ;true/on 或 false/off
    seqReadEn=on
    
    ;为引导最终确定函数指定符号名称
    ;finalFxnSymbolName=none
    
    
    ;安全设置(密钥、选项、要加密的段列表等)
    [安全]
    
    ;安全类型:通用、自定义、无
    安全类型=通用
    
    ;引导退出类型:非安全、SECUREWITHSK、SECURENOSK
    ;非安全=器件从安全类型切换到非安全类型,跳转到加载的代码
    ; (不再是安全设备、因此没有安全内核)。
    ; SECUREWITHSK =设备保持为安全类型,加载安全内核,允许运行时间
    ; 安全上下文切换。
    bootExitType =非安全
    
    ;在生成的密钥头中包含强制 JTAG 关闭标志的选项
    ;genericJTAGForceOff=false
    
    ;加密段列表(所有或逗号分隔的段名列表)
    encryptions=all
    
    ;用于数据 AES 加密的 CEK -必须是32个十六进制字符的字符串
    encryptionKey=4A7E1F5A458A5A45C5A05;
    
    调试密钥
    ;keyEncryptionKey=0B94A91D33E597097F6C426F8F016872
    
    ;SHA 算法选择
    genericSHAS톡 뻙= SHA256
    
    ;包含通用器件安全密钥标头
    的二进制文件;genKeyHeaderFileName=key_hdr_sha256_enc.bin
    
    
    
    ;此部分允许使用
    指定的乘法器和除法器设置 PLL0系统时钟,如图所示。 时钟源
    ;也可选择用于内部或外部。
    ; |---- 24|--- 16|--- 8|---- 0|
    ;PLL0CFG0:| CLKMODE| PLLM | PREDIV | POSTDIV|
    ;PLL0CFG1:| RSVD | PLLDIV1| PLLDIV3| PLLDIV7|
    ;[PLL0CONFIG ]
    ;PLL0CFG0 = 0x00130001
    PLL0CFG1 = 0x00000104
    
    ;PLL1允许设置本节。 通常情况下,此
    操作将作为 EMIF3a DDR 设置的一部分进行。 格式
    ;输入参数如下:
    ; |---- 24|--- 16|--- 8|---- 0|
    ;PLL1CFG0:| PLLM| POSTDIV| PLLDIV1| PLLDIV2|
    ;PLL1CFG1:| RSVD | PLLDIV3|
    ;[PLL1CONFIG]
    ;PLL1CFG0=0x00000000
    ; PLL1CFG1=0x00000000
    
    ;本节让我们配置当前
    引导外设(I2C、SPI 或 UART)的外设接口。
    ;请谨慎使用。 PERIPHCLKCFG 域的格式
    如下
    :;SPI: |---- 24|--- 16|--- 8|---- 0|
    ; | RSVD |预分频|
    ;
    I2C: |---- 24|--- 16|--- 8|---- 0|
    ; | RSVD |预分频| CLKL | CLKH |
    ;
    UART: |---- 24|--- 16|--- 8|---- 0|
    ; | RSVD | OSR | DLH | DLL |
    ;[PERIPHCLKCFG]
    ;PERIPHCLKCFG = 0x00000000
    
    
    ;本节允许设置 MPU1或 MPU2。 如果
    ;rangenum 超出允许的范围,则所有范围
    ;(包括固定范围)取起始值、结束值和
    ;保护值。
    ; |---- 24|--- 16|--- 8|--- 0|
    ; MPUSELECT:| RSVD | mpuNum | rangeNum |
    ; STARTADDR:| 起始地址
    |; ENDADDR:| 结束地址 |
    ; MPPAVALUE :| mppaValue |
    [MPUCONFIG]
    MPUSELECT = 0x000001ff
    STARTADDR = 0x00000000
    ENDADDR = 0xFFFFFFFF
    MPPAVALUE = 0xFFFFFFFF
    
    
    
    ;本节可用于配置 PLL1和 EMIF3a 寄存
    器;用于启动 DDR2接口。
    ;有关 PLL1CFG 域的格式,请参阅 PLL1CONFIG 部分。
    ; |---- 24|--- 16|--- 8|---- 0|
    ;PLL1CFG0:| PLL1CFG
    |; PLL1CFG1:| PLL1CFG |
    ; DDRPHYC1R:| DDRPHYC1R |
    ; SDCR: | SDCR
    |; SDTIMR:| SDTIMR
    |; SDTIMR2:| SDTIMR2 |
    ; SDRCR: | SDRCR
    |; CLK2XSRC:| CLK2XSRC |
    [EMIF3DDR]
    PLL1CFG0 = 0x15010001
    PLL1CFG1 = 0x00000002
    DDRPHYC1R = 0x000000C4
    SDCR = 0x0A034622
    SDTIMR = 0x184929C8
    SDTIMR2 = 0xB80FC700
    SDRCR = 0x00000406
    CLK2XSRC = 0x00000000
    
    ;本节允许设置 MPU1或 MPU1。 如果
    ;rangenum 超出允许的范围,则所有范围
    ;(包括固定范围)取起始值、结束值和
    ;保护值。
    ; |---- 24|--- 16|--- 8|--- 0|
    ; MPUSELECT:| RSVD | mpuNum | rangeNum |
    ; STARTADDR:| 起始地址
    |; ENDADDR:| 结束地址 |
    ; MPPAVALUE :| mppaValue |
    ;
    此 MPU 控制必须在 DDR 初始化或其它之后发生
    ;MPU 控制不起作用
    [MPUCONFIG]
    MPUSELECT = 0x000002FF
    STARTADDR = 0x00000000
    ENDADDR = 0xFFFFFFFF
    MPPAVALUE = 0xFFFFFFFF
    
    ;此部分可用于配置 EMIFA 以使用
    ; CS0作为 SDRAM 接口。 执行此操作所需的字段
    如下所示。
    ; |---- 24|--- 16|--- 8|---- 0|
    ;SDBCR: | SDBCR |
    ; SDTIMR: | SDTIMR |
    ; SDRSRPDEXIT: | SDRSRPDEXIT |
    ; SDRCR: | SDRCR |
    ;DIV4p5_CLK_ENABLE:| DIV4p5_CLK_ENABLE |
    ;[EMIF25SDRAM]
    ;SDBCR=0x00004421
    ;SDTIMR=0x42215810
    ;SDRSRPDEXIT=0x00000009
    ;SDRCR=0x00000410
    DIV4p5_CLK_ENABLE =0x00000001
    
    ;此部分可用于配置
    EMIFA (CS2-CS5)的异步芯片选择。 执行此操作所需的字段
    如下所示。
    ; |---- 24|--- 16|--- 8|---- 0|
    ;A1CR: | A1CR |
    ;A2CR: | A2CR |
    ; A3CR: | A3CR |
    ; A4CR: | A4CR
    |; NANDFCR:| NANDFCR |
    ;[EMIF25NANNC]
    ;A1CR = 0x00000000
    A2CR = 0x00000000
    ;A3CR = 0x00000000 A4CR
    = 0x00000000 ASINDFCR
    = 0x00000000
    
    ;本节应用于代替 PLL0CONFIG;使用
    I2C、SPI 或 UART 模式的时间。 这可确保
    系统 PLL 和外设的时钟一起改变。
    ;有关 PLL0CFG 域的格式,请参阅 PLL0CONFIG 部分。
    ;有关 CLKCFG 域的格式,请参阅 PERIPHCLKCFG 部分。
    ; |---- 24|--- 16|--- 8|---- 0|
    ;PLL0CFG0: | PLL0CFG |
    ; PLL0CFG1: | PLL0CFG
    |; PERIPHCLKCFG:| CLKCFG |;[PLLANDCLOCKCONFIG]
    
    ;PLL0CFG0=0x00000000
    ;PLL0CFG1=0x00000000
    ;PERIPHCLKCFG=0x00000000
    
    ;本节应用于设置两
    个 PSC 模块的电源状态。 此部分可以包含多次,以便
    配置任何或所有设备模块。
    ; |---- 24|--- 16|--- 8|---- 0|
    ;LPSCCFG:| PSCNUM | MODULE | PD | STATE |
    ;[PSCCONFIG]
    ;LPSCCFG = 0x01030003
    
    ;本节允许设置单个 PINMUX 寄存器。
    ;为了允许设置,可以多次包括此部分
    ;根据需要尽可能多的 PINMUX 寄存器。
    ; |---- 24|--- 16|--- 8|---- 0|
    ;REGNUM:| 寄存器 |
    ;掩码:| 掩码 |
    ;值:| 值 |
    ;[PINMUX]
    ;REGNUM =5
    ;MASK =0x00FF0000
    ; Value =0x00880000
    
    ;不需要 Params -只需包含此部分即可调用快速引导函数
    ;[FASTBOOT]
    
    ;此部分允许配置一个 SYSTME IOPU。
    ; ioupNum 域必须有效(0-5),然后是 mppaStart
    ;mppaend 域允许将 mppa mRs 范围设置为
    ;相同的提供 mppa 值。
    ; IOPUSELECT:| RSVD | iouNum| mppaStart | mppaEnd |
    ; MPPAVALUE:| mppaValue |
    [IOPUCONFIG]
    IOPUSELECT = 0x000000FF
    MPPAVALUE = 0xFFFFFFFF
    
    [IOPUCONFIG ]
    IOPUSELECT = 0x000100FF MPPAVALECT
    = 0xFFFFFFFF
    
    [IOPUCONFIG ]
    IOPUSELECT = 0x000200FF
    MPPAVALUE = 0xFFFFFFFF [IOPUVALUE
    
    
    
    = 0x300AUPEFF
    
    
    
    
    
    = 0xMPALOFF = 0xMPAUOFF = 0xMPAULTU]或 IOPUMPAULECT = 0x000AULABU= 0x000200= 0xMPAULTU= 0x000FFU= 0xMPAULTU]。 如果
    ;rangenum 超出允许的范围,则所有范围
    ;(包括固定范围)取起始值、结束值和
    ;保护值。
    ; |---- 24|--- 16|--- 8|--- 0|
    ; MPUSELECT:| RSVD | mpuNum | rangeNum |
    ; STARTADDR:| 起始地址
    |; ENDADDR:| 结束地址 |
    ; MPPAVALUE :| mppaValue |
    ;[MPUCONFIG]
    ;MPUSELECT = 0x000001ff
    ;STARTADDR = 0x00000000
    ;ENDADDR = 0x00000000
    ;MPPAVALUE = 0xFFFFFFFF
    
    ;此函
    数允许用户选择性地打开;器件的调试抽头。 由于函数不是
    ;在检查签名之前执行,它不
    是;会造成安全问题。
    ; |---- 24|--- 16|--- 8|--- 0|
    ;TAPSCFG:| RSVD | 封装配置 |
    [TAPSC1D]
    TAPSCFG = 0x0000FFFF 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rahul、

    我已经使用  Visual Studio 2015调试了 GenericSecureUartHost 工具的 C#源代码、以了解"正在等待完成..."这一行之后发生的情况

    我发现在该行之后(代码行:801、文件:AISParse.cs)

    logFxn ("(AIS 解析):正在等待完成...");
    

    该工具尝试向 OMAP-L138发送一个字符串“done”,并接收一个存储在名为  rcvEnd ( 类型 Byte[])的变量中的字符串。 在此命令中(代码行: 802、文件:AISParse.cs)

    status = readFxn (rcvEnd、0、8、-1); 

    我在这里设置了一个断点、并发现程序无法覆盖此函数。 我认为在 PC 和 OMAP 之间发送/接收 UART 数据时出现了问题。 但是、如果是这样、为什么可以成功加载其他数据?

    你有什么想法吗?

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您在 DDR 中或器件上的共享 RAM 中放置代码的 uartEcho 函数是吗?

    我还注意到您正在配置 PLL1、DDR 已配置、但未配置 PLL0。 您还能添加 PLL0设置并重试一下。 另外、请将引导模式更正为 UART 或无、并将 MPU 设置重新添加到 INI 文件中。

    此致、
    Rahul