动机

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

准备

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

硬件部分包括:

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

Bootloader(此处为UBoot)包括:

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

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

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

应用程序包括:

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

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

首先我们要打开uboot和Linux 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使能内核的日志时间戳功能。

本文只讨论bootloader和Kernel部分的优化方法。

优化

Uboot

  • flash CS时序优化
  • 版本Flash文件系统从JFFS2切换到UBIFS
  • UBIFS/MTD优化
  • UBOOT 配置裁剪
  • 串口打印优化
  • bootdelay优化
  • 设备初始化时序优化
  • 设备驱动优化

Kernel

  • 内核配置裁剪
  • 版本Flash文件系统从JFFS2切换到UBIFS

Initrd

  • 根文件系统文件裁剪
  • 压缩方式从gzip改为LZMA
  • rcS优化

BSP

  • 设备初始化时序优化
  • Delay Device Init,从内核态转为由应用程序根据需要来并行设备初始化

实例

背景介绍:

本设备的引导方式为uboot+linux,OS镜像大小为31MB,存储在版本nor flash上,flash文件系统为JFFS2,内核镜像采用gzip方式压缩。优化前设备启动时间为186s左右,项目要求控制在90s以内。

Uboot+Linux启动时间优化的更多相关文章

  1. [Startup].Linux启动时间优化

    转自:https://www.cnblogs.com/agui125/p/10070559.html 正文 回到顶部 1. 实践过程 我是对海思3559进行启动时间优化的.具体的操作可以参考<H ...

  2. 嵌入式LINUX启动时间优化

    1. 实践过程 我是对海思3559进行启动时间优化的.具体的操作可以参考<Hi3559V100/Hi3556V100 快速启动优化指南>.软件上启动时间的优化一般是从三方面进行的:ubbo ...

  3. Linux启动时间优化-内核和用户空间启动优化实践

    关键词:initcall.bootgraph.py.bootchartd.pybootchart等. 启动时间的优化,分为两大部分,分别是内核部分和用户空间两大部分. 从内核timestamp 0.0 ...

  4. Linux下启动时间优化专题

    1. 过往优化总结 陆陆续续在Linux进行启动时间优化,之前有两份文档,分别从内核和用户空间两个方向进行了优化. <Android/Linux boot time分析优化>和<Bu ...

  5. 嵌入式Linux启动优化手记2&nbsp;U…

    参考一下 原文地址:U-boot优化">嵌入式Linux启动优化手记2 U-boot优化作者:ZhaoJunling 既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧. 1. ...

  6. Linux 性能优化之 IO 子系统 系列 图

    http://blog.sina.com.cn/s/articlelist_1029388674_11_1.html Linux 性能优化之 IO 子系统(一) 本文介绍了对 Linux IO 子系统 ...

  7. linux io优化

    场景:xml文件解析入库:并备份 问题:磁盘io异常,经常100%busy: linux io优化方法: 1.修改磁盘挂着参数,修改为writeback模式:对于文件读取频繁的可以设置noatime: ...

  8. Linux基础优化与安全归纳总结

    一名运维工程师在运维岗位上时间久了,就会发现Linux优化的重要性,同时会给运维工作带来很多的便利性.本人逐渐认识到了这一点,所以特意在工作闲暇之余,通过阅读Linux相关书籍及向同事.同行高手咨询, ...

  9. WSL优化 (Windows Subsystem for Linux) Linux子系统优化配置

    目录 wsl优化 (Windows Subsystem for Linux) Linux子系统优化 1. 永久修改wsl终端字体 2. 修改Linux终端配色 3. 添加WSL到右键菜单 wsl优化 ...

随机推荐

  1. SDN/NFV运营商商业化部署

    三大运营商发布未来网络架构,并逐步加快SDN/NFV商业化部署的步伐.中国联通发布其新一代网络架构<CUBE-Net 2.0白皮书>,并与20多家合作伙伴共同启动了“新一代网络”合作研发计 ...

  2. Integer与int的区别

    简述:int与Integer的区别: 对于它们,我们可能只是知道简单的区别.Integer是int的一个封装类,int的初始值为0,而Integer的初始值为null.但是他们之间真的仅仅只有这些区别 ...

  3. 10分钟了解设计模式(C#)

    最近把<大话设计模式>重温了下(看完序才知道原来作者是也是博客园园友,这本书的最早博客版本在这里).体会最深的就是面向接口编程的重要性,如何在自己的项目中进行抽象,合理的利用各种设计模式. ...

  4. Excel中VBA进行插入列、格式化、排序

    在数据分析中经常需要对数据进行排序.排名,观察指标排名变化情况,手工处理的话不是太困难,但经常使用,还是编写宏比较方便. 宏命令比较简单,不多解释,只说一下注意事项: 1.有合并单元格,比如列.行合并 ...

  5. 【webGL】threejs常用的api

    /*** 场景(scene) ***/ var scene = new THREE.Scene(); // 创建场景 scene.add(x); // 插入场景 /*** 相机(camera) *** ...

  6. vue笔记

    安装vue脚手架工具 sudo cnpm install -g vue-cli

  7. 编译安装nginx

    一.安装工具yum -y install zlib zlib-devel openssl openssl-devel pcre-devel cc-c++ autoconf automakeyum -y ...

  8. java中scanner类的用法

    在Eclipse中编写程序时,如果我们的变量是需要手动输入的时候,我们就可以用到scanner类了. Scanner类,这是一个用于扫描输入文本的新的实用程序.由于任何数据都必须通过同一模式的捕获组检 ...

  9. Web 前端之HTML和CSS

    Web 前端之HTML和CSS HTML被称为超文本标记语言(Hyper Text Markup Language),它不是一种编程语言,而是一种标记语言,标记语言是一套标记标签,HTML使用标记标签 ...

  10. sql 如何将拼的sql语句结果赋值给变量

    SET @SQLS='select @AllUser=count(1) from (select PhoneId from '+@TABLE+' where SiteId='+convert(VARC ...