基于x86的Linux启动代码分折析 小和作出 阅读Linux源码根目录下的Makefile 找到缺省目标all The all:target is the default when no target is given on the command line. This allow a user to issue only 'make'to build a kernel including modules Defaults vmlinux but it is usually overridden in the arch makefile all:vmlinux 找到vmlinux目标,并阅读 vmlinux image including updated kernel symbols vmlinux:$(vmlinux-lds)$(vmlinux-init)$(vmlinux-main)vmlinux.o $(kallsyms.o)FORCE ifdef CONFIG HEADERS CHECK $(Q)S(MAKE)-f $(srctree)/Makefile headers_check endif ifdef CONFIG SAMPLES (Q)S(MAKE)$(build)=samples endif (call vmlinux-modpost) (call if_changed_rule,vmlinux_) $(Q)rm -f .old_version 4口卡4回子1元电月只0 陈香兰(xlanchen@ustc.edu.cn) Linux操作系统分新
. . . . . . 基于x86的Linux启动代码分析 小结和作业 . 阅读Linux源码根目录下的Makefile 找到缺省目标all 找到vmlinux目标,并阅读 陈香兰(xlanchen@ustc.edu.cn) Linux操作系统分析
基于x86的Linux启动代码分折析 小结和件出 解释:关于 $(cal∥if_changed_rule,.vmlinux-) 1 rule_vmlinux__ #Link of vmlinux If CONFIG_KALLSYMS is set .version is already updated Generate System.map and verify that the content is consistent #Use in front of the vmlinux_version rule to silent warning with make -j2 #First command is ':to allow us to use in front of the rule define rule_vmlinux__ $(if $(CONFIG_KALLSYMS),,+s(call cmd,vmlinux_version)) $(call cmd,vmlinux) (Q)echo 'cmd_s@:s(cmd_vmlinux_)'>$((D)/.S(@F).cmd $(Q)s(ifs(s(quiet)cmd_sysma即), echo $((quiet)cmd_sysmap) System.map'&6) $(cmd_sysmap)s0 System.map; if【$s?-ne0】:then rm -f s; /bin/false; fi: (verify_kallsyms) endef 陈查兰(xlanchen(@ustc.edu.cn) Linux操作系统分斯
. . . . . . 基于x86的Linux启动代码分析 小结和作业 . . 解释:关于 $(call if changed rule, vmlinux ) ↓ rule vmlinux 陈香兰(xlanchen@ustc.edu.cn) Linux操作系统分析
基千x86的Linux名动代码分析 小结和作出 Rule to link vmlinux also used during CONFIG KALLSYMS May be overridden by arch/$(ARCH)/Makefile quiet cmd vmlinux ?LD $0 cmd_vmlinux 7=S(LD)$(LDFLAGS)$(LDFLAGS_vmlinux)-o $ -T$(vmlinux-lds)$(vmlinux-init】 --start-group s(vmlinux-main)--end-group s(filter-out s(vmlinux-lds)$(vmlinux-init)$(vmlinux-main)vmlinux.o FORCE ,$ 。链接描述文件? ●链接顺序: ●vmlinux-init 。vmlinux-main vmlinux +-$(vmlinux-init) +--init/version.o more +--<$(vmlinux-main) +--driver/built-in,o mm/built-in.o more +-kallsyms.o (see description in CONFIG_KALLSYMS section) 陈香兰(xlanchen@ustc.edu.cn) Linux操作系统分析
. . . . . . 基于x86的Linux启动代码分析 小结和作业 链接描述文件? 链接顺序: vmlinux-init vmlinux-main 陈香兰(xlanchen@ustc.edu.cn) Linux操作系统分析
基于x86的Linux名动代码分析 小结和作出 。参见“Documentation,/kbuild/makefiles.txt" ---6.7 Custom kbuild commands When kbuild is executing with KBUILD_VERBOSE=0 then only a shorthand of a command is normally displayed. To enable this behaviour for custom commands kbuild requires two variables to be set: quiet cmd_<command> what shall be echoed cmd_<command> ·the command to execute Example: # quiet_cmd_image BUILD 5@ cmd_image =(obj)/tools/build s(BUILDFLAGS)\ s(obj)/vmlinux.bin s@ targets +bzImage s(obj)/bzImage:$(obj)/vmlinux.bin s(obj)/tools/build FORCE s(call if_changed,image) Qecho 'Kernel:se is ready When updating the s(obj)/bzImage target the line: BUILD arch/1386/boot/bzImage will be displayed with "make KBUILD_VERBOSE=0". 4日卡4回24元电月只0 陈查兰(xlanchen@ustc.edu.cn) Linux操作系统分斯
. . . . . . 基于x86的Linux启动代码分析 小结和作业 . . 参见“Documentation/kbuild/makefiles.txt” 陈香兰(xlanchen@ustc.edu.cn) Linux操作系统分析
基于x86的Linux启动代码分析 小结和作业 。注意: vmlinux-init 。vmlinux-main vmlinux-init :S(head-y)$(init-y) vmlinux-main :$(core-y)$(Libs-y)s(drivers-y)$(net-y) vmlinux-all :s(vmlinux-init)$(vmlinux-main) vmlinux-dirs vmlinux-dirs :=$(patsubst /,.$(filter $/s(init-y)s(init-m)\ $(core-y)$(core-m)s(drivers-y)$(drivers-m)\ $(net-y)s(net-m)$(libs-y)$(l1bs-m)) 4口卡4回子1元电月只0 陈毒兰(xlanchen(@ustc.edu.cn】 Linux操作系统分新
. . . . . . 基于x86的Linux启动代码分析 小结和作业 注意: vmlinux-init vmlinux-main vmlinux-dirs 陈香兰(xlanchen@ustc.edu.cn) Linux操作系统分析