当前位置:  技术问答>linux和unix

弱弱的问:如何用-O0优化级别编译Linux内核?

    来源: 互联网  发布时间:2016-10-14

    本文导语:  我想调试嵌入式Linux内核源码,版本为montavista pro 4.0.1,目标平台为TI的DM355,主机是Fedora12,编译器arm_v5t_le-gcc。 现在我通过 OpenJTAG + OpenOCD0.4.0 + arm_v5t_le-gdb + Emacs 已经可以单步调试zImage解压代码,以及内核源...

我想调试嵌入式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.
make[1]: `include/asm-arm/mach-types.h' is up to date.
  CHK    include/linux/compile.h
  UPD    include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  CHK    usr/initramfs_list
  GEN    .version
  CHK    include/linux/compile.h
dnsdomainname: 未知的主机
  UPD    include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
init/built-in.o(.init.text+0x1e8c): In function `identify_ramdisk_image':
init/do_mounts_rd.c:92: undefined reference to `ntohl'
arch/arm/mm/built-in.o(.text+0x1624): In function `adjust_pte':
arch/arm/mm/fault-armv.c:77: undefined reference to `cpu_tlb'
arch/arm/mm/built-in.o(.text+0x2360): In function `do_translation_fault':
arch/arm/mm/fault.c:363: undefined reference to `cpu_tlb'
arch/arm/mm/built-in.o(.text+0x3c44): In function `free_pgd_slow':
arch/arm/mm/mm-armv.c:249: undefined reference to `cpu_tlb'
arch/arm/mm/built-in.o(.text+0x3de4): In function `setup_mm_for_reboot':
arch/arm/mm/mm-armv.c:590: undefined reference to `cpu_tlb'
arch/arm/mm/built-in.o(.init.text+0x1414): In function `paging_init':
arch/arm/mm/init.c:519: undefined reference to `cpu_tlb'
arch/arm/mm/built-in.o(.init.text+0x2734):arch/arm/mm/mm-armv.c:559: more undefined references to `cpu_tlb' follow
……

我试过 -O1、-O2、-Os 优化都是可以编译通过的,唯独 -O0 编译会报告这些错误,错误大概是说一些标号(变量和函数)没有定义,难道修改编译选项的优化级别还会影响到源代码的编译吗 ?? 实在不解呀!

|
-O0和不加-O参数是一样的,你试下不加-O参数能否通过.

注意,-O0后面那个数值零,不是字母O,你的看起来两个都写成字母O了

|
CSDN的编辑控件还真分不出大写字母O和0。用notepad非常好区分。

|
make clean一下

|
同意 make clean一下

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • mysql优化之路----hash索引优化
  • Windows优化大师最新版 V7.99 Build 12.604发布
  • GCC的O1、O2、O3选项究竟优化了什么?
  • Mysql大表查询优化技巧总结及案例分析
  • 解析Android开发优化之:对界面UI的优化详解(三)
  • MySQL优化分析器 mysqloa
  • JPEG 图像优化工具 jpegoptim
  • 图片优化工具 ImageOptim
  • gcc 优化
  • 急,来者有分,怎样对程序中的SQL语句进行优化
  • SPICE 电路优化 ASCO
  • IIS 优化扩展 IISpeed
  • 流量优化的网络驱动程序 cFosSpeed
  • CSS优化工具 CSSTidy
  • 搜索引擎优化工具 Seo Panel
  • gcc编联优化问题?
  • 【请教】只提供几个文件下载的apache如何优化?
  • 图片优化工具 ImageOptim iis7站长之家
  • Java 代码优化和测试工具 JTest
  • 解析Android开发优化之:对界面UI的优化详解(二)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3