pho*_*ger 1 linux-kernel embedded-linux
各种网页告诉我要在Linux内核中获得完全真实的堆栈回溯,我需要CONFIG_FRAME_POINTER=y在我的.config文件中设置.所以我跑步make menuconfig并尝试在那里找到它,但是在哪里导航这样做几乎不直观.我搜索网页并找到许多说要启用它的页面,但是没有页面告诉我要进行深入研究的菜单选项.所以我想也许我可以运行make config,只需按[Enter]一百万次来选择所有内容的当前配置选项,然后将整个命令窗口缓冲区内容复制粘贴到文本文件中并搜索(不区分大小写)"frame_pointer"或"框架指针",但仍然没有运气; 显然我必须为某些子菜单选择'y',甚至可以深入到任何地方.
如何在config或menuconfig中找到这样的选项?是否在某处列出了选项配置层次结构?
更新:
我正在使用Linux Kernel v2.6.30.4-uc0; 这就是我使用Lantronix XPort Pro SDK的原因.
根据我得到的答案,我使用/搜索选项(不知道我之前是如何错过的),但我真的无法进一步了解.当我搜索"FRAME_POINTER"时,这就是我所看到的:
Symbol: ARCH_WANT_FRAME_POINTERS [=n]
Symbol: FRAME_POINTER [=n]
Prompt: Compile the kernel with frame pointers
Defined at lib/Kconfig.debug:620
Depends on: DEBUG_KERNEL && (CRIS || M68K || M68KNOMMU || FRV || UML || AVR32 || SUPERH || BLACKFIN || MN10300) || ARCH_WANT_FRAME_POINTERS
Location:
-> Kernel hacking
Selected by: LOCKDEP && DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT && !MIPS && !PPC && !ARM_UNWIND && !S390 || FAULT_INJECTION_STACKTRACE_FILTER && FAULT_INJECTION_
Run Code Online (Sandbox Code Playgroud)
请注意,"选择者:"行比我看到的要长,即使我将make menuconfig窗口拉伸到整个屏幕的宽度,也没有选项可以找到滚动文本以查看全部内容.非常令人沮丧,因为大多数这种折磨都是如此.顺便说一句,非常感谢任何人认为适合downvote而不留下有用的评论.
所以我尝试使用上面的"搜索"信息导航到这个选项,但它仍然无处可寻!
当我进入Kernel hacking --->菜单时,没有选择启用堆栈帧.如@ ShantanuAde的回答所示,也没有菜单选项"编译时检查和编译器选项".我看到了这些选择:
------- Kernel hacking -------------------------
[ ] Show timing information on printks
[ ] Enable __deprecated logic
[ ] Enable __must_check logic
(1024) Warn for stack frames larger than (needs gcc 4.4)
[ ] Magic SysRq key
[ ] Enable unused/obsolete exported symbols
[ ] Debug Filesystem
[ ] Run 'make headers_check' when building vmlinux
[ ] Kernel debugging
[ ] Debug memory initialisation
[ ] Check for stalled CPUs delaying RCU grace periods
[ ] Sysctl checks
[ ] Sample kernel code --->
[ ] Full Symbolic/Source Debugging support
[ ] Use fast second timer for profiling
[ ] Compiled-in Kernel Boot Parameter
[ ] Suppress Kernel BUG Messages
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一可能让我更接近CONFIG_FRAME_POINTER的是"内核调试"但是当我打开它时,我得到的唯一额外选项是:
[*] Kernel debugging
[ ] Debug shared IRQ handlers (NEW)
[*] Detect Soft Lockups (NEW)
[ ] Panic (Reboot) On Soft Lockups (NEW)
[*] Detect Hung Tasks (NEW)
[ ] Panic (Reboot) On Hung Tasks (NEW)
[*] Collect scheduler debugging info (NEW)
[ ] Collect scheduler statistics (NEW)
[ ] Collect kernel timers statistics (NEW)
[ ] Debug object operations (NEW)
[ ] Debug slab memory allocations (NEW)
[ ] Spinlock and rw-lock debugging: basic checks (NEW)
[ ] Mutex debugging: basic checks (NEW)
[ ] Spinlock debugging: sleep-inside-spinlock checking (NEW)
[ ] Locking API boot-time self-tests (NEW)
[ ] kobject debugging (NEW)
[ ] Verbose BUG() reporting (adds 70K) (NEW)
[ ] Compile the kernel with debug info (NEW)
[ ] Debug VM (NEW)
[ ] Debug the global anon/private NOMMU mapping region tree (NEW)
[ ] Debug filesystem writers count (NEW)
Run Code Online (Sandbox Code Playgroud)
非常非常令人沮丧.如果没有留下任何有用的信息,那么在没有任何帮助的情况下,它就无助于它.
在make menuconfig工具键中/打开搜索对话框.输入所需的选项,将显示有关此选项的信息.此信息包括选项树中的"路径".
请注意,只有Depends on满足其表达式时,选项才会出现在选项树中; 您可以通过其他/搜索来检查这些选项.
某些选项永远不会显示在树中(对于此类选项"位置"部分不存在),因此用户无法选择它们.通常,这些选项由编译内核的体系结构定义.
小智 5
如上所述;在进行 menuconfig 后按“/”键搜索“FRAME_POINTER”。它将显示具有此字符串的所有配置选项。按所需选项上的数字。它将带您进入该特定配置。使用“空格”键更改配置。退出前不要忘记保存。
在我的系统上,我首先列出了以下输出
符号:FRAME_POINTER [=y]
类型:布尔
值 提示:使用帧指针编译内核
位置:
-> 内核黑客 (1) -> 编译时检查和编译器选项
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |