cnhnln 发表于 2003-12-19 21:43:18

2.6内核的vesa镇缓冲无法用-O3参数编译

fedora core 1+kernel 2.6.0
2.6内核的vesa镇缓冲无法用-O3参数编译,用-Os可以
如果在grub.conf里添加vga=xxx参数,在刚加载内核的时候(此时屏幕还无任何显示)就会自动重起,不带vga=xxx参数就一切正常(同一个内核).
以前2.4的时候用-O3时没问题的.

对我使用来说,个人觉得2.6的内核问题不少,可能是太新了吧 :mrgreen:
#
# Graphics support
#
CONFIG_FB=y
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_IMSTT is not set
# CONFIG_FB_VGA16 is not set
CONFIG_FB_VESA=y
CONFIG_VIDEO_SELECT=y
# CONFIG_FB_HGA is not set
# CONFIG_FB_RIVA is not set
# CONFIG_FB_I810 is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_RADEON is not set
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_SIS is not set
# CONFIG_FB_NEOMAGIC is not set
# CONFIG_FB_3DFX is not set
# CONFIG_FB_VOODOO1 is not set
# CONFIG_FB_TRIDENT is not set
# CONFIG_FB_VIRTUAL is not set

#
# Console display driver support
#
CONFIG_VGA_CONSOLE=y
CONFIG_MDA_CONSOLE=m
CONFIG_DUMMY_CONSOLE=y
CONFIG_FRAMEBUFFER_CONSOLE=y
CONFIG_PCI_CONSOLE=y
# CONFIG_FONTS is not set
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y

#
# Logo configuration
#
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y

cnhnln 发表于 2003-12-19 23:32:06

在我的机器上2.4的-O3确实没问题
2.6.0的makefile,改了3处,就是把所有的-O2改成了-O3
# SHELL used by kbuild
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
          else if [ -x /bin/bash ]; then echo /bin/bash; \
          else echo sh; fi ; fi)

HOSTCC        = gcc
HOSTCXX        = g++
HOSTCFLAGS        = -Wall -Wstrict-prototypes -O3 -fomit-frame-pointer
HOSTCXXFLAGS        = -O3

#         Decide whether to build built-in, modular, or both.
#        Normally, just do built-in.

KBUILD_MODULES :=
KBUILD_BUILTIN := 1

#        If we have only "make modules", don't compile built-in objects.
#        When we're building modules with modversions, we need to consider
#        the built-in objects during the descend as well, in order to
#        make sure the checksums are uptodate before we record them.

ifeq ($(MAKECMDGOALS),modules)
KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
endif

#        If we have "make <whatever> modules", compile modules
#        in addition to whatever we do anyway.
#        Just "make" or "make all" shall build modules as well

ifneq ($(filter all modules,$(MAKECMDGOALS)),)
KBUILD_MODULES := 1
endif

ifeq ($(MAKECMDGOALS),)
KBUILD_MODULES := 1
endif

export KBUILD_MODULES KBUILD_BUILTIN KBUILD_VERBOSE
export KBUILD_CHECKSRC KBUILD_SRC

# Beautify output
# ---------------------------------------------------------------------------
#
# Normally, we echo the whole command before executing it. By making
# that echo $($(quiet)$(cmd)), we now have the possibility to set
# $(quiet) to choose other forms of output instead, e.g.
#
#         quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
#         cmd_cc_o_c       = $(CC) $(c_flags) -c -o $@ $<
#
# If $(quiet) is empty, the whole command will be printed.
# If it is set to "quiet_", only the short version will be printed.
# If it is set to "silent_", nothing wil be printed at all, since
# the variable $(silent_cmd_cc_o_c) doesn't exist.
#
# A simple variant is to prefix commands with $(Q) - that's usefull
# for commands that shall be hidden in non-verbose mode.
#
#        $(Q)ln $@ :<
#
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
# If KBUILD_VERBOSE equals 1 then the above command is displayed.

ifeq ($(KBUILD_VERBOSE),1)
quiet =
Q =
else
quiet=quiet_
Q = @
endif

# If the user is running make -s (silent mode), suppress echoing of
# commands

ifneq ($(findstring s,$(MAKEFLAGS)),)
quiet=silent_
endif

check_gcc = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)

export quiet Q KBUILD_VERBOSE check_gcc

# Look for make include files relative to root of kernel src
MAKEFLAGS += --include-dir=$(srctree)

# For maximum performance (+ possibly random breakage, uncomment
# the following)

#MAKEFLAGS += -rR

# Make variables (CC, etc...)

AS                = $(CROSS_COMPILE)as
LD                = $(CROSS_COMPILE)ld
CC                = $(CROSS_COMPILE)gcc
CPP                = $(CC) -E
AR                = $(CROSS_COMPILE)ar
NM                = $(CROSS_COMPILE)nm
STRIP                = $(CROSS_COMPILE)strip
OBJCOPY                = $(CROSS_COMPILE)objcopy
OBJDUMP                = $(CROSS_COMPILE)objdump
AWK                = awk
RPM                 := $(shell if [ -x "/usr/bin/rpmbuild" ]; then echo rpmbuild; \
                          else echo rpm; fi)
GENKSYMS        = scripts/genksyms/genksyms
DEPMOD                = /sbin/depmod
KALLSYMS        = scripts/kallsyms
PERL                = perl
CHECK                = sparse
MODFLAGS        = -DMODULE
CFLAGS_MODULE   = $(MODFLAGS)
AFLAGS_MODULE   = $(MODFLAGS)
LDFLAGS_MODULE= -r
CFLAGS_KERNEL        =
AFLAGS_KERNEL        =

NOSTDINC_FLAGS= -nostdinc -iwithprefix include

CPPFLAGS      := -D__KERNEL__ -Iinclude \
                   $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include)

CFLAGS                 := -Wall -Wstrict-prototypes -Wno-trigraphs -O3 \
                     -fno-strict-aliasing -fno-common
AFLAGS                := -D__ASSEMBLY__

tikebaby 发表于 2003-12-21 00:13:34

如果在grub.conf里添加vga=xxx参数,在刚加载内核的时候(此时屏幕还无任何显示)就会自动重起,不带vga=xxx参数就一切正常(同一个内核)
我也遇到了,真奇怪!!

tikebaby 发表于 2003-12-23 12:23:23

知道了,只要把Frame Buffer编译进内核,不要编译成模块就解决了.

cnhnln 发表于 2003-12-23 14:23:42

我就是编译进内核的,一样无法起动

cnhnln 发表于 2003-12-23 22:12:14

以前的2.4我也是,什么标志都用上了,可就是不出错 :-D
我现在只是把O2改成O3就不行了 :-(
那一篇帖子我已经看了
页: [1]
查看完整版本: 2.6内核的vesa镇缓冲无法用-O3参数编译