如何優化系統啟動時間--基于米爾瑞薩MYD-YG2LX開發板

1.概述

MYD-YG2LX采用瑞薩RZ/G2L作為核心處理器,該處理器搭載雙核Cortex-A55@1.2GHz+Cortex-M33@200MHz處理器,其內部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和視頻處理單元(支持H.264硬件編解碼),16位的DDR4-1600 / DDR3L-1333內存控制器、千兆以太網控制器、USB、CAN、SD卡、MIPI-CSI等外設接口,在工業、醫療、電力等行業都得到廣泛的應用。

米爾基于瑞薩RZ/G2L開發板

本文主要介紹基于MYD-YG2LX開發板進行系統啟動時間優化的調試案例,一般啟動方式有去掉常規uboot,直接使用SPL加載內核和保留常規uboot加載內核的方式,MYD-YG2LX目前使用的是保留常規uboot的方法啟動,啟動時間20s+,接下來介紹的主要包括TFA、Uboot、Kernel和文件系統時間優化。

2.硬件資源

  • USB-TTL調試串口線一根

  • MYD-YG2LX開發板一塊

  • 12V電源適配器一個

3.軟件資源

  • Linux虛擬機

  • 米爾提供的SDK交叉工具鏈

  • Linux5.10.83

4.環境準備

進行調試之前,需要安裝好Linux虛擬機等相關開發環境,具體可以參考《MYD-YG2LX_Linux軟件開發指南》的2.0章節。

5.啟動時間優化

5.1.1. TFA優化

TFA引導啟動的log主要有以下,如果我們認為不是太美觀,可以到TFA源碼中使用grep命令去搜索關鍵的信息打印,然后把相關的打印去掉,這可能需要花點功夫去尋找。

例如(grep -rn “BL2:”)搜索到關鍵的文件(以下圖示只是其中的一個地方),然后屏蔽即可。

另外,需要檢查源碼下面的這個寄存器有沒有設置,有則忽略,沒有則需要打開,這樣會減少系統在啟動中的時間。

static?void?cpu_cpg_setup(void)
{
while?((mmio_read_32(CPG_CLKSTATUS)?&?CLKSTATUS_DIVPL1_STS)?!=?0x00000000);
mmio_write_32(CPG_PL1_DDIV,?PL1_DDIV_DIVPL1_SET_WEN?|?PL1_DDIV_DIVPL1_SET_1_1);
while?((mmio_read_32(CPG_CLKSTATUS)?&?CLKSTATUS_DIVPL1_STS)?!=?0x00000000);
}
void?cpg_early_setup(void)
{cpu_cpg_setup();
cpg_ctrl_clkrst(&early_setup_tbl[0],?ARRAY_SIZE(early_setup_tbl));
}

最后編譯TFA以及更新即可。

5.1.2. Uboot優化

正常的啟動log如下,我們需要對這部分進行優化,優化可以從下面3個點出發。

  • 裁剪uboot,減少uboot大小。

MYD-YG2LX平臺的2G DDR配置文件在configs/myc-rzg2l_defconfig,1G DDR的配置文件在configs/myc-rzg2l_ddr1gb_defconfig,可以在這個配置文件中屏蔽掉一些自己不需要的功能,這個需要根據實際情況刪除不需要的功能,例如:

    • 移除bootdelay的倒計時時間

    bootdelay一般默認都是2-3s,移除可以直接修改include/configs/myc-rzg2l.h文件,例如:

    • 關閉uboot的打印log

    關閉uboot相關的日志打印,可以到uboot的源碼路徑下搜索關鍵的信息,然后進行屏蔽即可(以下圖示只是其中的一個地方),例如:

    最后編譯與更新uboot即可。

    5.1.3. Kernel優化

    Kernel典型的修改主要有以下:

    • 簡單:通過在 cmdline 中添加 quiet 來減少控制臺消息

    • 適度:通過移除驅動程序、文件系統、子系統來精簡內核,從減少內核解壓或加載的時間

    • 適度:通過移除未使用的硬件接口精簡設備樹

    • 棘手:開始優化行為不良的驅動程序,這是一個相對復雜和困難的任務。優化驅動程序可以提高其性能、穩定性和兼容性,從而改善系統的整體表現。然而,如果驅動程序的行為不良,例如出現崩潰、卡頓或沖突等問題,那么進行優化就會變得更加棘手和挑戰。這需要深入分析和修復驅動程序的問題,調整其代碼和算法,以使其更加高效和可靠。

    • 使用Bootgraph分析內核啟動的調用時間,移除花費時間長的驅動和優化需要使用的驅動

    總之優化還算是一項蠻復雜的項目,我們此次主要從以下幾點優化:

    • 去掉kernel的打印等級,需要到內核源碼下屏蔽掉log屬性和到uboot源碼下把log等級升高,內核修改如下:

    Uboot修改如下:

    • 關掉kernel不需要的一些外設資源,縮小內核大小(需要根據自己的情況來進行修改)

    可以到設備樹中屏蔽掉一些不需要的接口和到內核配置文件中屏蔽掉一些不需要的驅動配置,例如:

    • 使用Bootgraph分析內核啟動的調用時間,移除花費時間長的驅動和優化需要使用的驅動。

    首先需要在uboot加上時間戳和init debug調用:

    setenv?bootargs?'rw?rootwait?earlycon?root=/dev/mmcblk0p2?printk.time=1?initcall_debug=1'

    然后啟動內核,采集啟動log,如下:

    dmesg?>?boot-kernel.log

    返回內核源碼目錄,進入內核源碼scripts目錄,只需下面命令,生成直觀圖形,如下:

    ./bootgraph.pl?boot-kernel.log?>?boot-kernel.svg

    然后打開boot.svg查看花費時間最大的驅動調用,沒用的就關閉,需要用的就優化。

    最后編譯以及更新內核即可。

    5.1.4. 文件系統優化

    MYD-YG2LX的文件系統是基于yocto構建的,關于yocto如何構建可以參考《MYD-YG2LX_Linux軟件開發指南》的3.0章節。

    文件系統主要使用下面這3個命令就可以找到花費時間最多的服務,然后可以根據實際情況優化。當然也可以把所有的服務以圖形的形式表現出來,這樣更加直觀,采用systemd-analyze plot > boot.svg?可以把每個服務啟動順序和消耗時間顯示出來,針對這些服務,移除掉不需要的或者調整服務之間的啟動順序。

    systemctl?list-unit-files?--state=enabled?#查看所有開機自啟的服務
    systemd-analyze?blame?#查看服務的初始化時間
    systemd-analyze?critical-chain?#查看啟動花費時間最多的

    5.1.5. 啟動測試

    經過以上的優化后可以打包一個sd卡刷機包并刷到板子的emmc,關于如何打包可以參考《MYD-YG2LX_Linux軟件開發指南》的4.3章節,最后再啟動測試,執行systemd-analyze即可看到啟動時間,效果如下:

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/diannao/82381.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/diannao/82381.shtml
    英文地址,請注明出處:http://en.pswp.cn/diannao/82381.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    QML 圖像變換(縮放、平移、旋轉)

    目錄 引言相關閱讀基礎知識工程結構核心代碼解析示例1:圖像縮放(ImageScale.qml)代碼說明運行效果 示例2:圖像平移(ImageTransform.qml)代碼說明運行效果 示例3:圖像旋轉(ImageRotat…

    Linux 系統命令使用指南1

    適用于 Red Hat / CentOS / Rocky Linux 等系統的基本初始化配置操作。 🔒 1. 關閉 SELinux(臨時生效) setenforce 0?? 注意:此命令僅臨時關閉 SELinux,重啟后可能恢復。要永久關閉,請修改 /etc/selinux…

    1.2.1 Linux音頻系統發展歷程簡介

    Linux音頻系統的發展經歷了從最初的簡單驅動到今天多層次、模塊化音頻架構。簡要梳理其主要歷程: 早期的OSS(Open Sound System) 在90年代及2000年代初,Linux主要使用OSS來支持音頻。OSS直接為硬件設備(如聲卡&#…

    【Linux操作系統】第一彈——Linux基礎篇

    文章目錄 💡 一. Linux的基本常識🪔 1.1 linux網絡連接三種方式🪔1.2 虛擬機的克隆🪔1.3 虛擬機的快照🪔1.4 虛擬機的遷移和刪除🪔1.5 vmtools工具 💡二. Linux的目錄結構🪔2.1 Linu…

    STM32printf重定向到串口含armcc和gcc兩種方案

    STM32串口重定向:MDK與GCC環境下需重寫的函數差異 在嵌入式開發中,尤其是使用 STM32系列微控制器 的項目中,調試信息的輸出是不可或缺的一部分。為了方便調試,開發者通常會選擇將 printf 等標準輸出函數通過 UART 串口發送到 PC …

    C++ 文本讀寫與二進制讀寫的底層機制

    1.文件的打開方式 1.文本打開 在windows中,寫入時會將\n換成\r\n,讀出時\r\n會讀出\n linux對\n讀寫不做處理 2.二進制打開 對\n讀寫不做處理 2.文本讀寫 1.數據要先變成字符串再寫進緩沖區 2.字符串直接寫進緩沖區就是 3.c對文本讀寫的支持 istream/ostream中重載了對…

    02 mysql 管理(Windows版)

    一、啟動及關閉 MySQL 服務器 1.1 通過 “服務” 管理工具 winr打開運行,輸入services.msc 找到MySQL80,這個是我們在安裝mysql的時候給的服務的名稱,具體見文章mysql 安裝 右鍵選擇啟動或者停止。 1.2 通過命令提示符 1.2.1 關閉命令…

    Elasticsearch知識匯總之 ElasticSearch高可用方案

    六 ElasticSearch高可用方案 6.1 高可用架構 請求協調節點根據負載均衡,轉發給主分片節點,主分片同步復制給從節點,主從節點都寫入完成返回客戶端請求成功。對于讀請求,協調負載到任意節點數據節點,數據節點把各自符合…

    H5 移動端適配最佳實踐落地指南。

    文章目錄 前言一、為什么需要移動端適配?二、核心適配方案1. 視口(Viewport)設置2. 三種適配方案 (僅供參考)(1)rem 適配方案(2)vw/vh 適配方案(3&#xff09…

    MySQL初階:數據庫約束和表的設計

    數據庫約束 數據庫約束是針對數據庫中的表中的數據進行施加規則和條件,用于確保數據的準確性和可靠性。 數據庫約束類型 1)not null 非空類型 :指定非空類型的列不能存儲null,如果插入的數據是null便會報錯。 2)de…

    LVGL- 按鈕矩陣控件

    1 按鈕矩陣控件 lv_btnmatrix 是 LVGL(Light and Versatile Graphics Library) v8 中提供的一個非常實用的控件,用于創建帶有多個按鈕的矩陣布局。它常用于實現虛擬鍵盤、數字鍵盤、操作面板、選擇菜單等場景,特別適用于嵌入式設…

    excel 批量導出圖片并指定命名

    一、開發環境 打開excel文件中的宏編輯器和JS代碼調試 工具-》開發工具-》WPS宏編輯器 左邊是工程區,當打開多個excel時會有多個,要注意不要把代碼寫到其他工作簿去了 右邊是代碼區 二、編寫代碼 宏是js語言,因此變量或者方法可以網上搜…

    yolov5基礎--yolov5源碼閱讀(common.py)

    🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 博主簡介:努力學習的22級本科生一枚 🌟?;探索AI算法,C,go語言的世界;在迷茫中尋找光芒…

    5.0.5 變換(旋轉、縮放、扭曲)

    WPF變換可以產生特殊效果,如平移、旋轉、扭曲。 變換類 描述TranslateTransform沿著X軸和Y軸平移ScaleTransform 沿著定義的中心點縮放RotateTransform沿著定義的中心點旋轉SkewTransform 扭曲元素MatrixTransfrom提供3x3矩陣,用于定義一個自定義變換 1…

    如何設置內網映射端口到外網訪問?哪些軟件可以進行端口映射?

    大多數時候我們所使用的服務器都是在內網搭建的,而且內網是可以訪問外網的,但外網是沒法直接訪問內網IP和端口服務的。也就是說外網無法直接訪問到內網的網絡地址,需要大家去搭建一個內外網互通的橋梁,把內網服務器指定端口映射到…

    養生:塑造健康生活的良方

    養生是一場貫穿生活的自我關愛行動,從飲食、運動、睡眠到心態調節,每一個環節都對健康有著深遠影響。以下為你帶來全面且實用的養生策略。 飲食養生:科學搭配,呵護腸胃 合理規劃三餐,遵循 “早營養、午均衡、晚清淡”…

    YOLOv12云端GPU谷歌免費版訓練模型

    1.效果 2.打開 https://colab.research.google.com/?utm_sourcescs-index 3.上傳代碼 4.解壓 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.進入yolov12-main目錄 %cd /content/yolov12-main/yolov12-main 6.安裝依賴庫 !pip install -r requirements.…

    機器人手臂的坐標變換:一步步計算齊次矩陣過程 [特殊字符]

    大家好!今天我們來學習如何計算機器人手臂的坐標變換。別擔心,我會用最簡單的方式解釋這個過程,就像搭積木一樣簡單! 一、理解問題 我們有一個機器人手臂,由多個關節組成。每個關節都有自己的坐標系,我們需要計算從世界坐標系(W)到末端執行器(P?)的完整變換。 二、已…

    CSS中的@import指令

    一、什么是import指令&#xff1f; import 是CSS提供的一種引入外部樣式表的方式&#xff0c;允許開發者在CSS文件中引入其他CSS文件&#xff0c;或者在HTML的<style>標簽中引入外部樣式。與常見的<link>標簽相比&#xff0c;import 提供了一種更“CSS原生”的樣式…

    [學成在線]23-面試題總結

    1. 詳細說說你的項目吧 從以下幾個方面進行項目介紹: 項目的背景&#xff0c;包括: 是自研還是外包、什么業務、服務的客戶群是誰、誰去運營等問題。項目的業務流程項目的功能模塊項目的技術架構個人工作職責個人負責模塊的詳細說明&#xff0c;包括模塊的設計&#xff0c;所…