精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

記錄一下bootloader升級Bug分析及復現(xiàn)最后解決的整個過程

汽車ECU開發(fā) ? 來源:汽車電子嵌入式 ? 作者:Tomas Li ? 2022-11-22 09:03 ? 次閱讀

前言

這幾天遇到一個bootloader升級的奇怪問題,分析問題的過程使用了一些常用的分析工具和方法覺得很有普遍性,這里記錄一下Bug分析、復現(xiàn)最后解決的整個過程,希望能給大家?guī)硪恍﹩l(fā)。

正文

環(huán)境描述

ECU使用瑞薩公司的RH850芯片,bootloader支持應用的雙分區(qū)刷寫。

測試用例

當前程序處于A分區(qū) --> 開始升級,跳入bootloader --> 升級A分區(qū)程序 --> 故障注入,跳過升級的0x34服務,直接開始0x36服務傳輸升級包程序

94742832-69fd-11ed-8abf-dac502259ad0.png

圖1:Bootloader故障注入測試

94948c1c-69fd-11ed-8abf-dac502259ad0.png

圖2:Bootloader升級常用的UDS服務ID

期望結(jié)果

Bootloader升級失敗,0x11 01軟件復位后Bootloader校驗A分區(qū)失?。J跳到A分區(qū)),程序跳到B分區(qū),正常運行B分區(qū)程序。

94b79e14-69fd-11ed-8abf-dac502259ad0.png

圖3:A分區(qū)升級失敗后跳到B分區(qū)期望正常通信狀態(tài)

實際結(jié)果

Bootloader升級失敗,0x11 01軟件復位后Bootloader校驗A分區(qū)失敗(默認跳到A分區(qū)),程序跳到B分區(qū),程序的通信都異常(每次重啟后只發(fā)出一幀報文,間隔很久又會發(fā)出一幀報),但是診斷功能是OK的。

94d68f9a-69fd-11ed-8abf-dac502259ad0.png

圖4:A分區(qū)升級失敗后跳到B分區(qū)實際異常通信狀態(tài)

問題分析

1)診斷功能OK的,說明程序沒有跑死,上電只發(fā)一幀報文很像是應用滿足條件關閉通信了。ECU在以下三個狀態(tài)下會關閉通信。

. IGOFF

.低電壓(低于6.5V)

.低功耗模式 && 沒有處于EOL(End Of Line,下線模式)

第一個和第二個條件直接測試外部硬件輸入可以確定不可能滿足。第三個條件需要診斷觸發(fā),理論上是不可能滿足條件。

初步結(jié)論1:不是外部硬件輸入狀態(tài)導致關閉通信,也不是診斷時間關閉通信。

2)嘗試各種正常情況下的刷寫操作

. 處于A分區(qū),刷A分區(qū)

. 處于A分區(qū),刷B分區(qū)

. 處于B分區(qū),刷A分區(qū)

. 處于B分區(qū),刷B分區(qū)

結(jié)果,無論最后是在A分區(qū)還是B分區(qū),通信都是正常的。

初步結(jié)論2:正常情況下的程序刷寫都成功,且通信正常。

3)問題發(fā)生后ECU就一直處于故障狀態(tài)了,這個時候可以考慮使用調(diào)試器的熱插拔功能(Hot Plug-in,不重新Download程序到ECU當中,直接進入調(diào)試模式,ECU中運行的還是故障狀態(tài)下的程序)。

調(diào)試上位機:RH850提供的CS+

調(diào)試仿真器:瑞薩專用的E2

94f65adc-69fd-11ed-8abf-dac502259ad0.png

圖5:CS+的熱插拔選項

95204e50-69fd-11ed-8abf-dac502259ad0.png

圖6:CS+的調(diào)試器E2配置

圖7:程序進入了低功耗狀態(tài)下關閉通信的分支

按照1)中的分析,程序不可能進入低功耗狀態(tài)下關閉通信的分支,除非是進行分支判斷的全局變量被異常篡改了。

初步結(jié)論3:啟動模式的全局變量被異常篡改,導致程序進入到低功耗模式下關閉通信了。

全局變量被異常篡改,一般是數(shù)組越界或者是指向全局變量的指針操作異常導致的,但是如果是這樣的話,和升級沒啥關系,無論最后跳到A分區(qū)還是B分區(qū)都會出現(xiàn)異常,所以應該不是程序本身的問題。

4)讓測試同事在B分區(qū)進行故障注入測試。

. 當前處于B分區(qū)

. 升級B分區(qū)

. 跳過0x34開始傳輸數(shù)據(jù)服務

最后升級B分區(qū)失敗,跳到A分區(qū),A分區(qū)的通信是正常的。

初步結(jié)論4:B分區(qū)升級B分區(qū)進行故障注入后跳到A分區(qū)是正常的。

5)嘗試自己復現(xiàn)問題。測試同事的測試用例是跳過0x34服務后開始傳輸數(shù)據(jù),其實也就是A分區(qū)被擦除后升級失敗,跳到了B分區(qū)。那么理論上我復現(xiàn)問題的時候,只要滿足以下條件就能復現(xiàn)文:

. 當前處于A分區(qū)

. 開始升級程序

. 擦除完A分區(qū)數(shù)據(jù)

. 還沒升級完A分區(qū)程序就斷開物理連接,確保A分區(qū)升級失敗

最后確實升級A分區(qū)失敗,跳到了B分區(qū),但是B分區(qū)的通信卻是正常的。為什么自己的測試結(jié)果和測試同事的測試結(jié)果不一樣了?-- 分析測試同事的測試用例:

. 開始升級

. 跳過0x34服務

. 0x36開始傳輸數(shù)據(jù)

和上面我的復現(xiàn)步驟對比,測試同學的測試用例因為跳過了0x34服務,所以ECU的A分區(qū)是完全被擦除的狀態(tài),我的操作是在程序刷寫了一部分的情況下斷開物理連接,所以A分區(qū)被擦除后又被寫入部分數(shù)據(jù)。

6)模擬測試同事的測試步驟。

擦除完A分區(qū)數(shù)據(jù)后還沒開始傳輸A分區(qū)的數(shù)據(jù)就立馬斷開物理連接。

成功復現(xiàn)問題!!!

分析5)和6)兩種操作,不同點就是擦除完A分區(qū)后數(shù)據(jù)后又往A分區(qū)寫入了部分數(shù)據(jù)。寫入的部分數(shù)據(jù)影響了A分區(qū)程序的運行。

7)使用瑞莎公司提供的RFPV(Renesas Flash Programmer)將5)和6)兩種操作后的程序都讀出來進行對比。

953f872a-69fd-11ed-8abf-dac502259ad0.png

圖8:讀取兩種操作下的Flash中的程序

955e7cb6-69fd-11ed-8abf-dac502259ad0.png

圖9:使用hexview工具對比B分區(qū)通信異常和B分區(qū)通信正常下的程序

異常情況下的程序從0x40000開始處數(shù)據(jù)是被擦除的,正常情況下的程序的0x40000開始的程序是有數(shù)據(jù)的。

為啥A分區(qū)0x40000處開始的數(shù)據(jù)會影響B(tài)分區(qū)的程序運行?

8)查看A分區(qū)和B分區(qū)的鏈接文件

957b3bf8-69fd-11ed-8abf-dac502259ad0.png

圖10:A分區(qū)鏈接文件

9591e1aa-69fd-11ed-8abf-dac502259ad0.png

圖11:B分區(qū)鏈接文件

找到問題,A分區(qū)和B分區(qū)的標定數(shù)據(jù)用的是同一塊Flash地址!

9)修改B分區(qū)鏈接文件

95ace392-69fd-11ed-8abf-dac502259ad0.png

圖12:修改B分區(qū)鏈接文件的標定量起始地址

最后上板驗證通過,問題解決。

10)為啥標定量的數(shù)據(jù)被擦除后會影響到通信?-- 猜測是標定段數(shù)據(jù)被擦除后標定相關的協(xié)議數(shù)據(jù)讀寫異常,最后導致進行分支判斷的全局變量被異常篡改了。目前還未想到驗證猜想的辦法。

總結(jié)

這個問題分析了足足一天,分析問題的過程很具有代表性:發(fā)現(xiàn)問題 --> 推測原因 -->驗證猜想 --> 驗證失敗 -->對比分析推測-->猜測驗證 -->成功解決,逐步抽絲剝繭,層層遞進,最后解決問題。

希望對各位看官有所啟示。中間還用到了調(diào)試器的熱插拔功能,編程器的讀取ECU程序的功能,hexview對比Hex文件的功能,這些功能在分析問題中經(jīng)常用到。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ecu
    ecu
    +關注

    關注

    14

    文章

    853

    瀏覽量

    54217
  • bootloader
    +關注

    關注

    2

    文章

    232

    瀏覽量

    45368
  • EOL
    EOL
    +關注

    關注

    0

    文章

    10

    瀏覽量

    12211
  • rh850
    +關注

    關注

    2

    文章

    24

    瀏覽量

    4538

原文標題:Bootloader升級A分區(qū)失敗跳到B分區(qū)后通信異常

文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發(fā)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    汽車ECU的Bootloader升級過程分析

    MCU正常運行時總是從固定地方取指令,順序運行,程序更新時需要使用燒錄器等工具燒錄,于是有人將程序設計成,由個程序跳轉(zhuǎn)到另個程序,這個程序通常稱作Bootloader,另個叫做A
    的頭像 發(fā)表于 04-20 10:31 ?1.2w次閱讀

    project復現(xiàn)過程踩到坑對應的解決方案

    最近做的個 project 需要復現(xiàn) EMNLP 2020 Findings 的 TinyBERT,本文是對復現(xiàn)過程對踩到坑,以及對應的解決方案和實現(xiàn)加速的
    的頭像 發(fā)表于 08-19 11:09 ?1671次閱讀

    STM32F745 USART1 Bootloader失敗原因分析與解決

    使用 STM32F745 進行產(chǎn)品開發(fā)的時候,出現(xiàn)了使用 STM32CubeProgramer 無法通過 USART1 Bootloader 進行程序升級的問題。為了解決客戶的問題,我在 NUCLEO-F746ZG 開發(fā)板上,復現(xiàn)
    的頭像 發(fā)表于 01-13 10:33 ?2331次閱讀
    STM32F745 USART1 <b class='flag-5'>Bootloader</b>失敗原因<b class='flag-5'>分析</b>與解決

    STM32 Bootloader實現(xiàn)

    主要采用256000bps串口傳輸BIN文件數(shù)據(jù),文件每10KB分為個數(shù)據(jù)包下發(fā),同時控制LED作為簡單的輸出;最后做CRC校驗,整個升級過程
    發(fā)表于 08-26 11:46

    記錄次STM32H743 CANFD調(diào)試過程中的BUG

    記錄次STM32H743 CANFD調(diào)試過程中的BUG
    發(fā)表于 08-13 06:30

    bootloader的主要作用是什么

    :OTA:簡介bootloader是嵌入式開發(fā)領域非常重要的環(huán),特別是在商業(yè)領域。bootloader的主要作用是程序升級,也就是更新代碼。俗話說得好,人非圣賢,孰能無過,我們寫的代
    發(fā)表于 11-10 06:33

    記錄一下UI界面的思路與main函數(shù)掃描問題

    在上篇文章中,轉(zhuǎn)載了種上流的方法,使用狀態(tài)機、函數(shù)指針、結(jié)構(gòu)體、結(jié)構(gòu)體指針等,異常的上流,但是有些bug。目錄調(diào)試其他矩陣鍵盤掃描的思路暴力掃描另外記錄
    發(fā)表于 01-18 07:18

    記錄一下MCU存在ROM中的bootloader的三種方法

    網(wǎng)上查到的直接進入TIVA系列MCU存在ROM中的bootloader的三種方法,記錄一下。使用 TM4C ROM bootloader 的三種方式:Flash Empty當 MCU
    發(fā)表于 02-14 06:45

    使用OTA升級的方法更新帶ymodem bootloader的rbl文件

    bootloader 的 rbl 文件,方便部分朋友的操作。步驟1使用 ota 升級的方法,更新下面的 rtthread.rbl 文件。發(fā)張 OTA 過程中的圖片。?。。?特別需
    發(fā)表于 09-27 10:59

    記錄一下RK3399 GPIO電源域配置過程

    1、RK3399 GPIO配置問題/電源域配置  平臺RK3399  OS Linux  Kernel 4.4  硬件需要拉高gpio1 A3來使能OTG功能,但是在配置dts后直沒有電壓,最后查下來是硬件與軟件的電源域配置不
    發(fā)表于 11-08 17:40

    Bootloader是什么Bootloader的介紹和過程詳細解

    3.Bootloader工作模式 4.Bootloader啟動過程5.vivi Bootloader源代碼分析 6.vivi
    發(fā)表于 12-11 17:33 ?45次下載
    <b class='flag-5'>Bootloader</b>是什么<b class='flag-5'>Bootloader</b>的介紹和<b class='flag-5'>過程</b>詳細解

    單片機的Bootloader可以實現(xiàn)用戶輕松升級程序

    并存儲在規(guī)定的Flash中。 這個過程與手機端更新APP類似。 以STM8單片機為例,該如何實現(xiàn)Bootloader呢?今天和大家分享一下。 01 什么是Bootloader
    的頭像 發(fā)表于 10-23 16:57 ?4858次閱讀
    單片機的<b class='flag-5'>Bootloader</b>可以實現(xiàn)用戶輕松<b class='flag-5'>升級</b>程序

    介紹一下CAN Bootloader整個實現(xiàn)過程

    對于大多數(shù)汽車軟件開發(fā)者來說,從客戶需求的角度,他們更多關心Bootloader的下載模式。
    發(fā)表于 06-29 11:13 ?1502次閱讀
    介紹<b class='flag-5'>一下</b>CAN <b class='flag-5'>Bootloader</b>的<b class='flag-5'>整個</b>實現(xiàn)<b class='flag-5'>過程</b>

    記錄一下uboot編譯的問題

    前幾天編譯uboot時遇到些問題,先記錄一下,linux嵌入式開發(fā)還是蠻意思的,要想玩的溜,就必須掌握最基本的uboot、kernel移植、適配、裁剪。
    的頭像 發(fā)表于 07-21 16:05 ?724次閱讀
    <b class='flag-5'>記錄</b><b class='flag-5'>一下</b>uboot編譯的問題

    某些bug正常運行時會出現(xiàn),當打開串口log時又不再復現(xiàn)怎么辦?

    。但是在某些情況,當我們打開串口log時,這些bug就不再復現(xiàn)了。 這種情況,我們需要考慮以下幾個方面來解決這個問題。 首先,我們需要確定一下
    的頭像 發(fā)表于 10-31 14:37 ?301次閱讀