bzImage的来历

//linux顶层Makefile定义的默认目标
all: vmlinux

//vmlinux的依赖
vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE
    +$(call if_changed_dep,link-vmlinux)

    //vmlinux-deps的定义
    vmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS)
        export KBUILD_LDS          := arch/$(SRCARCH)/kernel/vmlinux.lds
        
        //$(patsubst 原模式, 目标模式, 文件列表)
        KBUILD_VMLINUX_OBJS := $(head-y) $(patsubst %/,%/built-in.a, $(core-y))
        KBUILD_VMLINUX_OBJS += $(addsuffix built-in.a, $(filter %/, $(libs-y)))
        KBUILD_VMLINUX_OBJS += $(patsubst %/,%/built-in.a, $(drivers-y))
        
        core-y        := init/ usr/ arch/$(SRCARCH)/
        core-y        += kernel/ certs/ mm/ fs/ ipc/ security/ crypto/ block/    
        drivers-y    := drivers/ sound/
        drivers-$(CONFIG_SAMPLES) += samples/
        drivers-$(CONFIG_NET) += net/
        drivers-y    += virt/
        libs-y        := lib/
        
        KBUILD_VMLINUX_LIBS := $(patsubst %/,%/lib.a, $(libs-y))
    
/*
    KBUILD_LDS

    The linker script with full path. Assigned by the top-level Makefile.

    KBUILD_LDS_MODULE

    The module linker script with full path. Assigned by the top-level
    Makefile and additionally by the arch Makefile.

    KBUILD_VMLINUX_OBJS

    All object files for vmlinux. They are linked to vmlinux in the same
    order as listed in KBUILD_VMLINUX_OBJS.

    KBUILD_VMLINUX_LIBS

    All .a "lib" files for vmlinux. KBUILD_VMLINUX_OBJS and
    KBUILD_VMLINUX_LIBS together specify all the object files used to
    link vmlinux.
*/

//编译Linux内核
make V=1 |& tee kernel_build.txt

//链接生成vmlinux.o的命令,内核构建生成vmlinux.o的目的是原因并是生成Module.symvers(Symbol version dump文件)其中包含内核及内部模块所导出的各种符号及其相关CRC校验值
ld -m elf_x86_64 -r 
    -o vmlinux.o 
    --whole-archive arch/x86/kernel/head_64.o 
    arch/x86/kernel/head64.o 
    arch/x86/kernel/ebda.o 
    arch/x86/kernel/platform-quirks.o 
    init/built-in.a    
    usr/built-in.a    
    arch/x86/built-in.a    
    kernel/built-in.a    
    certs/built-in.a    
    mm/built-in.a    
    fs/built-in.a    
    ipc/built-in.a    
    security/built-in.a    
    crypto/built-in.a    
    block/built-in.a    
    lib/built-in.a    
    arch/x86/lib/built-in.a
    lib/lib.a    
    arch/x86/lib/lib.a    
    drivers/built-in.a    
    sound/built-in.a    
    net/built-in.a    
    virt/built-in.a    
    arch/x86/pci/built-in.a    
    arch/x86/power/built-in.a    
    arch/x86/video/built-in.a    
    --no-whole-archive --start-group --end-group

//生成vmlinux.symvers, Module.symvers文件
scripts/mod/modpost    -o vmlinux.symvers vmlinux.o
cat vmlinux.symvers modules-only.symvers > Module.symvers

//链接生成vmlinux的命令
ld -m elf_x86_64 --emit-relocs --discard-none -z max-page-size=0x200000 --build-id=sha1 -X --orphan-handling=warn 
    -o vmlinux 
    -T ./arch/x86/kernel/vmlinux.lds 
    --whole-archive arch/x86/kernel/head_64.o 
    arch/x86/kernel/head64.o 
    arch/x86/kernel/ebda.o 
    arch/x86/kernel/platform-quirks.o 
    init/built-in.a 
    usr/built-in.a 
    arch/x86/built-in.a 
    kernel/built-in.a 
    certs/built-in.a 
    mm/built-in.a 
    fs/built-in.a 
    ipc/built-in.a 
    security/built-in.a 
    crypto/built-in.a 
    block/built-in.a 
    lib/built-in.a 
    arch/x86/lib/built-in.a 
    lib/lib.a 
    arch/x86/lib/lib.a 
    drivers/built-in.a 
    sound/built-in.a 
    net/built-in.a 
    virt/built-in.a 
    arch/x86/pci/built-in.a 
    arch/x86/power/built-in.a 
    arch/x86/video/built-in.a 
    --no-whole-archive --start-group --end-group .tmp_vmlinux.kallsyms2.o 
    .btf.vmlinux.bin.o

//生成arch/x86/boot/compressed/vmlinux.bin
//-S --strip-all                   Remove all symbol and relocation information
//-R --remove-section <name>       Remove section <name> from the output
objcopy  -R .comment -S vmlinux arch/x86/boot/compressed/vmlinux.bin

//生成内核压缩文件arch/x86/boot/compressed/vmlinux.bin.zst
{ cat arch/x86/boot/compressed/vmlinux.bin arch/x86/boot/compressed/vmlinux.relocs | zstd -22 --ultra; printf \\230\\233\\220\\003; } > arch/x86/boot/compressed/vmlinux.bin.zst

//生成piggy.S
arch/x86/boot/compressed/mkpiggy arch/x86/boot/compressed/vmlinux.bin.zst > arch/x86/boot/compressed/piggy.S

//生成piggy.o
 gcc -Wp,-MMD,arch/x86/boot/compressed/.piggy.o.d -nostdinc -isystem /usr/lib/gcc/x86_64-redhat-linux/11/include -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/compiler-version.h -include ./include/linux/kconfig.h -D__KERNEL__ -fmacro-prefix-map=./= -m64 -O2 -fno-strict-aliasing -fPIE -Wundef -DDISABLE_BRANCH_PROFILING -mcmodel=small -mno-red-zone -mno-mmx -mno-sse -ffreestanding -fshort-wchar -fno-stack-protector -Wno-address-of-packed-member -Wno-pointer-sign -fmacro-prefix-map=./= -fno-asynchronous-unwind-tables -D__DISABLE_EXPORTS -Wa,-mrelax-relocations=no -include ./include/linux/hidden.h -D__ASSEMBLY__    -c -o arch/x86/boot/compressed/piggy.o arch/x86/boot/compressed/piggy.S

//链接生成arch/x86/boot/compressed/vmlinux
ld -m elf_x86_64 --no-ld-generated-unwind-info  -pie  --no-dynamic-linker --orphan-handling=warn -T arch/x86/boot/compressed/vmlinux.lds 
    arch/x86/boot/compressed/kernel_info.o
    arch/x86/boot/compressed/head_64.o
    arch/x86/boot/compressed/misc.o
    arch/x86/boot/compressed/string.o 
    arch/x86/boot/compressed/cmdline.o 
    arch/x86/boot/compressed/error.o 
    arch/x86/boot/compressed/piggy.o 
    arch/x86/boot/compressed/cpuflags.o 
    arch/x86/boot/compressed/early_serial_console.o 
    arch/x86/boot/compressed/kaslr.o 
    arch/x86/boot/compressed/ident_map_64.o 
    arch/x86/boot/compressed/idt_64.o 
    arch/x86/boot/compressed/idt_handlers_64.o 
    arch/x86/boot/compressed/mem_encrypt.o 
    arch/x86/boot/compressed/pgtable_64.o 
    arch/x86/boot/compressed/sev.o 
    arch/x86/boot/compressed/acpi.o 
    arch/x86/boot/compressed/efi_thunk_64.o 
    drivers/firmware/efi/libstub/lib.a 
    -o arch/x86/boot/compressed/vmlinux

//生成arch/x86/boot/setup.bin
objcopy  -O binary arch/x86/boot/setup.elf arch/x86/boot/setup.bin

//生成arch/x86/boot/vmlinux.bin
objcopy  -O binary -R .note -R .comment -S arch/x86/boot/compressed/vmlinux arch/x86/boot/vmlinux.bin

//生成arch/x86/boot/bzImage
arch/x86/boot/tools/build arch/x86/boot/setup.bin arch/x86/boot/vmlinux.bin arch/x86/boot/zoffset.h arch/x86/boot/bzImage 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值