大家好。
我使用的是SDK04.00.00.04,内核版本是4.9.28,cpu使用的是am3352,我们的板子在cpu的外部还设计了一个硬件看门狗,通过一个gpio来喂狗,因此为了使看门狗起作用且正常运行,需要在uboot中和kernel中分别添加看门狗喂狗操作,但是uboot到内核启动之间需要的时间较长(超过1.6s,看门狗不喂狗,系统会复位),请问下,这个版本的uboot到内核启动间,打印出来Starting kernel …以后,到内核启动[ 0.000000] Booting Linux on physical CPU 0x0之间在做什么工作?如何在这段时间进行喂狗呢?
Starting kernel …
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.9.28-geed43d1050 (llf@llf-virtual-machine) (gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11) ) #160 PREEMPT Mon May 14 13:59:41 CST 2018
Shine:
请参考下面的wiki网站优化启动时间。
processors.wiki.ti.com/…/Boot_Time_Optimization
processors.wiki.ti.com/…/Sitara_Linux_Training:_Boot_Time_Reduction_Update
LONGFEI LI1:
回复 Shine:
你好,我看了下你提供的连接,与我的需求有些出入,你提供的连接是优化uboot和kernel启动过程中的不必要项,达到系统启动整体时间变短,但是我这里的首要问题是uboot引导kernel时,已经将kernel的镜像文件和fdt文件读取到内存中之后,打印starting kernel…..到内核真正的开始启动打印内核时间戳[0.000000]之间的时间比较长(人工测试了下,目前使用的4.9.28这个版本,这个时间间隔大概是7s左右),这个时间内cpu在做什么?是在解压zimage和fdt吗?这个时间有没有办法缩减?我们使用了片外看门狗,肯们狗复位时间间隔是1.6s,所以需要starting kernel打印出来到内核启动打印0时间戳要尽量快,还得需要在1.6秒内完成驱动的加载运行喂狗程序,否则就会导致系统不停复位。
Denny%20Yang99373:
回复 LONGFEI LI1:
这个过程是在执行kernel main()里面的代码,主要是一些外设的初始化,内存检测等。
LONGFEI LI1:
回复 Denny%20Yang99373:
经过在uboot中添加打印,发现延时出现在uboot的boot_jump_linux函数的最后一行代码kernel_entry(0, machid, r2); 打印kernel_entry的值为0x82000000,这个是内核镜像读取到内存的首地址吧,这个首地址对应的是kernel的main函数的地址?
yongqing wang:
回复 LONGFEI LI1:
你现在CPU跑的频率是多少,如果比较低的话可以试试提高Cpu的主频
LONGFEI LI1:
回复 yongqing wang:
uboot中配置成600M后时间间隔缩短了点,大概3s左右,但是这个时间间隔对外来说还是比较长,因为有个片外看门狗芯片,看门狗复位时间是1.6s。
Jian Zhou:
回复 LONGFEI LI1:
请问你是用的NAND Flash启动么?
LONGFEI LI1:
回复 Jian Zhou:
是的
user5849257:
回复 LONGFEI LI1:
你好,我的要2.27s,我也觉得时间很长,之前使用imx6才700ms,这个问题你解决了吗?
LONGFEI LI1:
回复 user5849257:
这个时间耗费到了image文件解压过程,解压算法应该跟片子有关系,如果想省去这个时间,估计唯一的办法是空间换时间,编译内核生成的image文件不要压缩,这样会导致占用nand空间变大,但是启动会省去解压缩时间。