色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

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

前言

這幾天遇到一個bootloader升級的奇怪問題,分析問題的過程使用了一些常用的分析工具和方法覺得很有普遍性,這里記錄一下Bug分析、復現最后解決的整個過程,希望能給大家帶來一些啟發。

正文

環境描述

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

測試用例

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

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

圖1:Bootloader故障注入測試

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

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

期望結果

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

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

圖3:A分區升級失敗后跳到B分區期望正常通信狀態

實際結果

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

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

圖4:A分區升級失敗后跳到B分區實際異常通信狀態

問題分析

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

. IGOFF

.低電壓(低于6.5V)

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

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

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

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

. 處于A分區,刷A分區

. 處于A分區,刷B分區

. 處于B分區,刷A分區

. 處于B分區,刷B分區

結果,無論最后是在A分區還是B分區,通信都是正常的。

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

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

調試上位機:RH850提供的CS+

調試仿真器:瑞薩專用的E2

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

圖5:CS+的熱插拔選項

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

圖6:CS+的調試器E2配置

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

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

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

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

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

. 當前處于B分區

. 升級B分區

. 跳過0x34開始傳輸數據服務

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

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

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

. 當前處于A分區

. 開始升級程序

. 擦除完A分區數據

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

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

. 開始升級

. 跳過0x34服務

. 0x36開始傳輸數據

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

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

擦除完A分區數據后還沒開始傳輸A分區的數據就立馬斷開物理連接。

成功復現問題!!!

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

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

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

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

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

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

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

為啥A分區0x40000處開始的數據會影響B分區的程序運行?

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

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

圖10:A分區鏈接文件

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

圖11:B分區鏈接文件

找到問題,A分區和B分區的標定數據用的是同一塊Flash地址!

9)修改B分區鏈接文件

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

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

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

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

總結

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

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






審核編輯:劉清

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

    關注

    14

    文章

    886

    瀏覽量

    54485
  • bootloader
    +關注

    關注

    2

    文章

    235

    瀏覽量

    45612
  • EOL
    EOL
    +關注

    關注

    0

    文章

    10

    瀏覽量

    12248
  • rh850
    +關注

    關注

    2

    文章

    24

    瀏覽量

    4598

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

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

收藏 人收藏

    評論

    相關推薦

    汽車ECU的Bootloader升級過程分析

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

    project復現過程踩到坑對應的解決方案

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

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

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

    STM32 Bootloader實現

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

    無法使用內置Bootloader的DFU方式進行固件升級的問題進行分析

    本文將針對客戶無法使用內置Bootloader的DFU方式進行固件升級的問題進行分析。
    發表于 08-06 09:52

    記錄次STM32H743 CANFD調試過程中的BUG

    記錄次STM32H743 CANFD調試過程中的BUG
    發表于 08-13 06:30

    bootloader的主要作用是什么

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

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

    在上篇文章中,轉載了種上流的方法,使用狀態機、函數指針、結構體、結構體指針等,異常的上流,但是有些bug。目錄調試其他矩陣鍵盤掃描的思路暴力掃描另外記錄
    發表于 01-18 07:18

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

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

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

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

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

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

    單片機的Bootloader可以實現用戶輕松升級程序

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

    介紹一下CAN Bootloader整個實現過程

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

    記錄一下uboot編譯的問題

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

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

    。但是在某些情況,當我們打開串口log時,這些bug就不再復現了。 這種情況,我們需要考慮以下幾個方面來解決這個問題。 首先,我們需要確定一下
    的頭像 發表于 10-31 14:37 ?373次閱讀
    主站蜘蛛池模板: 后入内射国产一区二区| 日产精品久久久久久久蜜殿| 久久青青热| xxxx老妇性hdbbbb| 2021精品国产综合久久| 亚洲免费综合色视频| 手机在线国产视频| 欧美精品做人一级爱免费| 黄得让人湿的片段| 国产精品亚洲精品影院| 俄罗斯videosbest8| videos gratis欧美另类| 99热这里只有 精品| 97午夜精品| 99热热在线精品久久| 最近中文字幕2019免费版日本| 色久天| 久久亚洲精品成人| 国产探花在线精品一区二区| jyzzjyzzz视频国产在线观看| 伊人网综合网| 折磨比基尼美女挠肚子| 有人有片的观看免费视频| 亚洲精品久久久无码一区二区| 我和妽妽在厨房里的激情区二区| 秋霞在线观看视频一区二区三区| 精品夜夜澡人妻无码AV| 国产又粗又猛又爽又黄的免费视频 | 娇小亚裔被两个黑人| 国产精品97久久AV色婷婷| 大香交伊人| 成人影院午夜久久影院| JLZZJLZZJLZ老师好多的水| 不良网站进入窗口软件下载免费| 床伴在线观看免费高清完整泰剧第四集| beeg日本老师按摩| xxnxx美女| 国产黄A片在线观看永久免费麻豆 国产互换后人妻的疯狂VIDEO | 国产伦精品一区二区三区精品| 国产精品亚洲精品久久品| 久久午夜免费视频|