本文首要叙述嵌入式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板上均以相同的方法支撑此功用。
修改连载引荐:嵌入式Linux发动时刻优化的隐秘之一东西链/应用程序优化
修改连载引荐:嵌入式Linux发动时刻优化的隐秘之二文件体系
修改连载引荐:嵌入式Linux发动时刻优化的隐秘之三-内核
修改连载引荐:嵌入式Linux发动时刻优化的隐秘之四-发动脚本