Uboot+Linux啟動時間優化


動機

設備啟動時間往往是項目立項時的一項重要技術指標。快速的啟動時間意味着設備宕機時間的縮短,系統的快速恢復,也能改善用戶使用時的體驗感受,是一項重要的市場競爭力。

准備

優化啟動時間之前,我們首先要了解下我們設備的主要啟動流程,如下圖所述,設備啟動流程主要包含:硬件、bootloader、操作系統和應用程序4個部分。

 

硬件部分包括:

  • 電源、時鍾、復位時序、存儲介質以及其他系統啟動時需要依賴的外設等;

Bootloader(此處為UBoot)包括:

  • CPUcache、網卡、存儲的復位解復位時序、配置流程,啟動OS鏡像的獲取、以及OS的引導跳轉等;

操作系統(此處為Linux)包括:

  • Linux Kernel、設備驅動、文件系統、根文件系統、板級驅動包BSP等;

應用程序包括:

  • 各種服務進程的上電初始化。

另外,在着手優化啟動時間之前,我們要對現狀有所了解,以幫助我們對啟動的各個環節進行檢查、度量。

首先我們要打開ubootLinux Kernel的調試打印開關,保證打印打印到串口。

修改uboot配置,如下:

//#define CONFIG_SILENT_CONSOLE

#define DEBUG

uboot shell或者cmdline中中設置Linux Kernel打印級別

setenv loglevel 7

 然后通過下面的幾種方法對啟動時間進行度量。

記錄每條打印的打印時間戳

telnet 192.166.100.3 10006 | ts "%H:%M:%.S"

telnet 192.166.100.3 10006 | while read pong; do echo "$(date +"%T.%N"): $pong"; done

 記錄每條打印的相對時間戳

telnet 192.166.100.3 10006 | ts -i "%H:%M:%.S"

針對linux Kernel,還可以配置CONFIG_PRINTK_TIME=y使能內核的日志時間戳功能。

本文只討論bootloaderKernel部分的優化方法。

優化

Uboot

  • flash CS時序優化
  • 版本Flash文件系統從JFFS2切換到UBIFS
  • UBIFS/MTD優化
  • UBOOT 配置裁剪
  • 串口打印優化
  • bootdelay優化
  • 設備初始化時序優化
  • 設備驅動優化

Kernel

  • 內核配置裁剪
  • 版本Flash文件系統從JFFS2切換到UBIFS

Initrd

  • 根文件系統文件裁剪
  • 壓縮方式從gzip改為LZMA
  • rcS優化

BSP

  • 設備初始化時序優化
  • Delay Device Init,從內核態轉為由應用程序根據需要來並行設備初始化

實例

背景介紹:

本設備的引導方式為uboot+linuxOS鏡像大小為31MB,存儲在版本nor flash上,flash文件系統為JFFS2,內核鏡像采用gzip方式壓縮。優化前設備啟動時間為186s左右,項目要求控制在90s以內。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM