zoukankan      html  css  js  c++  java
  • 【转】Writing linux kernel code in Eclipse

    【转】Writing linux kernel code in Eclipse

    As I've stated in an earlier post, I've started using Eclipse (Ganymede) for writing C/C++ code. I work with Linux-based network switches at Ericsson and have been writing some kernel drivers for our hardware. At home, I've also done a bit of kernel work for the Openmoko FreeRunner (some improvements of the accelerometer driver).

    Naturally, I'd like to use Eclipse for this work. The main advantage Eclipse gives over Emacs when working on large codebases is the source code parsing and indexing. This enables lookup of symbols, showing call hierarchies and "code assisting" for accessing structure members. Eclipse also grays sections of code which is ifdeffed out[*]. Very convenient. The problem is just to get the thing configured to understand the Linux kernel in the first place.

    A particular thing about Linux is the configuration, which after menuconfig (or xconfig or ...) ends up as a set of defines in include/linux/autoconf.h. When a file in the kernel tree is compiled, this file is automatically included. Without trickery, Eclipse misses this and will gray out a lot of code which is part of the build and symbol lookup etc will generally behave bad. Without this configured in a good way, eclipse is basically on par with emacs while eating orders of magnitude more memory. Rats and darn.

    What I'd like is basically this (Eclipse knows about CONFIG_PM!):

    eclipse-knows-about-CONFIG_PM

    So how should this be configured? I'm not sure, but this is how I've done so far:

      • In your favourite shell, run make menuconfig and make and save a configuration for Linux. This will create include/linux/autoconf.h.
      • Start eclipse with eclipse -vmargs -Xmx650M. This will save you from out of memory errors.
      • Create new project as File/New/C Project, select Makefile project and --Other toolchain--
      • Under Projects/Properties, C/C++ general/Paths and symbols, select the Includes tab and click the Add... button. Check the Add to all languages checkbox and click the Workspace... button and add the include/ path so that Eclipse can find the Linux include files.
      • In the same dialogue, select the Symbols tab and click the Add... button. Check the Add to all languages checkbox and add __KERNEL__.
      • Under Projects/Properties, C/C++ general/Indexer, select No indexer.
      • Press OK
      • (Optional but typically useful) remove unused architectures from the build by right clicking on the directory in the project area and selecting Exclude from build...
      • We now need to add the symbols from the autoconf.h file. I use a script to do this, autoconf-to-eclipse.py. Execute as
        autoconf-to-eclipse.py path-to-autoconf.h path-to-eclipse-dir
        This will update the .cproject file with defines for all symbols in autoconf.h (make a copy of .cproject first!)
      • Refresh the project: right click on the project in the project list and select refresh
      • Under Projects/Properties, C/C++ general/Indexer, select Fast C/C++ indexer.
    • Now watch in horror as Eclipse eclipses (pun intended) all your memory and slows down your computer to remind you of the 8-bit days. This is the time to have dinner or even go out and have a few beers.


    Once you are back, providing your computer hasn't overheated, eclipse will have indexed your Linux kernel source tree.

    There are still some open problems I'm facing, kind lazywebbers are encouraged to present solutions to them:

      • Eclipse adds trailing whitespace. I got this pointed out by Andy Green when working on the accelerometer patches. Luckily, this was the openmoko list, so it was only kind flames. LKML would not have been as forgiving.
      • Related to the first bullet: How do I get eclipse to show trailing whitespace without showing every non-text character?
      • Also related to the first bullet: I know there is an Eclipse option to remove trailing whitespace. The problem with that is that Eclipse happily cleans up files when you opens them. Your patches then become full of non-relevant changes, and LKML would scream at you if you send them in.
    • There has to be some better way of including autoconf.h in the indexing (GCC uses the -include option for this - Eclipse should do that as well). Does someone know?


    Warning: The script below is badly written. Rerun it each time you change the kernel configuration.

    [*] Ifdeffed might maybe become one of the first english words originating froma non-natural language context. Together with ifzeroed. Sorry, we've ifzeroed the subway today, No service.

    autoconf-to-eclipse.py: https://mondragon.tek.bth.se/svn/main/world/ska/autoconf-to-eclipse (Subversion archive)

  • 相关阅读:
    SQL Server 2005 之事务日志体系 (一)
    SQL Server 2005 事务日志之逻辑结构(二)
    SQL Server 2005 清除备份 还原历史记录
    SQL Server 验证器
    SQL Server 2005 事务日志之物理体系(三)
    程序设计语言原理重要概念
    Java作业四 图形用户界面程序设计和多线程
    Java作业二 面向对象程序设计
    Java作业三 语言基础与面向对象
    Java课程学习总结
  • 原文地址:https://www.cnblogs.com/pengzhiwei/p/2655950.html
Copyright © 2011-2022 走看看