重写buildinstall脚本后我们知道生成images主要就靠mk-images脚本,它的输入来自upd-instroot——安装一些包到一个根目录(instroot),这些包都是安装过程必须要用到的,至于是哪些包,可以通过调试upd-instroot脚本打印出来。至于为什么是这些包?现阶段这个不重要,以后有空再说;
但是instroot目录太大(>400M),启动时如果将其载入ramfs会很久,因此就从instroot中copy一些关键文件出来到另一个临时建立的根目录(initrdroot),再将其压缩成initrd.img(<30M);而instroot会再被复制一个更大的子集压缩成install.img(<150M)在第二阶段载入,代码中有对应的文件清单;
因此一句话总结就是:install.img是instroot的一个子集压缩而成;initrd.img是从instroot复制的子集,再加入kernel、firmware、login文件等然后压缩而成;
mk-images脚本调用关系如下:
mk-images
makeBootImages() (mk-images.x86)
makeinitrd() # make initrd.img
makemoduletree() #copy modules & firmware
modli