xref: /OK3568_Linux_fs/kernel/arch/x86/Makefile (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun# Unified Makefile for i386 and x86_64
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun# select defconfig based on actual architecture
5*4882a593Smuzhiyunifeq ($(ARCH),x86)
6*4882a593Smuzhiyun  ifeq ($(shell uname -m),x86_64)
7*4882a593Smuzhiyun        KBUILD_DEFCONFIG := x86_64_defconfig
8*4882a593Smuzhiyun  else
9*4882a593Smuzhiyun        KBUILD_DEFCONFIG := i386_defconfig
10*4882a593Smuzhiyun  endif
11*4882a593Smuzhiyunelse
12*4882a593Smuzhiyun        KBUILD_DEFCONFIG := $(ARCH)_defconfig
13*4882a593Smuzhiyunendif
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun# For gcc stack alignment is specified with -mpreferred-stack-boundary,
16*4882a593Smuzhiyun# clang has the option -mstack-alignment for that purpose.
17*4882a593Smuzhiyunifneq ($(call cc-option, -mpreferred-stack-boundary=4),)
18*4882a593Smuzhiyun      cc_stack_align4 := -mpreferred-stack-boundary=2
19*4882a593Smuzhiyun      cc_stack_align8 := -mpreferred-stack-boundary=3
20*4882a593Smuzhiyunelse ifneq ($(call cc-option, -mstack-alignment=16),)
21*4882a593Smuzhiyun      cc_stack_align4 := -mstack-alignment=4
22*4882a593Smuzhiyun      cc_stack_align8 := -mstack-alignment=8
23*4882a593Smuzhiyunendif
24*4882a593Smuzhiyun
25*4882a593Smuzhiyun# How to compile the 16-bit code.  Note we always compile for -march=i386;
26*4882a593Smuzhiyun# that way we can complain to the user if the CPU is insufficient.
27*4882a593Smuzhiyun#
28*4882a593Smuzhiyun# The -m16 option is supported by GCC >= 4.9 and clang >= 3.5. For
29*4882a593Smuzhiyun# older versions of GCC, include an *assembly* header to make sure that
30*4882a593Smuzhiyun# gcc doesn't play any games behind our back.
31*4882a593SmuzhiyunCODE16GCC_CFLAGS := -m32 -Wa,$(srctree)/arch/x86/boot/code16gcc.h
32*4882a593SmuzhiyunM16_CFLAGS	 := $(call cc-option, -m16, $(CODE16GCC_CFLAGS))
33*4882a593Smuzhiyun
34*4882a593SmuzhiyunREALMODE_CFLAGS	:= $(M16_CFLAGS) -g -Os -DDISABLE_BRANCH_PROFILING -D__DISABLE_EXPORTS \
35*4882a593Smuzhiyun		   -Wall -Wstrict-prototypes -march=i386 -mregparm=3 \
36*4882a593Smuzhiyun		   -fno-strict-aliasing -fomit-frame-pointer -fno-pic \
37*4882a593Smuzhiyun		   -mno-mmx -mno-sse $(call cc-option,-fcf-protection=none)
38*4882a593Smuzhiyun
39*4882a593SmuzhiyunREALMODE_CFLAGS += -ffreestanding
40*4882a593SmuzhiyunREALMODE_CFLAGS += -fno-stack-protector
41*4882a593SmuzhiyunREALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), -Wno-address-of-packed-member)
42*4882a593SmuzhiyunREALMODE_CFLAGS += $(call __cc-option, $(CC), $(REALMODE_CFLAGS), $(cc_stack_align4))
43*4882a593SmuzhiyunREALMODE_CFLAGS += $(CLANG_FLAGS)
44*4882a593Smuzhiyunexport REALMODE_CFLAGS
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun# BITS is used as extension for files which are available in a 32 bit
47*4882a593Smuzhiyun# and a 64 bit version to simplify shared Makefiles.
48*4882a593Smuzhiyun# e.g.: obj-y += foo_$(BITS).o
49*4882a593Smuzhiyunexport BITS
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun#
52*4882a593Smuzhiyun# Prevent GCC from generating any FP code by mistake.
53*4882a593Smuzhiyun#
54*4882a593Smuzhiyun# This must happen before we try the -mpreferred-stack-boundary, see:
55*4882a593Smuzhiyun#
56*4882a593Smuzhiyun#    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
57*4882a593Smuzhiyun#
58*4882a593SmuzhiyunKBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow
59*4882a593SmuzhiyunKBUILD_CFLAGS += $(call cc-option,-mno-avx,)
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun# Intel CET isn't enabled in the kernel
62*4882a593SmuzhiyunKBUILD_CFLAGS += $(call cc-option,-fcf-protection=none)
63*4882a593Smuzhiyun
64*4882a593Smuzhiyunifeq ($(CONFIG_X86_32),y)
65*4882a593Smuzhiyun        BITS := 32
66*4882a593Smuzhiyun        UTS_MACHINE := i386
67*4882a593Smuzhiyun        CHECKFLAGS += -D__i386__
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun        biarch := $(call cc-option,-m32)
70*4882a593Smuzhiyun        KBUILD_AFLAGS += $(biarch)
71*4882a593Smuzhiyun        KBUILD_CFLAGS += $(biarch)
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun        KBUILD_CFLAGS += -msoft-float -mregparm=3 -freg-struct-return
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun        # Never want PIC in a 32-bit kernel, prevent breakage with GCC built
76*4882a593Smuzhiyun        # with nonstandard options
77*4882a593Smuzhiyun        KBUILD_CFLAGS += -fno-pic
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun        # Align the stack to the register width instead of using the default
80*4882a593Smuzhiyun        # alignment of 16 bytes. This reduces stack usage and the number of
81*4882a593Smuzhiyun        # alignment instructions.
82*4882a593Smuzhiyun        KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align4))
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun        # CPU-specific tuning. Anything which can be shared with UML should go here.
85*4882a593Smuzhiyun        include arch/x86/Makefile_32.cpu
86*4882a593Smuzhiyun        KBUILD_CFLAGS += $(cflags-y)
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun        # temporary until string.h is fixed
89*4882a593Smuzhiyun        KBUILD_CFLAGS += -ffreestanding
90*4882a593Smuzhiyunelse
91*4882a593Smuzhiyun        BITS := 64
92*4882a593Smuzhiyun        UTS_MACHINE := x86_64
93*4882a593Smuzhiyun        CHECKFLAGS += -D__x86_64__
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun        biarch := -m64
96*4882a593Smuzhiyun        KBUILD_AFLAGS += -m64
97*4882a593Smuzhiyun        KBUILD_CFLAGS += -m64
98*4882a593Smuzhiyun
99*4882a593Smuzhiyun        # Align jump targets to 1 byte, not the default 16 bytes:
100*4882a593Smuzhiyun        KBUILD_CFLAGS += $(call cc-option,-falign-jumps=1)
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun        # Pack loops tightly as well:
103*4882a593Smuzhiyun        KBUILD_CFLAGS += $(call cc-option,-falign-loops=1)
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun        # Don't autogenerate traditional x87 instructions
106*4882a593Smuzhiyun        KBUILD_CFLAGS += $(call cc-option,-mno-80387)
107*4882a593Smuzhiyun        KBUILD_CFLAGS += $(call cc-option,-mno-fp-ret-in-387)
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun        # By default gcc and clang use a stack alignment of 16 bytes for x86.
110*4882a593Smuzhiyun        # However the standard kernel entry on x86-64 leaves the stack on an
111*4882a593Smuzhiyun        # 8-byte boundary. If the compiler isn't informed about the actual
112*4882a593Smuzhiyun        # alignment it will generate extra alignment instructions for the
113*4882a593Smuzhiyun        # default alignment which keep the stack *mis*aligned.
114*4882a593Smuzhiyun        # Furthermore an alignment to the register width reduces stack usage
115*4882a593Smuzhiyun        # and the number of alignment instructions.
116*4882a593Smuzhiyun        KBUILD_CFLAGS += $(call cc-option,$(cc_stack_align8))
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun	# Use -mskip-rax-setup if supported.
119*4882a593Smuzhiyun	KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup)
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun        # FIXME - should be integrated in Makefile.cpu (Makefile_32.cpu)
122*4882a593Smuzhiyun        cflags-$(CONFIG_MK8) += $(call cc-option,-march=k8)
123*4882a593Smuzhiyun        cflags-$(CONFIG_MPSC) += $(call cc-option,-march=nocona)
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun        cflags-$(CONFIG_MCORE2) += \
126*4882a593Smuzhiyun                $(call cc-option,-march=core2,$(call cc-option,-mtune=generic))
127*4882a593Smuzhiyun	cflags-$(CONFIG_MATOM) += $(call cc-option,-march=atom) \
128*4882a593Smuzhiyun		$(call cc-option,-mtune=atom,$(call cc-option,-mtune=generic))
129*4882a593Smuzhiyun        cflags-$(CONFIG_GENERIC_CPU) += $(call cc-option,-mtune=generic)
130*4882a593Smuzhiyun        KBUILD_CFLAGS += $(cflags-y)
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun        KBUILD_CFLAGS += -mno-red-zone
133*4882a593Smuzhiyun        KBUILD_CFLAGS += -mcmodel=kernel
134*4882a593Smuzhiyunendif
135*4882a593Smuzhiyun
136*4882a593Smuzhiyunifdef CONFIG_X86_X32
137*4882a593Smuzhiyun	x32_ld_ok := $(call try-run,\
138*4882a593Smuzhiyun			/bin/echo -e '1: .quad 1b' | \
139*4882a593Smuzhiyun			$(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \
140*4882a593Smuzhiyun			$(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMPO" && \
141*4882a593Smuzhiyun			$(LD) -m elf32_x86_64 "$$TMPO" -o "$$TMP",y,n)
142*4882a593Smuzhiyun        ifeq ($(x32_ld_ok),y)
143*4882a593Smuzhiyun                CONFIG_X86_X32_ABI := y
144*4882a593Smuzhiyun                KBUILD_AFLAGS += -DCONFIG_X86_X32_ABI
145*4882a593Smuzhiyun                KBUILD_CFLAGS += -DCONFIG_X86_X32_ABI
146*4882a593Smuzhiyun        else
147*4882a593Smuzhiyun                $(warning CONFIG_X86_X32 enabled but no binutils support)
148*4882a593Smuzhiyun        endif
149*4882a593Smuzhiyunendif
150*4882a593Smuzhiyunexport CONFIG_X86_X32_ABI
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun#
153*4882a593Smuzhiyun# If the function graph tracer is used with mcount instead of fentry,
154*4882a593Smuzhiyun# '-maccumulate-outgoing-args' is needed to prevent a GCC bug
155*4882a593Smuzhiyun# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42109)
156*4882a593Smuzhiyun#
157*4882a593Smuzhiyunifdef CONFIG_FUNCTION_GRAPH_TRACER
158*4882a593Smuzhiyun  ifndef CONFIG_HAVE_FENTRY
159*4882a593Smuzhiyun	ACCUMULATE_OUTGOING_ARGS := 1
160*4882a593Smuzhiyun  else
161*4882a593Smuzhiyun    ifeq ($(call cc-option-yn, -mfentry), n)
162*4882a593Smuzhiyun	ACCUMULATE_OUTGOING_ARGS := 1
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun	# GCC ignores '-maccumulate-outgoing-args' when used with '-Os'.
165*4882a593Smuzhiyun	# If '-Os' is enabled, disable it and print a warning.
166*4882a593Smuzhiyun        ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
167*4882a593Smuzhiyun          undefine CONFIG_CC_OPTIMIZE_FOR_SIZE
168*4882a593Smuzhiyun          $(warning Disabling CONFIG_CC_OPTIMIZE_FOR_SIZE.  Your compiler does not have -mfentry so you cannot optimize for size with CONFIG_FUNCTION_GRAPH_TRACER.)
169*4882a593Smuzhiyun        endif
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun    endif
172*4882a593Smuzhiyun  endif
173*4882a593Smuzhiyunendif
174*4882a593Smuzhiyun
175*4882a593Smuzhiyunifeq ($(ACCUMULATE_OUTGOING_ARGS), 1)
176*4882a593Smuzhiyun	# This compiler flag is not supported by Clang:
177*4882a593Smuzhiyun	KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,)
178*4882a593Smuzhiyunendif
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun# Workaround for a gcc prelease that unfortunately was shipped in a suse release
181*4882a593SmuzhiyunKBUILD_CFLAGS += -Wno-sign-compare
182*4882a593Smuzhiyun#
183*4882a593SmuzhiyunKBUILD_CFLAGS += -fno-asynchronous-unwind-tables
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun# Avoid indirect branches in kernel to deal with Spectre
186*4882a593Smuzhiyunifdef CONFIG_RETPOLINE
187*4882a593Smuzhiyun  KBUILD_CFLAGS += $(RETPOLINE_CFLAGS)
188*4882a593Smuzhiyun  # Additionally, avoid generating expensive indirect jumps which
189*4882a593Smuzhiyun  # are subject to retpolines for small number of switch cases.
190*4882a593Smuzhiyun  # clang turns off jump table generation by default when under
191*4882a593Smuzhiyun  # retpoline builds, however, gcc does not for x86. This has
192*4882a593Smuzhiyun  # only been fixed starting from gcc stable version 8.4.0 and
193*4882a593Smuzhiyun  # onwards, but not for older ones. See gcc bug #86952.
194*4882a593Smuzhiyun  ifndef CONFIG_CC_IS_CLANG
195*4882a593Smuzhiyun    KBUILD_CFLAGS += $(call cc-option,-fno-jump-tables)
196*4882a593Smuzhiyun  endif
197*4882a593Smuzhiyunendif
198*4882a593Smuzhiyun
199*4882a593Smuzhiyunifdef CONFIG_SLS
200*4882a593Smuzhiyun  KBUILD_CFLAGS += -mharden-sls=all
201*4882a593Smuzhiyunendif
202*4882a593Smuzhiyun
203*4882a593SmuzhiyunKBUILD_LDFLAGS += -m elf_$(UTS_MACHINE)
204*4882a593Smuzhiyun
205*4882a593Smuzhiyunifdef CONFIG_LTO_CLANG
206*4882a593Smuzhiyunifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0)
207*4882a593SmuzhiyunKBUILD_LDFLAGS	+= -plugin-opt=-stack-alignment=$(if $(CONFIG_X86_32),4,8)
208*4882a593Smuzhiyunendif
209*4882a593Smuzhiyunendif
210*4882a593Smuzhiyun
211*4882a593Smuzhiyunifdef CONFIG_X86_NEED_RELOCS
212*4882a593SmuzhiyunLDFLAGS_vmlinux := --emit-relocs --discard-none
213*4882a593Smuzhiyunelse
214*4882a593SmuzhiyunLDFLAGS_vmlinux :=
215*4882a593Smuzhiyunendif
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun#
218*4882a593Smuzhiyun# The 64-bit kernel must be aligned to 2MB.  Pass -z max-page-size=0x200000 to
219*4882a593Smuzhiyun# the linker to force 2MB page size regardless of the default page size used
220*4882a593Smuzhiyun# by the linker.
221*4882a593Smuzhiyun#
222*4882a593Smuzhiyunifdef CONFIG_X86_64
223*4882a593SmuzhiyunLDFLAGS_vmlinux += -z max-page-size=0x200000
224*4882a593Smuzhiyunendif
225*4882a593Smuzhiyun
226*4882a593Smuzhiyun
227*4882a593Smuzhiyunarchscripts: scripts_basic
228*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=arch/x86/tools relocs
229*4882a593Smuzhiyun
230*4882a593Smuzhiyun###
231*4882a593Smuzhiyun# Syscall table generation
232*4882a593Smuzhiyun
233*4882a593Smuzhiyunarchheaders:
234*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=arch/x86/entry/syscalls all
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun###
237*4882a593Smuzhiyun# Kernel objects
238*4882a593Smuzhiyun
239*4882a593Smuzhiyunhead-y := arch/x86/kernel/head_$(BITS).o
240*4882a593Smuzhiyunhead-y += arch/x86/kernel/head$(BITS).o
241*4882a593Smuzhiyunhead-y += arch/x86/kernel/ebda.o
242*4882a593Smuzhiyunhead-y += arch/x86/kernel/platform-quirks.o
243*4882a593Smuzhiyun
244*4882a593Smuzhiyunlibs-y  += arch/x86/lib/
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun# See arch/x86/Kbuild for content of core part of the kernel
247*4882a593Smuzhiyuncore-y += arch/x86/
248*4882a593Smuzhiyun
249*4882a593Smuzhiyun# drivers-y are linked after core-y
250*4882a593Smuzhiyundrivers-$(CONFIG_MATH_EMULATION) += arch/x86/math-emu/
251*4882a593Smuzhiyundrivers-$(CONFIG_PCI)            += arch/x86/pci/
252*4882a593Smuzhiyun
253*4882a593Smuzhiyun# must be linked after kernel/
254*4882a593Smuzhiyundrivers-$(CONFIG_OPROFILE) += arch/x86/oprofile/
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun# suspend and hibernation support
257*4882a593Smuzhiyundrivers-$(CONFIG_PM) += arch/x86/power/
258*4882a593Smuzhiyun
259*4882a593Smuzhiyundrivers-$(CONFIG_FB) += arch/x86/video/
260*4882a593Smuzhiyun
261*4882a593Smuzhiyun####
262*4882a593Smuzhiyun# boot loader support. Several targets are kept for legacy purposes
263*4882a593Smuzhiyun
264*4882a593Smuzhiyunboot := arch/x86/boot
265*4882a593Smuzhiyun
266*4882a593SmuzhiyunBOOT_TARGETS = bzdisk fdimage fdimage144 fdimage288 isoimage
267*4882a593Smuzhiyun
268*4882a593SmuzhiyunPHONY += bzImage $(BOOT_TARGETS)
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun# Don't compile Image in mixed build with "all" target
271*4882a593Smuzhiyunifndef KBUILD_MIXED_TREE
272*4882a593Smuzhiyun# Default kernel to build
273*4882a593Smuzhiyunall: bzImage
274*4882a593Smuzhiyunendif
275*4882a593Smuzhiyun
276*4882a593Smuzhiyun# KBUILD_IMAGE specify target image being built
277*4882a593SmuzhiyunKBUILD_IMAGE := $(boot)/bzImage
278*4882a593Smuzhiyun
279*4882a593SmuzhiyunbzImage: vmlinux
280*4882a593Smuzhiyunifeq ($(CONFIG_X86_DECODER_SELFTEST),y)
281*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=arch/x86/tools posttest
282*4882a593Smuzhiyunendif
283*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(boot) $(KBUILD_IMAGE)
284*4882a593Smuzhiyun	$(Q)mkdir -p $(objtree)/arch/$(UTS_MACHINE)/boot
285*4882a593Smuzhiyun	$(Q)ln -fsn ../../x86/boot/bzImage $(objtree)/arch/$(UTS_MACHINE)/boot/$@
286*4882a593Smuzhiyun
287*4882a593Smuzhiyun$(BOOT_TARGETS): vmlinux
288*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(boot) $@
289*4882a593Smuzhiyun
290*4882a593SmuzhiyunPHONY += install bzlilo
291*4882a593Smuzhiyuninstall bzlilo:
292*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=$(boot) $@
293*4882a593Smuzhiyun
294*4882a593SmuzhiyunPHONY += vdso_install
295*4882a593Smuzhiyunvdso_install:
296*4882a593Smuzhiyun	$(Q)$(MAKE) $(build)=arch/x86/entry/vdso $@
297*4882a593Smuzhiyun
298*4882a593Smuzhiyunarchprepare: checkbin
299*4882a593Smuzhiyuncheckbin:
300*4882a593Smuzhiyunifndef CONFIG_CC_HAS_ASM_GOTO
301*4882a593Smuzhiyun	@echo Compiler lacks asm-goto support.
302*4882a593Smuzhiyun	@exit 1
303*4882a593Smuzhiyunendif
304*4882a593Smuzhiyunifdef CONFIG_RETPOLINE
305*4882a593Smuzhiyunifeq ($(RETPOLINE_CFLAGS),)
306*4882a593Smuzhiyun	@echo "You are building kernel with non-retpoline compiler." >&2
307*4882a593Smuzhiyun	@echo "Please update your compiler." >&2
308*4882a593Smuzhiyun	@false
309*4882a593Smuzhiyunendif
310*4882a593Smuzhiyunendif
311*4882a593Smuzhiyun
312*4882a593Smuzhiyunarchclean:
313*4882a593Smuzhiyun	$(Q)rm -rf $(objtree)/arch/i386
314*4882a593Smuzhiyun	$(Q)rm -rf $(objtree)/arch/x86_64
315*4882a593Smuzhiyun	$(Q)$(MAKE) $(clean)=$(boot)
316*4882a593Smuzhiyun	$(Q)$(MAKE) $(clean)=arch/x86/tools
317*4882a593Smuzhiyun
318*4882a593Smuzhiyundefine archhelp
319*4882a593Smuzhiyun  echo  '* bzImage      - Compressed kernel image (arch/x86/boot/bzImage)'
320*4882a593Smuzhiyun  echo  '  install      - Install kernel using'
321*4882a593Smuzhiyun  echo  '                  (your) ~/bin/$(INSTALLKERNEL) or'
322*4882a593Smuzhiyun  echo  '                  (distribution) /sbin/$(INSTALLKERNEL) or'
323*4882a593Smuzhiyun  echo  '                  install to $$(INSTALL_PATH) and run lilo'
324*4882a593Smuzhiyun  echo  '  fdimage      - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)'
325*4882a593Smuzhiyun  echo  '  fdimage144   - Create 1.4MB boot floppy image (arch/x86/boot/fdimage)'
326*4882a593Smuzhiyun  echo  '  fdimage288   - Create 2.8MB boot floppy image (arch/x86/boot/fdimage)'
327*4882a593Smuzhiyun  echo  '  isoimage     - Create a boot CD-ROM image (arch/x86/boot/image.iso)'
328*4882a593Smuzhiyun  echo  '                  bzdisk/fdimage*/isoimage also accept:'
329*4882a593Smuzhiyun  echo  '                  FDARGS="..."  arguments for the booted kernel'
330*4882a593Smuzhiyun  echo  '                  FDINITRD=file initrd for the booted kernel'
331*4882a593Smuzhiyunendef
332