我想调试嵌入式Linux内核源码,版本为montavista pro 4.0.1,目标平台为TI的DM355,主机是Fedora12,编译器arm_v5t_le-gcc。
现在我通过 OpenJTAG + OpenOCD0.4.0 + arm_v5t_le-gdb + Emacs 已经可以单步调试zImage解压代码,以及内核源代码(虽然还有一些问题,不过也算能源码级调试了)。
我发现内核代码执行顺序与源码不太一致,根据经验,应该是编译器优化的结果,于是我想关闭优化编译Linux内核,在内核源代码顶层目录Makefile中发现优化级别是在525行开始的几行代码中设置的:
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
CFLAGS += -Os
else
CFLAGS += -O2
endif
于是我将上面的 -Os 与 -O2 都改成 -O0 来禁止编译器优化,接着重新编译内核,出现如下错误:
[hugeice@rdserver ti-davinci]$ make ARCH=arm CROSS_COMPILE=arm_v5t_le- uImage
CHK include/linux/version.h
SPLIT include/linux/autoconf.h -> include/config/*
SYMLINK include/asm-arm/arch -> include/asm-arm/arch-davinci
make[1]: `arch/arm/kernel/asm-offsets.s' is up to date