Uboot+Linux启动时间优化

原文链接: https://www.cnblogs.com/wahaha02/p/6051553.html

Uboot+Linux启动时间优化

动机

设备启动时间往往是项目立项时的一项重要技术指标。快速的启动时间意味着设备宕机时间的缩短,系统的快速恢复,也能改善用户使用时的体验感受,是一项重要的市场竞争力。

准备

优化启动时间之前,我们首先要了解下我们设备的主要启动流程,如下图所述,设备启动流程主要包含:硬件、bootloader、操作系统和应用程序4个部分。

 

硬件部分包括:

  • 电源、时钟、复位时序、存储介质以及其他系统启动时需要依赖的外设等;

Bootloader(此处为UBoot)包括:

  • CPUcache、网卡、存储的复位解复位时序、配置流程,启动OS镜像的获取、以及OS的引导跳转等;

操作系统(此处为Linux)包括:

  • Linux Kernel、设备驱动、文件系统、根文件系统、板级驱动包BSP等;

应用程序包括:

  • 各种服务进程的上电初始化。

另外,在着手优化启动时间之前,我们要对现状有所了解,以帮助我们对启动的各个环节进行检查、度量。

首先我们要打开ubootLinux Kernel的调试打印开关,保证打印打印到串口。

修改uboot配置,如下:

扫描二维码关注公众号,回复: 7580938 查看本文章

//#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+"(date+"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以内。

 

猜你喜欢

转载自blog.csdn.net/weixin_43138570/article/details/102728694