What‘s the best way to set up the CDT to navigate Linux kernel source?

本文详细指导如何在EclipseCDT中配置Linux内核项目,包括增加堆大小、定义配置选项、设置预处理器路径、宏和符号路径,以避免编译过程中可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Because of way the Linux kernel source code is architected and configured, it's a bit subtler than you might think.

Disclaimer: These steps were last updated for Eclipse 2019‑03, CDT 9.7.0, and Linux v5.1-rc4

Tip: Increase heap size before starting the index for Linux Kernel. See How do I increase Heap Size

FAQ How do I increase the heap size available to Eclipse? - Eclipsepedia

  • Download and install Eclipse plus the CDT.

  • Configure and build your kernel to define CONFIG_* and generate autoconf.h.

  • Start up Eclipse.

  • Click File -> New -> Project

  • In the pop-up window, choose C/C++-> C Project. Click Next

  • Fill in a project name like Linux v5.1

  • Uncheck the Use default location box and type in the root directory of your kernel into the Location box.

  • In the Project type: pane, click the Makefile project and select Empty Project

  • On the right side, select Linux GCC. Click Next

  • Click Advanced settings... and a Properties dialog will pop up.

  • Note: At this point, and starting from Eclipse Oxygen, Eclipse will aggressively start indexing your project, which can make Eclipse painfully slow for the rest of the configuration steps below. To mitigate that, temporarily disable indexing now by opening C/C++ General section, click on Indexer, click on Enable project-specific settings, then unmark the Enable indexer option.

  • Open the C/C++ General selection on the left.

  • Click on Preprocessor Include Paths

  • Select GNU C in the Languages list

  • Select CDT User Setting Entries in the Setting Entries list

  • Click on Add.... Choose Preprocessor Macros File from the top left dropdown, Project Path from the top right dropdown, and enter "include/linux/kconfig.h" into the File text box.

  • Also add any other macros files you are using.

  • Click on Indexer

  • Checkmark the Enable project specific settings box.

  • Uncheck Index source files not included in the build

  • Click on Paths and Symbols on the left.

  • Select the Includes tab and then select GNU C

  • Click Add...

  • Click Workspace... then select your kernel's include, and include/uapi directories

  • Do another Add, Workspace and add both arch/architecture/include, and arch/*architecture/include/uapi directories. e.g., arch/powerpc/include and arch/powerpc/include/uapi (The UAPI directories are due to the kernel's user/kernel header split covered here in-detail)

  • Click the # Symbols tab

  • Click Add...

  • Set the name to __KERNEL__

  • Set the value to 1 and click OK

  • Click the Source Location tab

  • Click the plus sign (or arrow/triangle) next to your project name.

  • Select the Filter item and click Edit Filter...

  • Click Add Multiple... and then select all of the arch/* directories in your kernel source that will not be used (i.e. all the ones that are not for the architecture you are using)

  • Click OK and OK again to dismiss that dialog.

  • Under C/C++ General, select Preprocessor Include Paths, Macros etc.

  • Click the Providers tab and select CDT GCC Built-in Compiler Settings

  • Uncheck **Use global provider shared between projects

  • Append -nostdinc to the curretly-existing Command to get compiler specs. The kernel is a free-standing environment by ISO C99 definition. That is, it does not want to be polluted, and obviously cannot work with, the "host" header files and libraries.

  • Open a terminal, and type "echo -isystem $(gcc -print-file-name=include/)". Append the resulting output to the Command to get compiler specs mentioned above. If you're using a cross-toolchain to compile the kernel, use the full path of that cross GCC compiler, instead of just typing gcc in the command mentioned. Rationale for this step: -nostdinc already asked gcc to not search the standard system directories for header files. But the Linux Kernel depends on GCC-provided "freestanding environment" headers like stdarg.h, stdbool.h and so on, which are typically hosted by GCC under /usr/lib/gcc///include. Thus this step.

  • Click OK on the Properties dialog.

  • Note: If you temporarily disabled indexing as earlier recommended. This is the right time to re-enable it. Under C/C++ General, click on Indexer, and mark the Enable indexer option.

  • Click Finish on the C Project dialog.

  • The Project will index automatically.

  • On a platter drive indexing will take upwards of 20 minutes to complete, on a SSD indexing will take about 5 minutes to complete.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值