O0的内核

新手来说, 调试内核c代码经常上下乱跳, 但是O0又无法通过编译, 做了一个实验, 对于所有的c文件, 先尝试O0, 如果错误的话, 用O1来编译, 但是最后有一些符号找不到, 因为O0会多调用一些函数, 在这些问题都解决了之后, 最后居然报出, 某个section太大了, 看来这个问题很复杂

下面是一个简单得方法, 不要一口气把所有的文件都O0, 需要调试哪个, 把具体文件O0就行了

make vmlinux KCFLAGS="-g3 -O1 -Wno-maybe-uninitialized" -j100 CFLAGS_page_alloc.o='-O0 -ftree-ter'

-O0 -ftree-ter就是把优化开到最小, 效果好很多, 不再上下乱跳了

那么这个是怎么找到的呢
就是把O1对应的所有flag都加上, 然后一个个去掉, 看能否通过编译, 获得最小集

gcc -O1 -Q --help=optimizers |grep enable |awk '{print $1}'

时间: 2024-12-19 10:54:59

O0的内核的相关文章

Linux内核剖析 之 内核同步

主要内容     1.内核请求何时以交错(interleave)的方式执行以及交错程度如何.     2.内核所实现的基本同步机制.     3.通常情况下如何使用内核提供的同步机制. 内核如何为不同的请求服务     哪些服务?     ====>>>     为了更好地理解内核是如何执行的,我们把内核看做必须满足两种请求的侍者:一种请求来自顾客,另一种请求来自数量有限的几个不同的老板.对于不同的请求,侍者采用如下的策略:     1.老板提出请求时,如果侍者空闲,则侍者开始为老板服务

linux内核编程笔记【原创】

以下为本人学习笔记,如有转载请注明出处,谢谢   1. service用法 oneshot DEFINE_MUTEX(buzzer_mutex);   mutex_lock(&buzzer_mutex); mutex_unlock(&buzzer_mutex);   static void WriteNumber(const char *fileName, int number) {                                                      

转 从内核文件系统看文件读写过程

系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境,但是计算机系统的各种硬件资源是有限的,因此为了保证每一个进程都能安全的执行.处理器设有两种模式:"用户模式"与"内核模式".一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I/O操作,修改基址寄存器内容等.而连接用户模式和内核模式的接口称之为系统调用. 应用程序代码运行在用户模式下,当应用程序需要实现内核模式下的指令时,先向操作系统发送调用请求.操作系统收到请求后,执行

linux内核符号表kallsyms简介

在使用perf排查问题时,我们经常会发现[kernel.kallsyms]这个模块.这到底是个什么东西呢? 简介: 在2.6版的内核中,为了更方便的调试内核代码,开发者考虑将内核代码中所有函数以及所有非栈变量的地址抽取出来,形成是一个简单的数据块(data blob:符号和地址对应),并将此链接进 vmlinux 中去. 在需要的时候,内核就可以将符号地址信息以及符号名称都显示出来,方便开发者对内核代码的调试.完成这一地址抽取+数据快组织封装功能的相关子系统就称之为 kallsyms. 反之,如

Linux内核内存管理-内存访问与缺页中断

简单描述了x86 32位体系结构下Linux内核的用户进程和内核线程的线性地址空间和物理内存的联系,分析了高端内存的引入与缺页中断的具体处理流程.先介绍了用户态进程的执行流程,然后对比了内核线程,引入高端内存的概念,最后分析了缺页中断的流程. 用户进程 fork之后的用户态进程已经建立好了所需的数据结构,比如task struct,thread info,mm struct等,将编译链接好的可执行程序的地址区域与进程结构中内存区域做好映射,等开始执行的时候,访问并未经过映射的用户地址空间,会发生

Linux 系统裁剪笔记 4 (内核配置选项及删改)

在menuconfig中配置,可以对进行Linux内核配置选项及删改.本文介绍详细配置方法.第一部分:全部删除Code maturity level options ---> 代码成熟等级选项[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选.第二部分 :除以下选项,其它全部删除General setup-〉System V IPC (IPC:Inter

gdbserver-linux内核态调试手段问题

问题描述 linux内核态调试手段问题 3C 各位大神,我最近在研究内核调试这一块儿,有诸多疑问,望解答.本人调试的linux内核为运行在Freescale imx53开发板的andorid内核,android4.3.2,linux2.6.35.ubuntu版本为14.04.欲在Ubuntu上搭建一个针对配套的内核调试环境,以实现单步.断点等调试.这几天在网上搜索资料,推荐的内核调试的比较实用的方法有gdb与gdbserver,kgdb,但有诸多疑问,尚未成功.1)gdb与gdbserver这个

linux内核 进程地址空间

问题描述 linux内核 进程地址空间 大神: 我是一个Linux内核菜鸟,在<<深入linux内核架构>>一书中写道:"各个进程的地址空间都是独立的", ,大神, 我不理解进程的"地址空间"是什么, 是进程的内存吗,请赐教,不胜感激涕零. 解决方案 进程启动后,都有一块自己的私人空间,其它进程 不可以直接访问的 .基本上所有操作系统都是这样的,这是最基本的安全性.这里所说的地址空间 就是一系列的内存地址罢了. 解决方案二: 内容是从<

剖析一个由sendfile引发的linux内核BUG

在论坛上看到一个讲linux内核BUG的帖子,利用这个BUG,一个普通用户能够在运行某个程序之后,获得root权限. 示例的代码如下:http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz 在ubuntu 9.04,内核版本2.6.28.12的机器上测试通过. (警告,此BUG已经是公开的秘密了.如果想用来干坏事,是很容易被发现的,并且将受到法律的制裁!) 也希望linux内核尽快修复该BUG. 那么,这究竟是