嵌入式系统里是否使用非解压内核
作者: zjujoe 转载请注明出处
Email:zjujoe@yahoo.com
BLOG:http://blog.youkuaiyun.com/zjujoe
2.6 内核中, 执行 make 命令会在 arch/arm/boot 下生成两个内核: 非解压版本 Image 以及压缩版本 zImage :
kernel>ls -l arch/arm/boot/*Image
-rwxr-xr-x 1 zjujoe zjujoe 2787720 2008-10-21 15:46 arch/arm/boot/Image
-rwxr-xr-x 1 zjujoe zjujoe 1340208 2008-10-22 15:06 arch/arm/boot/zImage
这两个版本的大小相差大概1 倍, 到底应该使用哪个版本呢? 从节约 flash 的角度出发, 应该使用压缩内核 zImage, 但是现在 flash 越来越便宜,使用非压缩内核 Image 有时能够加快系统装载速度。 下面两个例子通过测试装载时间来研究一下这个问题。
实例1:研究 nand 下是否应该使用非解压缩内核
压缩前的内核 -rwxrwxr-x 1 zjujoe zjujoe 2943128 Feb 1 09:07 arch/arm/boot/Image
压缩后的内核 -rwxrwxr-x 1 zjujoe zjujoe 1420196 Feb 1 09:07 arch/arm/boot/zImage
经测量装载zImage 需要 505 mS, 装载Image需要1066mS, zImage 启动到startkernel 函数时间为 1021mS。
所以以该 nand 的装载内核速度( 2.68M /S), 装载非解压缩内核是没有意义的。进一步, 对于慢速设备(比如nand), 我们应该尽量使用压缩的内核。
实例2:研究 onenand 下是否应该使用非解压缩内核
压缩前的内核 -rwxr-xr-x 1 zjujoe zjujoe 2671768 2008-10-28 15:50 arch/arm/boot/Image
压缩后的内核 -rwxr-xr-x 1 zjujoe zjujoe 1288660 2008-10-28 15:50 arch/arm/boot/zImage
经测量装载 zImage 需要 306 mS, 装载 Image 需要449mS, zImage 启动到 startkernel 函数时间为750mS. 而Image 启动到 startkernel 函数时间为473mS。
所以以该 onenand 的装载内核速度( 6.99M /S), 应该使用非解压缩内核, 可以缩短启动时间 300mS 左右。进一步, 对于快速设备(比如onenand/mdoc/nor), 我们应该使用非压缩内核(不考虑 flash 空间成本的前提下)。
总结
当然, 到底是否使用压缩功能, 要依靠测试数据。不同的CPU, 不同的系统总线,不同类型的 flash 都会有不同的速度,甚至也有可能同一个硬件, 速度优化前使用压缩内核快, 而速度优化后就应该使用非压缩内核了。