Uboot+Linux启动时间优化
动机
设备启动时间往往是项目立项时的一项重要技术指标。快速的启动时间意味着设备宕机时间的缩短,系统的快速恢复,也能改善用户使用时的体验感受,是一项重要的市场竞争力。
准备
优化启动时间之前,我们首先要了解下我们设备的主要启动流程,如下图所述,设备启动流程主要包含:硬件、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启动时间优化的更多相关文章
- [Startup].Linux启动时间优化
转自:https://www.cnblogs.com/agui125/p/10070559.html 正文 回到顶部 1. 实践过程 我是对海思3559进行启动时间优化的.具体的操作可以参考<H ...
- 嵌入式LINUX启动时间优化
1. 实践过程 我是对海思3559进行启动时间优化的.具体的操作可以参考<Hi3559V100/Hi3556V100 快速启动优化指南>.软件上启动时间的优化一般是从三方面进行的:ubbo ...
- Linux启动时间优化-内核和用户空间启动优化实践
关键词:initcall.bootgraph.py.bootchartd.pybootchart等. 启动时间的优化,分为两大部分,分别是内核部分和用户空间两大部分. 从内核timestamp 0.0 ...
- Linux下启动时间优化专题
1. 过往优化总结 陆陆续续在Linux进行启动时间优化,之前有两份文档,分别从内核和用户空间两个方向进行了优化. <Android/Linux boot time分析优化>和<Bu ...
- 嵌入式Linux启动优化手记2 U…
参考一下 原文地址:U-boot优化">嵌入式Linux启动优化手记2 U-boot优化作者:ZhaoJunling 既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧. 1. ...
- Linux 性能优化之 IO 子系统 系列 图
http://blog.sina.com.cn/s/articlelist_1029388674_11_1.html Linux 性能优化之 IO 子系统(一) 本文介绍了对 Linux IO 子系统 ...
- linux io优化
场景:xml文件解析入库:并备份 问题:磁盘io异常,经常100%busy: linux io优化方法: 1.修改磁盘挂着参数,修改为writeback模式:对于文件读取频繁的可以设置noatime: ...
- Linux基础优化与安全归纳总结
一名运维工程师在运维岗位上时间久了,就会发现Linux优化的重要性,同时会给运维工作带来很多的便利性.本人逐渐认识到了这一点,所以特意在工作闲暇之余,通过阅读Linux相关书籍及向同事.同行高手咨询, ...
- WSL优化 (Windows Subsystem for Linux) Linux子系统优化配置
目录 wsl优化 (Windows Subsystem for Linux) Linux子系统优化 1. 永久修改wsl终端字体 2. 修改Linux终端配色 3. 添加WSL到右键菜单 wsl优化 ...
随机推荐
- 由表单验证说起,关于在C#中尝试链式编程的实践
在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...
- 学习 opencv---(6)玩转opencv源代码:生成opencv 工程解决方案与opencv 源码编译
在这篇中,我们探讨如何通过已安装的opencv选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码.我们可以对其源代码进行再 ...
- erlang 故障排查工具
系统级别perf top, dstat -tam, vtune 都能很好分析beam 瓶颈,本文主要erlang 级别排查: 1. 反编译 确认线上运行代码是否正确,reltools没掌握好,升级偶尔 ...
- 基础知识《十》unchecked异常和checked异常
运行时异常在运行期间才能被检查出来,一般运行期异常不需要处理.也称为unchecked异常.Checked异常在编译时就能确定,Checked异常需要自己处理. checked 异常也就是我们经常遇到 ...
- 从C++实现Ping开始说起
在C++中实现ping功能,并不难.但真正了解ping是需要花费一番功夫的. Ping功能是在ICMP基础上实现的.IP协议并不是一个可靠的协议,它不保证数据被送达,那么,保证数据送达的工作应该由其他 ...
- DevExpress 隐藏Ribbon中barbuttonItem的SuperTip(1)
public frmMain() { InitializeComponent(); ribbonControl1.Manager.HighlightedLinkChanged += Manager_H ...
- jdbcTemplate批量插入(添加)
public void addSubscibe(List<PermedipUserSubscribeVo> list) { final List<PermedipUserSubscr ...
- html BOM、DOM
- 【转】arm 开发工具比较(ADS vs RealviewMDK vs RVDS)
ADS REALVIEW MDK RVDS 公司 ARM Keil(后被ARM收购) ARM 版本 最新1.2 ,被RVDS取代 最新4.0 是否免费 破解情况 有 有 工程管理 CodeWarr ...
- Swift - 3.0之GCD学习
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...