2005-04-17 02:20:36 +04:00
#
2007-10-11 13:16:45 +04:00
# arch/x86/boot/Makefile
2005-04-17 02:20:36 +04: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
#
# ROOT_DEV specifies the default root-device when making the image.
# This can be either FLOPPY, CURRENT, /dev/xxxx or empty, in which case
# the default of FLOPPY is used by 'build'.
ROOT_DEV := CURRENT
# 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.
SVGA_MODE := -DSVGA_MODE= NORMAL_VGA
# If you want the RAM disk device, define this to be the size in blocks.
#RAMDISK := -DRAMDISK=512
2007-07-11 23:18:56 +04:00
targets := vmlinux.bin setup.bin setup.elf zImage bzImage
2008-02-04 18:48:00 +03:00
subdir- := compressed
2005-04-17 02:20:36 +04:00
2008-01-30 15:32:49 +03:00
setup-y += a20.o cmdline.o copy.o cpu.o cpucheck.o edd.o
2007-07-11 23:18:56 +04:00
setup-y += header.o main.o mca.o memory.o pm.o pmjump.o
2008-04-11 01:28:10 +04:00
setup-y += printf.o string.o tty.o video.o video-mode.o version.o
2008-01-30 15:32:49 +03:00
setup-$(CONFIG_X86_APM_BOOT) += apm.o
setup-$(CONFIG_X86_VOYAGER) += voyager.o
2007-07-11 23:18:56 +04: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 04:13:22 +04:00
2007-07-18 00:27:22 +04:00
targets += $( setup-y)
2008-02-04 18:48:00 +03:00
hostprogs-y := mkcpustr tools/build
2005-04-17 02:20:36 +04:00
2008-02-04 18:48:00 +03:00
HOST_EXTRACFLAGS += $( LINUXINCLUDE)
$(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 02:20:36 +04:00
# ---------------------------------------------------------------------------
2007-07-11 23:18:56 +04:00
# How to compile the 16-bit code. Note we always compile for -march=i386,
# that way we can complain to the user if the CPU is insufficient.
2007-10-15 00:21:35 +04:00
KBUILD_CFLAGS := $( LINUXINCLUDE) -g -Os -D_SETUP -D__KERNEL__ \
2007-07-11 23:18:56 +04:00
-Wall -Wstrict-prototypes \
-march= i386 -mregparm= 3 \
-include $( srctree) /$( src) /code16gcc.h \
-fno-strict-aliasing -fomit-frame-pointer \
$( call cc-option, -ffreestanding) \
$( call cc-option, -fno-toplevel-reorder,\
$( call cc-option, -fno-unit-at-a-time) ) \
$( call cc-option, -fno-stack-protector) \
$( call cc-option, -mpreferred-stack-boundary= 2)
2008-01-30 15:32:23 +03:00
KBUILD_CFLAGS += $( call cc-option,-m32)
2007-10-15 23:59:31 +04:00
KBUILD_AFLAGS := $( KBUILD_CFLAGS) -D__ASSEMBLY__
2007-07-11 23:18:56 +04:00
2005-04-17 02:20:36 +04:00
$(obj)/zImage : IMAGE_OFFSET := 0x 1000
2007-10-17 01:50:33 +04:00
$(obj)/zImage : asflags -y := $( SVGA_MODE ) $( RAMDISK )
2005-04-17 02:20:36 +04:00
$(obj)/bzImage : IMAGE_OFFSET := 0x 100000
2007-10-17 01:50:33 +04:00
$(obj)/bzImage : ccflags -y := -D__BIG_KERNEL__
$(obj)/bzImage : asflags -y := $( SVGA_MODE ) $( RAMDISK ) -D__BIG_KERNEL__
2005-04-17 02:20:36 +04:00
$(obj)/bzImage : BUILDFLAGS := -b
quiet_cmd_image = BUILD $@
2007-07-11 23:18:56 +04:00
cmd_image = $( obj) /tools/build $( BUILDFLAGS) $( obj) /setup.bin \
2005-04-17 02:20:36 +04:00
$( obj) /vmlinux.bin $( ROOT_DEV) > $@
2007-07-11 23:18:56 +04:00
$(obj)/zImage $(obj)/bzImage : $( obj ) /setup .bin \
2005-04-17 02:20:36 +04:00
$( obj) /vmlinux.bin $( obj) /tools/build FORCE
$( call if_changed,image)
2005-06-22 04:15:15 +04:00
@echo 'Kernel: $@ is ready' ' (#' ` cat .version` ')'
2005-04-17 02:20:36 +04:00
2008-02-04 18:47:56 +03:00
OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
2005-04-17 02:20:36 +04:00
$(obj)/vmlinux.bin : $( obj ) /compressed /vmlinux FORCE
$( call if_changed,objcopy)
2007-07-11 23:18:56 +04:00
SETUP_OBJS = $( addprefix $( obj) /,$( setup-y) )
2005-04-17 02:20:36 +04:00
2008-02-13 23:54:58 +03:00
sed-offsets := -e 's/^00*/0/' \
-e 's/^\([0-9a-fA-F]*\) . \(input_data\|input_data_end\)$$/\#define \2 0x\1/p'
quiet_cmd_offsets = OFFSETS $@
cmd_offsets = $( NM) $< | sed -n $( sed-offsets) > $@
$(obj)/offsets.h : $( obj ) /compressed /vmlinux FORCE
$( call if_changed,offsets)
targets += offsets.h
AFLAGS_header.o += -I$( obj)
$(obj)/header.o : $( obj ) /offsets .h
2007-07-11 23:18:56 +04:00
LDFLAGS_setup.elf := -T
$(obj)/setup.elf : $( src ) /setup .ld $( SETUP_OBJS ) FORCE
2005-04-17 02:20:36 +04:00
$( call if_changed,ld)
2007-07-11 23:18:56 +04:00
OBJCOPYFLAGS_setup.bin := -O binary
$(obj)/setup.bin : $( obj ) /setup .elf FORCE
$( call if_changed,objcopy)
2005-04-17 02:20:36 +04:00
$(obj)/compressed/vmlinux : FORCE
$( Q) $( MAKE) $( build) = $( obj) /compressed IMAGE_OFFSET = $( IMAGE_OFFSET) $@
2006-03-26 13:36:59 +04:00
# Set this if you want to pass append arguments to the zdisk/fdimage/isoimage kernel
2008-02-04 18:48:00 +03:00
FDARGS =
2006-03-26 13:36:59 +04:00
# Set this if you want an initrd included with the zdisk/fdimage/isoimage kernel
FDINITRD =
image_cmdline = default linux $( FDARGS) $( if $( FDINITRD) ,initrd= initrd.img,)
2005-04-17 02:20:36 +04:00
$(obj)/mtools.conf : $( src ) /mtools .conf .in
sed -e 's|@OBJ@|$(obj)|g' < $< > $@
# This requires write access to /dev/fd0
zdisk : $( BOOTIMAGE ) $( obj ) /mtools .conf
MTOOLSRC = $( obj) /mtools.conf mformat a: ; sync
syslinux /dev/fd0 ; sync
2006-03-26 13:36:59 +04:00
echo '$(image_cmdline)' | \
2005-04-17 02:20:36 +04:00
MTOOLSRC = $( src) /mtools.conf mcopy - a:syslinux.cfg
2006-03-26 13:36:59 +04:00
if [ -f '$(FDINITRD)' ] ; then \
MTOOLSRC = $( obj) /mtools.conf mcopy '$(FDINITRD)' a:initrd.img ; \
fi
2005-04-17 02:20:36 +04:00
MTOOLSRC = $( obj) /mtools.conf mcopy $( BOOTIMAGE) a:linux ; sync
# These require being root or having syslinux 2.02 or higher installed
fdimage fdimage144 : $( BOOTIMAGE ) $( obj ) /mtools .conf
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 13:36:59 +04:00
echo '$(image_cmdline)' | \
2005-04-17 02:20:36 +04:00
MTOOLSRC = $( obj) /mtools.conf mcopy - v:syslinux.cfg
2006-03-26 13:36:59 +04:00
if [ -f '$(FDINITRD)' ] ; then \
MTOOLSRC = $( obj) /mtools.conf mcopy '$(FDINITRD)' v:initrd.img ; \
fi
2005-04-17 02:20:36 +04:00
MTOOLSRC = $( obj) /mtools.conf mcopy $( BOOTIMAGE) v:linux ; sync
fdimage288 : $( BOOTIMAGE ) $( obj ) /mtools .conf
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 13:36:59 +04:00
echo '$(image_cmdline)' | \
2005-04-17 02:20:36 +04:00
MTOOLSRC = $( obj) /mtools.conf mcopy - w:syslinux.cfg
2006-03-26 13:36:59 +04:00
if [ -f '$(FDINITRD)' ] ; then \
MTOOLSRC = $( obj) /mtools.conf mcopy '$(FDINITRD)' w:initrd.img ; \
fi
2005-04-17 02:20:36 +04:00
MTOOLSRC = $( obj) /mtools.conf mcopy $( BOOTIMAGE) w:linux ; sync
2006-03-26 13:36:59 +04:00
isoimage : $( BOOTIMAGE )
-rm -rf $( obj) /isoimage
mkdir $( obj) /isoimage
2006-06-26 15:58:41 +04: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
2006-03-26 13:36:59 +04:00
cp $( BOOTIMAGE) $( obj) /isoimage/linux
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
rm -rf $( obj) /isoimage
2005-04-17 02:20:36 +04:00
zlilo : $( BOOTIMAGE )
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
cat $( BOOTIMAGE) > $( INSTALL_PATH) /vmlinuz
cp System.map $( INSTALL_PATH) /
if [ -x /sbin/lilo ] ; then /sbin/lilo; else /etc/lilo/install; fi
2006-01-08 04:38:39 +03:00
install :
2006-01-11 08:09:19 +03:00
sh $( srctree) /$( src) /install.sh $( KERNELRELEASE) $( BOOTIMAGE) System.map " $( INSTALL_PATH) "