O0的内核

简介: 新手来说, 调试内核c代码经常上下乱跳, 但是O0又无法通过编译, 做了一个实验, 对于所有的c文件, 先尝试O0, 如果错误的话, 用O1来编译, 但是最后有一些符号找不到, 因为O0会多调用一些函数, 在这些问题都解决了之后, 最后居然报出, 某个section太大了, 看来这个问题很复杂 下面是一个简单得方法, 不要一口气把所有的文件都O0, 需要调试哪个, 把具体文件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}'

目录
相关文章
|
7月前
|
存储 Linux API
xenomai内核解析--双核系统调用(一)
本文介绍了Xenomai内核系统调用的实现,探讨了在Linux内核与Xenomai实时内核共存时,系统调用如何区分和交互。系统调用是用户空间与内核空间通信的关键,它提供了硬件抽象、系统稳定性、安全性和可移植性。在32位系统中,通过`int 0x80`指令触发,而在64位系统中,使用`syscall`指令。Xenomai通过I-pipe拦截系统调用,区分实时与非实时任务,并通过`cobalt_syscalls`表执行相应操作。文章还详细解析了系统调用表的生成和权限控制机制。
168 1
xenomai内核解析--双核系统调用(一)
|
7月前
|
API 调度
xenomai内核解析--双核系统调用(三)--如何为xenomai添加一个系统调用
本文介绍了如何在Xenomai中添加自定义系统调用`get_timer_hits()`,该调用用于获取CPU定时器中断次数。首先,在`syscall.h`中定义127号系统调用,并在`clock.h`和`clock.c`中声明和实现该函数。接着,更新libcobalt库以包含新接口。最后,提供了一个示例应用,演示如何在实时任务中使用此系统调用。编译内核和库后,运行示例程序显示定时器中断次数,体现了Xenomai的tickless特性。
87 1
|
7月前
|
存储 缓存 调度
深入理解操作系统:从内核到用户空间
【5月更文挑战第31天】本文将探讨操作系统的核心概念,包括内核、进程管理、内存管理和文件系统。我们将深入了解这些组件如何协同工作,以提供稳定、高效的计算环境。此外,我们还将讨论操作系统如何与硬件交互,以及如何在用户空间中运行应用程序。通过阅读本文,您将获得对操作系统工作原理的全面了解。
|
Linux 调度
Linux内核15-内核如何创建进程
Linux内核15-内核如何创建进程
|
存储 缓存 Linux
Linux内核21-Linux内核的中断处理过程
Linux内核21-Linux内核的中断处理过程
|
Linux 调度 开发者
Linux内核24-内核同步理解
Linux内核24-内核同步理解
|
存储 Linux 调度
Linux内核36-内核同步之禁止中断
Linux内核36-内核同步之禁止中断
|
Linux 开发工具
|
存储 安全 网络协议
内核
内核
365 0