描述

本文主要讲述嵌入式Linux启动时间优化的秘密,我们继续上篇没有讲完的嵌入式Linux启动时间优化方法,本文主要会讲Bootloader。想看上一篇的请查看本文结尾的链接。

Bootloader

1. 裁剪

删除不必要的功能。

通常引导加载程序包括许多仅用于开发所需的功能。用较少的功能编译您的bootloader。

优化所需的功能。调整引导加载程序以获得最快的性能。

U-Boot是事实上的嵌入式bootloader标准,对于U-Boot而言,以下一些功能在产品中可能不需要:

在include / configs / 《soc》-《board》 .h中禁用尽可能多的功能

示例:MMC,USB,以太网,dhcp,ping,命令行版本,命令完成提示。

较小且更简单的U-Boot加载速度更快,初始化速度更快。

移除启动延时:

消除启动延迟,这样通常可以节省几秒钟!:

setenv引导延迟0

在执行此操作之前,请先使用

CONFIG_ZERO_BOOTDELAY_CHECK重新编译U-Boot,

参考文档在doc / README.autoboot中。即使启动延迟设置为0,它也可以通过敲键来停止自动启动过程。

2. 简化脚本

有些情况,脚本很复杂,如:

在ARM9(400MHz)可节省大约56ms

3. 拷贝准确大小的内核

将内核从ROM复制到RAM时,仍然看到许多系统复制了太多无用字节,而没有考虑确切的内核大小。

在U-Boot中,使用nboot命令:

nboot ramaddr 0 nandoffset

U-Boot使用存储在uImage标头中的内核大小信息来知道要复制多少字节。

4. 优化内核加载

将内核uImage复制到RAM之后,U-Boot始终将其移动到uImage标头中指定的加载地址。还执行CRC检查。

可以通过将uImage直接加载到正确的地址来使U-Boot跳过memmove操作。

计算此地址:

Addr = Load Address - uImage header size

Addr = Load Address - (size(uImage) - size(zImage))

Addr = 0x20008000 - 0x40 = 0x20007fc0

在生产中时数据一般不会损坏将内核复制到RAM时,可以考虑禁用CRC检查

禁用带有U-boot环境变量的CRC检查:

setenv verify no

关闭U-Boot控制台输出。需要使用以下命令编译U-Boot

CONFIG_SILENT_CONSOLE和setenv silent yes.

有关详细信息,请参见doc / README.silent。

5. 跳过bootloader直接启动内核

原理:立即加载内核,而不是先加载引导加载程序,再加载内核!

例如在Microchip AT91上,使用at91bootstrap v3即可轻松实现。

您只需要使用linux或linux_dt配置之一进行配置:

make at91sama5d3xeknf_linux_dt_defconfig

make

对于 U-Boot Falcon 模式:

U-Boot分为两部分:SPL(二级程序加载程序)和U-Boot映像。 然后,U-Boot可以配置SPL来直接加载Linux内核,而不是U-Boot映像。

有关详细信息,请参见doc / README.falcon和

http://schedule2012.rmll.info/IMG/pdf/LSM2012_UbootFalconMode_Babic.pdf进行原始演示。

所有支持SPL的U-Boot板上均以相同的方式支持此功能。

打开APP精彩内容

点击阅读全文

Linux内核启动速度优化,嵌入式Linux启动时间优化的秘密之五-Bootloader相关推荐

  1. linux内核培训广州,嵌入式Linux驱动开发高级培训班-华清远见嵌入式培训中心

    课程目标 本课程以案例教学为主,系统地介绍Linux下有关FrameBuffer.MMC卡.USB设备的驱动程序开发.参加本课程学习的学员,因为具备了Linux设备驱动开发基础,所以本课程针对性较强, ...

  2. 嵌入式linux内核编译感想,嵌入式Linux内核的交叉编译编译-基于2.6.26

    测试环境:Fedora 9 Linux 2.6.26 / gcc 4.3.0 / arm-Linux-gcc 3.4.1 本 文主要介绍如何构建在x86平台上交叉编译各平台上的嵌入式Linux内核.要 ...

  3. linux内核按键驱动,嵌入式Linux按键驱动框架

    前言 本文将通过轮询.中断.poll机制.异步通知和同步互斥阻塞等方式编写按键驱动程序.本节的驱动框架是在<嵌入式Linux驱动框架的搭建>的基础上进行改进的,所以本文只讲解修改的部分. ...

  4. linux内核编译选项ccl,嵌入式Linux学习笔记(一)

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  5. linux内核mtd分区,嵌入式Linux MTD分区调整(MX28)

    关于MTD分区这个概念,我以前一直理解错,就是因为外面都叫他MTD分区,其实还不如说是MTD分割符,因为他只是在内核的一个定义.他并不是严格的分区.目前针对MX28这个平台,来说说怎么调整. 目前来说 ...

  6. 嵌入式linux内核启动过程,嵌入式Linux:ARM Linux启动流程

    ARM Linux启动流程大致为:bootloader---->kernel---->root filesystem.bootloader 是一上电就拿到cpu 的控制权的,而bootlo ...

  7. linux内核 can总线,嵌入式Linux下CAN总线配置

    问题背景:本人开发板使用的是迅为iTOP4412精英版,额外购买的CAN/485模块,如下图: 但是插上模块之后,在终端使用ifconfig can0命令发现开发板读不到CAN设备,显示"i ...

  8. 嵌入式linux矩阵键盘,基于嵌入式Linux的矩阵键盘驱动程序开发

    O 引 言 随着以计算机技术.通信技术和软件技术为核心的信息技术的发展,嵌入式系统在各个行业中得到了广泛的应用.嵌入式系统已成为当今IT行业的焦点之一.而在嵌入式系统中,键盘是重要的人机交互设备之一. ...

  9. Linux内核开发_1_编译LInux内核

    目录 1. 准备工作 1.1 学习环境 1.2 下载Linux内核源码 1.3 解压Linux内核 1.4 目录结构介绍 2. Linux内核配置 2.1 配置选项 1. make config 2. ...

  10. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

最新文章

  1. mac下mysql5.7.10密码问题
  2. RabbitMQ(三):RabbitMQ 使用场景
  3. ecs服务器网站文件放在哪里,云服务器ecs文件放哪里
  4. CG CTF WEB file_get_contents
  5. 12C RAC for ASM添加磁盘步骤
  6. 【渝粤题库】广东开放大学 文化服务营销管理 形成性考核
  7. python连接SQL Server取多个结果集:Pymssql模块
  8. ExtAspNet v3.1.0
  9. 第十八届浙大城市学院程序设计竞赛(同步赛)签到题ABDFGJL
  10. 微信中直接打开手机系统浏览器的实现
  11. JavaWeb如何学?
  12. java 打印堆栈_Java打印完整的堆栈信息
  13. 阿里应届程序员年薪25W,我酸了,你们呢
  14. 计算机无法添加打印机,电脑无法添加网络打印机,怎么办?
  15. 加油站防火防爆及危险区域划分
  16. 告别人工叫号!门诊排队叫号系统,这样配置,性价比高
  17. Java - Eclipse: Error notifying a preference change listener
  18. GetLastError()函数返回的值及含义
  19. 数学不好大学可以学计算机吗,高中数学不好的人大学计算机系能学好吗
  20. UML是什么?UML不是什么?

热门文章

  1. 函数重写 java_java 函数的重载和重写实例代码
  2. 计算机内存的故障,电脑内存故障的表现
  3. Zookeeper的安装与配置
  4. mxnet 和pytorch比较
  5. cudnn.h: No such file or directory
  6. 查看网页js数据接口
  7. all the input arrays must have same number of dimensions
  8. python opencv 视频剪辑
  9. YOLOV3+window10+cuda8.0+cudnn6.0安装过程
  10. 调用另一个python文件中的代码