2005-04-17 06:20:36 +08:00
|
|
|
#
|
2007-10-11 17:16:45 +08:00
|
|
|
# arch/x86/boot/Makefile
|
2005-04-17 06:20:36 +08:00
|
|
|
#
|
|
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
|
|
# for more details.
|
|
|
|
#
|
|
|
|
# Copyright (C) 1994 by Linus Torvalds
|
2009-03-12 01:55:33 +08:00
|
|
|
# Changed by many, many contributors over the years.
|
2005-04-17 06:20:36 +08:00
|
|
|
#
|
|
|
|
|
|
|
|
# If you want to preset the SVGA mode, uncomment the next line and
|
|
|
|
# set SVGA_MODE to whatever number you want.
|
|
|
|
# Set it to -DSVGA_MODE=NORMAL_VGA if you just want the EGA/VGA mode.
|
|
|
|
# The number is the same as you would ordinarily press at bootup.
|
|
|
|
|
2009-03-12 01:55:33 +08:00
|
|
|
SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2009-03-12 01:55:33 +08:00
|
|
|
targets := vmlinux.bin setup.bin setup.elf bzImage
|
2009-03-13 04:43:14 +08:00
|
|
|
targets += fdimage fdimage144 fdimage288 image.iso mtools.conf
|
2008-02-04 23:48:00 +08:00
|
|
|
subdir- := compressed
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2013-10-11 08:18:13 +08:00
|
|
|
setup-y += a20.o bioscall.o cmdline.o copy.o cpu.o cpuflags.o cpucheck.o
|
2010-08-02 17:17:31 +08:00
|
|
|
setup-y += early_serial_console.o edd.o header.o main.o mca.o memory.o
|
|
|
|
setup-y += pm.o pmjump.o printf.o regs.o string.o tty.o video.o
|
|
|
|
setup-y += video-mode.o version.o
|
2008-01-30 20:32:49 +08:00
|
|
|
setup-$(CONFIG_X86_APM_BOOT) += apm.o
|
2007-07-12 03:18:56 +08:00
|
|
|
|
|
|
|
# The link order of the video-*.o modules can matter. In particular,
|
|
|
|
# video-vga.o *must* be listed first, followed by video-vesa.o.
|
|
|
|
# Hardware-specific drivers should follow in the order they should be
|
|
|
|
# probed, and video-bios.o should typically be last.
|
|
|
|
setup-y += video-vga.o
|
|
|
|
setup-y += video-vesa.o
|
|
|
|
setup-y += video-bios.o
|
2007-10-16 08:13:22 +08:00
|
|
|
|
2007-07-18 04:27:22 +08:00
|
|
|
targets += $(setup-y)
|
2008-02-04 23:48:00 +08:00
|
|
|
hostprogs-y := mkcpustr tools/build
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2012-10-12 18:19:59 +08:00
|
|
|
HOST_EXTRACFLAGS += -I$(srctree)/tools/include \
|
|
|
|
-include include/generated/autoconf.h \
|
2012-03-23 02:08:18 +08:00
|
|
|
-D__EXPORTED_HEADERS__
|
|
|
|
|
2008-02-04 23:48:00 +08:00
|
|
|
$(obj)/cpu.o: $(obj)/cpustr.h
|
|
|
|
|
|
|
|
quiet_cmd_cpustr = CPUSTR $@
|
|
|
|
cmd_cpustr = $(obj)/mkcpustr > $@
|
|
|
|
targets += cpustr.h
|
|
|
|
$(obj)/cpustr.h: $(obj)/mkcpustr FORCE
|
|
|
|
$(call if_changed,cpustr)
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2014-01-08 19:21:20 +08:00
|
|
|
KBUILD_CFLAGS := $(USERINCLUDE) $(REALMODE_CFLAGS) -D_SETUP
|
2007-10-16 03:59:31 +08:00
|
|
|
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
|
2009-06-18 07:28:09 +08:00
|
|
|
GCOV_PROFILE := n
|
2007-07-12 03:18:56 +08:00
|
|
|
|
2009-03-12 01:55:33 +08:00
|
|
|
$(obj)/bzImage: asflags-y := $(SVGA_MODE)
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
quiet_cmd_image = BUILD $@
|
2013-09-07 02:15:32 +08:00
|
|
|
cmd_image = $(obj)/tools/build $(obj)/setup.bin $(obj)/vmlinux.bin \
|
|
|
|
$(obj)/zoffset.h $@
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2009-03-12 01:55:33 +08:00
|
|
|
$(obj)/bzImage: $(obj)/setup.bin $(obj)/vmlinux.bin $(obj)/tools/build FORCE
|
2005-04-17 06:20:36 +08:00
|
|
|
$(call if_changed,image)
|
2005-06-22 08:15:15 +08:00
|
|
|
@echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2008-02-04 23:47:56 +08:00
|
|
|
OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
|
2005-04-17 06:20:36 +08:00
|
|
|
$(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
2007-07-12 03:18:56 +08:00
|
|
|
SETUP_OBJS = $(addprefix $(obj)/,$(setup-y))
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2009-05-12 05:21:12 +08:00
|
|
|
sed-voffset := -e 's/^\([0-9a-fA-F]*\) . \(_text\|_end\)$$/\#define VO_\2 0x\1/p'
|
2008-02-14 04:54:58 +08:00
|
|
|
|
2009-05-12 05:21:12 +08:00
|
|
|
quiet_cmd_voffset = VOFFSET $@
|
|
|
|
cmd_voffset = $(NM) $< | sed -n $(sed-voffset) > $@
|
2008-02-14 04:54:58 +08:00
|
|
|
|
2009-05-12 05:21:12 +08:00
|
|
|
targets += voffset.h
|
|
|
|
$(obj)/voffset.h: vmlinux FORCE
|
|
|
|
$(call if_changed,voffset)
|
|
|
|
|
x86/efi: Firmware agnostic handover entry points
The EFI handover code only works if the "bitness" of the firmware and
the kernel match, i.e. 64-bit firmware and 64-bit kernel - it is not
possible to mix the two. This goes against the tradition that a 32-bit
kernel can be loaded on a 64-bit BIOS platform without having to do
anything special in the boot loader. Linux distributions, for one thing,
regularly run only 32-bit kernels on their live media.
Despite having only one 'handover_offset' field in the kernel header,
EFI boot loaders use two separate entry points to enter the kernel based
on the architecture the boot loader was compiled for,
(1) 32-bit loader: handover_offset
(2) 64-bit loader: handover_offset + 512
Since we already have two entry points, we can leverage them to infer
the bitness of the firmware we're running on, without requiring any boot
loader modifications, by making (1) and (2) valid entry points for both
CONFIG_X86_32 and CONFIG_X86_64 kernels.
To be clear, a 32-bit boot loader will always use (1) and a 64-bit boot
loader will always use (2). It's just that, if a single kernel image
supports (1) and (2) that image can be used with both 32-bit and 64-bit
boot loaders, and hence both 32-bit and 64-bit EFI.
(1) and (2) must be 512 bytes apart at all times, but that is already
part of the boot ABI and we could never change that delta without
breaking existing boot loaders anyhow.
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
2014-01-10 23:54:31 +08:00
|
|
|
sed-zoffset := -e 's/^\([0-9a-fA-F]*\) . \(startup_32\|startup_64\|efi32_stub_entry\|efi64_stub_entry\|efi_pe_entry\|input_data\|_end\|z_.*\)$$/\#define ZO_\2 0x\1/p'
|
2009-05-12 05:21:12 +08:00
|
|
|
|
|
|
|
quiet_cmd_zoffset = ZOFFSET $@
|
|
|
|
cmd_zoffset = $(NM) $< | sed -n $(sed-zoffset) > $@
|
|
|
|
|
|
|
|
targets += zoffset.h
|
|
|
|
$(obj)/zoffset.h: $(obj)/compressed/vmlinux FORCE
|
|
|
|
$(call if_changed,zoffset)
|
2008-02-14 04:54:58 +08:00
|
|
|
|
|
|
|
|
|
|
|
AFLAGS_header.o += -I$(obj)
|
2009-05-12 05:21:12 +08:00
|
|
|
$(obj)/header.o: $(obj)/voffset.h $(obj)/zoffset.h
|
2008-02-14 04:54:58 +08:00
|
|
|
|
2007-07-12 03:18:56 +08:00
|
|
|
LDFLAGS_setup.elf := -T
|
|
|
|
$(obj)/setup.elf: $(src)/setup.ld $(SETUP_OBJS) FORCE
|
2005-04-17 06:20:36 +08:00
|
|
|
$(call if_changed,ld)
|
|
|
|
|
2007-07-12 03:18:56 +08:00
|
|
|
OBJCOPYFLAGS_setup.bin := -O binary
|
|
|
|
$(obj)/setup.bin: $(obj)/setup.elf FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
$(obj)/compressed/vmlinux: FORCE
|
2008-10-05 03:18:51 +08:00
|
|
|
$(Q)$(MAKE) $(build)=$(obj)/compressed $@
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2009-03-13 03:50:33 +08:00
|
|
|
# Set this if you want to pass append arguments to the
|
|
|
|
# bzdisk/fdimage/isoimage kernel
|
2008-02-04 23:48:00 +08:00
|
|
|
FDARGS =
|
2009-03-13 03:50:33 +08:00
|
|
|
# Set this if you want an initrd included with the
|
|
|
|
# bzdisk/fdimage/isoimage kernel
|
2006-03-26 17:36:59 +08:00
|
|
|
FDINITRD =
|
|
|
|
|
|
|
|
image_cmdline = default linux $(FDARGS) $(if $(FDINITRD),initrd=initrd.img,)
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
$(obj)/mtools.conf: $(src)/mtools.conf.in
|
|
|
|
sed -e 's|@OBJ@|$(obj)|g' < $< > $@
|
|
|
|
|
|
|
|
# This requires write access to /dev/fd0
|
2009-03-13 03:50:33 +08:00
|
|
|
bzdisk: $(obj)/bzImage $(obj)/mtools.conf
|
2005-04-17 06:20:36 +08:00
|
|
|
MTOOLSRC=$(obj)/mtools.conf mformat a: ; sync
|
|
|
|
syslinux /dev/fd0 ; sync
|
2006-03-26 17:36:59 +08:00
|
|
|
echo '$(image_cmdline)' | \
|
2005-04-17 06:20:36 +08:00
|
|
|
MTOOLSRC=$(src)/mtools.conf mcopy - a:syslinux.cfg
|
2006-03-26 17:36:59 +08:00
|
|
|
if [ -f '$(FDINITRD)' ] ; then \
|
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' a:initrd.img ; \
|
|
|
|
fi
|
2009-03-13 03:50:33 +08:00
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy $(obj)/bzImage a:linux ; sync
|
2005-04-17 06:20:36 +08:00
|
|
|
|
|
|
|
# These require being root or having syslinux 2.02 or higher installed
|
2009-03-13 03:50:33 +08:00
|
|
|
fdimage fdimage144: $(obj)/bzImage $(obj)/mtools.conf
|
2005-04-17 06:20:36 +08:00
|
|
|
dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=1440
|
|
|
|
MTOOLSRC=$(obj)/mtools.conf mformat v: ; sync
|
|
|
|
syslinux $(obj)/fdimage ; sync
|
2006-03-26 17:36:59 +08:00
|
|
|
echo '$(image_cmdline)' | \
|
2005-04-17 06:20:36 +08:00
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy - v:syslinux.cfg
|
2006-03-26 17:36:59 +08:00
|
|
|
if [ -f '$(FDINITRD)' ] ; then \
|
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' v:initrd.img ; \
|
|
|
|
fi
|
2009-03-13 03:50:33 +08:00
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy $(obj)/bzImage v:linux ; sync
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2009-03-13 03:50:33 +08:00
|
|
|
fdimage288: $(obj)/bzImage $(obj)/mtools.conf
|
2005-04-17 06:20:36 +08:00
|
|
|
dd if=/dev/zero of=$(obj)/fdimage bs=1024 count=2880
|
|
|
|
MTOOLSRC=$(obj)/mtools.conf mformat w: ; sync
|
|
|
|
syslinux $(obj)/fdimage ; sync
|
2006-03-26 17:36:59 +08:00
|
|
|
echo '$(image_cmdline)' | \
|
2005-04-17 06:20:36 +08:00
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy - w:syslinux.cfg
|
2006-03-26 17:36:59 +08:00
|
|
|
if [ -f '$(FDINITRD)' ] ; then \
|
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy '$(FDINITRD)' w:initrd.img ; \
|
|
|
|
fi
|
2009-03-13 03:50:33 +08:00
|
|
|
MTOOLSRC=$(obj)/mtools.conf mcopy $(obj)/bzImage w:linux ; sync
|
2005-04-17 06:20:36 +08:00
|
|
|
|
2009-03-13 03:50:33 +08:00
|
|
|
isoimage: $(obj)/bzImage
|
2006-03-26 17:36:59 +08:00
|
|
|
-rm -rf $(obj)/isoimage
|
|
|
|
mkdir $(obj)/isoimage
|
2006-06-26 19:58:41 +08:00
|
|
|
for i in lib lib64 share end ; do \
|
|
|
|
if [ -f /usr/$$i/syslinux/isolinux.bin ] ; then \
|
|
|
|
cp /usr/$$i/syslinux/isolinux.bin $(obj)/isoimage ; \
|
|
|
|
break ; \
|
|
|
|
fi ; \
|
|
|
|
if [ $$i = end ] ; then exit 1 ; fi ; \
|
|
|
|
done
|
2009-03-13 03:50:33 +08:00
|
|
|
cp $(obj)/bzImage $(obj)/isoimage/linux
|
2006-03-26 17:36:59 +08:00
|
|
|
echo '$(image_cmdline)' > $(obj)/isoimage/isolinux.cfg
|
|
|
|
if [ -f '$(FDINITRD)' ] ; then \
|
|
|
|
cp '$(FDINITRD)' $(obj)/isoimage/initrd.img ; \
|
|
|
|
fi
|
|
|
|
mkisofs -J -r -o $(obj)/image.iso -b isolinux.bin -c boot.cat \
|
|
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
|
|
|
$(obj)/isoimage
|
2008-09-06 12:28:27 +08:00
|
|
|
isohybrid $(obj)/image.iso 2>/dev/null || true
|
2006-03-26 17:36:59 +08:00
|
|
|
rm -rf $(obj)/isoimage
|
|
|
|
|
2009-03-13 03:50:33 +08:00
|
|
|
bzlilo: $(obj)/bzImage
|
2005-04-17 06:20:36 +08:00
|
|
|
if [ -f $(INSTALL_PATH)/vmlinuz ]; then mv $(INSTALL_PATH)/vmlinuz $(INSTALL_PATH)/vmlinuz.old; fi
|
|
|
|
if [ -f $(INSTALL_PATH)/System.map ]; then mv $(INSTALL_PATH)/System.map $(INSTALL_PATH)/System.old; fi
|
2009-03-13 03:50:33 +08:00
|
|
|
cat $(obj)/bzImage > $(INSTALL_PATH)/vmlinuz
|
2005-04-17 06:20:36 +08:00
|
|
|
cp System.map $(INSTALL_PATH)/
|
|
|
|
if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi
|
|
|
|
|
2006-01-08 09:38:39 +08:00
|
|
|
install:
|
2009-03-13 03:50:33 +08:00
|
|
|
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(obj)/bzImage \
|
|
|
|
System.map "$(INSTALL_PATH)"
|