在我们进行linux系统优化时,可以从以下几方面入手
1、如果有硬性的启动时间要求,比如开机时间要求达到10s以内,那么就必须要硬件上面支持。比如使用一般的
nand flash想达到那么快的速度那是不可能,至少要20秒以上,所以这个时候,就必须要使用inand来实现。
2、当硬件确定支持启动时间要求后,软件方面可以由以下方面入手
1)bootloader的启动,由于bootloader在启动过程中会有判断是否进入命令模式,这个时候,可以把这个倒数的时
间去掉(建议最终版本的时候才这么做,因为方便使用fastboot进行固件烧写),或者减少
2)bootloader阶段不要使用LCD,因为本身这个阶段启动的时间在几百ms左右,所以没必要使用LCD了
3)kernel阶段,主要耗时点在于模块的加载,所以要找到每个模块加载的时间,那么就可以确定是那些模块耗时了
如何找呢? 那就需要把各驱动模块加载时间打印出来咯。
在uboot的CONFIG_BOOTARGS增加printk.time=y initcall_debug
initcall_debug打印内核加载的各个模块信息,通过这个选项可以看到内核加载各个模块的顺序,内核加载了
哪些模块,从信息中 可以看到, 如果您的内核系统没有必要使用某个模块,尽量不要加载进去,这样即可节约内核
占用的存储空间,也可以加快内核的启动 过程。如果有模块是使用模拟spi或者i2c的,那么可以考虑减少延时时间等。
另外,还可以添加lpj的值,如lpj=1949696,可以减少内核计算lpj的时间,lpj可以直接从串口打印信息获取。
1. 首先修改kernel的bootargs,在bootargs中添加以下内容:
- printk.time=y initcall_debug
我使用的bootargs修改后如下:
- setenv bootargs "root=/dev/mtdblock2 rootfstype=yaffs2 init=/init console=ttySAC2,115200printk.time=y initcall_debug"
这样kernel在启动时,将会打印出每个模块的启动耗时:
printk.time=y
代表内核打印信息含有时间戳,如何您的内核没有配置:
- Kernel hacking
- --->Show
timing information on printks
可以在bootargs 增加printk.time=y
内核参数,打印时间信息,如果配置了如上的选项,可以不增加printk.time=y参数。
printk.time=y 适用于不需要重新编译内核即可查看启动时间信息。