Linux kernel 分析之十五:kbuild系统-make menuconfig

理解了make bzImage的过程,理解了整个kbuild的结构和运行机制,make menuconfig的过程就很容易理解了。
先看/usr/src/linux/Makefile。可以找到:452 %config: scripts_basic outputmakefile FORCE453         $(Q)$(MAKE) $(build)=scripts/kconfig $@
%config是通配符,所有以config结尾的目标(menuconfig xconfig gconfig)都采用这个规则。所以make menuconfig在进行一些准备工作如make scripts_basic等操作后,最终会运行
$(Q)$(MAKE) $(build)=scripts/kconfig menuconfig其中$@指要生成的目标文件,这里指伪目标menuconfig。接下去调用的是: scripts/kconfig/Makefile013 menuconfig: $(obj)/mconf
014         $(Q)$(MAKE) $(build)=scripts/lxdialog015         $< arch/$(ARCH)/Kconfig
082 hostprogs-y     := conf mconf qconf gconf kxgettext083 conf-objs       := conf.o  zconf.tab.o084 mconf-objs      := mconf.o zconf.tab.o085 kxgettext-objs  := kxgettext.o zconf.tab.o
这里可以看到最终执行的是scripts/kconfig/mconf arch/i386/Kconfig其中$<代表“起因”,也就是scripts/kconfig/mconf
该程序并不属于内核,而是一个用户态程序。Linux 源代码中这一类程序还有很多。如在scripts/kconfig/目录下就有mconf,gconf,qconf等等。它们用来执行内核的配置工作。
又如在arch/i386/boot/tools/中有个可执行程序叫build,它用来把bootsect(引导扇区) ,setup(辅助程序)和vmlinux.bin(压缩内核)拼接成bzImage。
scripts/kconfig/mconf这个程序采用了ncurses类库。这是一个在文本界面下进行画图操作类库。由于要适应不同平台,源代码中的mconf不是预编译好的elf可执行文件,而是在使用时才去编译生成。这使用户在运行make menuconfig时要依赖ncurses的开发包。
arch/i386/Kconfig,准确地说是各个Kconfig文件记录了各个内核配置的选项。我们在make menuconfig或者make xconfig时显示的菜单项和帮助信息,都是从这个文件中读出来的。
到此,我们对平时使用的make menuconfig命令的执行流程应该有了一个大概的印象了吧

你可能感兴趣的:(Linux kernel 分析之十五:kbuild系统-make menuconfig)