• 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以内。

     

  • 相关阅读:
    第五章课后练习题
    第四章课后练习
    函数
    变量、常量及类型
    go环境搭建及编辑器安装
    Matplotlib(绘图和可视化)
    Pandas例题(以NBA球队为例)
    Pandas
    Numpy
    jupyter notebook编辑器的用法
  • 原文地址:https://www.cnblogs.com/wahaha02/p/6051553.html
Copyright © 2020-2023  润新知