赞
踩
内核映像构建过程大体上可以概括为“三次编译链接,一次组合”。
1、第一次编译链接链接
kbuild分别编译各个子目录下的目标文件,生成builtin.o、lib.a等文件,然后调用链接器将这些文件链接为vmlinux,并保存到顶层目录下。
2、第二次编译链接链接
kbuild使用工具objcopy,将顶层Makefile构建好的内核映像vmlinux复制到arch/boot/compressed目录下,去掉其中的符号信息和重定位信息,删除段“.comment”,并命名为vmlinux.bin。
kbuild压缩内核映像vmlinux.bin为vmlinux.bin.gz。
kbuild借助内核自带的程序mkpiggy构建一个汇编程序piggy.S,该汇编程序就是vmlinux.bin.gz加上一些解压内核时所需要的信息。并调用汇编器将其编译为piggy.o。
kbuild调用链接器编译arch/boot/compressed目录下的head_32.c、misc.c等,并将head_32.o、misc.o以及包含压缩映像的piggy.o等文件链接为vmlinux.bin,保存到arch/boot目录下。
3、第三次编译链接链接
kbuild将arch/boot下的a20.o、bioscall.o等目标文件链接为setup.elf,使用objcopy将其转换为裸二进制格式,并命名为setup.bin。
4、一次组合
最后,kbuild调用内核自带的程序build,将vmlinux.bin和setup.bin合并为bzImage。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。