如何在 menuconfig 中找到 Linux 配置选项?
How do I find Linux config options in menuconfig?
各种网页告诉我要在 Linux 内核中获得完整真实的堆栈回溯,我需要在我的 .config 文件中设置 CONFIG_FRAME_POINTER=y
。所以我 运行 make menuconfig
并尝试在那里找到它,但是很难直观地导航到哪里。我在网上搜索并找到很多页面说要启用它,但没有页面告诉我要深入了解哪些菜单选项才能这样做。所以我想也许我可以 运行 make config
然后按 [Enter] 一百万次到 select 一切的当前配置选择,然后复制粘贴整个命令 window将内容缓冲到文本文件中并搜索(不区分大小写)"frame_pointer" 或 "frame pointer",但仍然没有成功;显然我必须 select 'y' 才能找到某些子菜单,甚至可以深入到它所在的位置。
如何在 config 或 menuconfig 中找到这样的选项?某处是否列出了选项配置层次结构?
更新:
我正在使用 Linux 内核 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_
请注意,"Selected by:" 行比我能看到的要长,即使我将 make menuconfig
window 拉伸到与整个屏幕一样宽,但我别无选择查找滚动文本以查看全部。非常令人沮丧,因为大部分的磨难都是如此。顺便说一句,非常感谢任何认为适合在不留下有用评论的情况下投反对票的人。
所以我尝试使用上面的"search"信息导航到这个选项,但仍然找不到!
当我转到 Kernel hacking --->
菜单时,没有启用堆栈框架的选项。如@ShantanuAde 的回答所示,也没有菜单选项 "Compile-time checks and compiler options"。我看到这些选择:
------- 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
我唯一能想到的可能让我更接近 CONFIG_FRAME_POINTER 的是 "Kernel debugging" 但是当我打开它时,我得到的唯一额外选项是:
[*] 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)
非常非常沮丧。当混蛋在没有留下任何有用信息的情况下投票时,这无济于事。
在 make menuconfig
工具键 /
打开一个搜索对话框。在其中输入所需的选项,将显示有关此选项的信息。此信息包括选项树中的 "path"。
注意,只有满足 Depends on
表达式的选项才会出现在选项树中;您可以通过其他 /
搜索来检查这些选项。
有些选项从未在树中显示(对于此类选项 "Location" 部分不存在),因此用户无法选择它们。通常,这些选项由编译内核的体系结构定义。
如上所述;在 make menuconfig 之后按 '/' 键搜索 "FRAME_POINTER"。
它将显示所有具有此字符串的配置选项。按所需选项对应的数字。它会带你到那个特定的配置。
使用 "space" 键更改配置。退出前别忘了保存
在我的系统上,我首先列出了以下输出
Symbol: FRAME_POINTER [=y]
Type : boolean
Prompt: Compile the kernel with frame pointers
Location:
-> Kernel hacking (1) -> Compile-time checks and compiler options
数字是索引
的搜索结果。你快速跳转到结果
各种网页告诉我要在 Linux 内核中获得完整真实的堆栈回溯,我需要在我的 .config 文件中设置 CONFIG_FRAME_POINTER=y
。所以我 运行 make menuconfig
并尝试在那里找到它,但是很难直观地导航到哪里。我在网上搜索并找到很多页面说要启用它,但没有页面告诉我要深入了解哪些菜单选项才能这样做。所以我想也许我可以 运行 make config
然后按 [Enter] 一百万次到 select 一切的当前配置选择,然后复制粘贴整个命令 window将内容缓冲到文本文件中并搜索(不区分大小写)"frame_pointer" 或 "frame pointer",但仍然没有成功;显然我必须 select 'y' 才能找到某些子菜单,甚至可以深入到它所在的位置。
如何在 config 或 menuconfig 中找到这样的选项?某处是否列出了选项配置层次结构?
更新:
我正在使用 Linux 内核 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_
请注意,"Selected by:" 行比我能看到的要长,即使我将 make menuconfig
window 拉伸到与整个屏幕一样宽,但我别无选择查找滚动文本以查看全部。非常令人沮丧,因为大部分的磨难都是如此。顺便说一句,非常感谢任何认为适合在不留下有用评论的情况下投反对票的人。
所以我尝试使用上面的"search"信息导航到这个选项,但仍然找不到!
当我转到 Kernel hacking --->
菜单时,没有启用堆栈框架的选项。如@ShantanuAde 的回答所示,也没有菜单选项 "Compile-time checks and compiler options"。我看到这些选择:
------- 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
我唯一能想到的可能让我更接近 CONFIG_FRAME_POINTER 的是 "Kernel debugging" 但是当我打开它时,我得到的唯一额外选项是:
[*] 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)
非常非常沮丧。当混蛋在没有留下任何有用信息的情况下投票时,这无济于事。
在 make menuconfig
工具键 /
打开一个搜索对话框。在其中输入所需的选项,将显示有关此选项的信息。此信息包括选项树中的 "path"。
注意,只有满足 Depends on
表达式的选项才会出现在选项树中;您可以通过其他 /
搜索来检查这些选项。
有些选项从未在树中显示(对于此类选项 "Location" 部分不存在),因此用户无法选择它们。通常,这些选项由编译内核的体系结构定义。
如上所述;在 make menuconfig 之后按 '/' 键搜索 "FRAME_POINTER"。 它将显示所有具有此字符串的配置选项。按所需选项对应的数字。它会带你到那个特定的配置。 使用 "space" 键更改配置。退出前别忘了保存
在我的系统上,我首先列出了以下输出
Symbol: FRAME_POINTER [=y]
Type : boolean
Prompt: Compile the kernel with frame pointers
Location:
-> Kernel hacking (1) -> Compile-time checks and compiler options
数字是索引 的搜索结果。你快速跳转到结果