利用Eclipse搭建Linux内核开发环境

CentoOS 6.5 Eclipse+Qemu搭建linux内核源码级调试环境 搭建环境:ContoOS 6.5 阅读详情

博客原地址 http://blog.youkuaiyun.com/aggresss/article/details/76577681

利用Eclipse搭建Linux内核开发环境

正文

  时光流逝,记得十年前还是个游手好闲的少年,无聊时觉得应该分析一下Linux内核源码,没有别的动机,只觉得这样很酷。 
  没有任何项目经验的话,突然眼前出现一个浩大的工程,除了惊叹之余,再无其他可言。Linux内核的学习曲线可能陡峭了一点,如果没有点定力的话,是不会有什么进步的。 
  当把几十MB的tar包下载到本地后,打开方式便成了困扰我的一个问题,前前后后使用过好多工具,但都有一些缺点。

  1. Vim 
    各种插件,各种配置。vim如果定义为IDE的话,那还属于轻量级的IDE,通过Nerdtree+taglist+ctags+ycm这些大众一点的插件,完全可以实现语法高亮,代码跳转等IDE具备的功能,但对于SLOC大于100K数量级的工程貌似有点力不从心。相对与大型IDE来说,它更像一把短小而锋利的瑞士军刀。
  2. Emacs 
    神用的编辑器,学习曲线是盘旋型的,高深莫测。太难驾驭,对与我这种凡人,可能一辈子都盘旋在这个漩涡里。
  3. Source Insight 
    看过好多教程使用这东东浏览Linux内核,总是觉得很别扭,Linux自己家的事,为什要放在Windows上,文件名不区分大小写这一点就足以让人头疼了。
  4. LXR 
    例如: http://elixir.free-electrons.com/linux/latest/source 非常适合各种版本的Linux内核代码间比较和浏览,但是你想修改一下再编译一下就没有这功能了。

  进行过一下尝试后,还是觉得需要一个相对重量级的IDE来浏览Linux内核代码比较省时省力,比如Eclipse,QTCreator,Netbeans. 我这里暂且使用Eclipse来搭建一个浏览Linux内核的环境,以帮助新人少走弯路。

在使用eclipse创建工程之前需要两步准备工作:1,准备好交叉编译工具配置好环境变量;2,将Linux Kernel下载解压并成功编译一次。 
下面这段输出是使用命令 
export ARCH=arm CROSS_COMPILE=arm-linux- 
make arm_vexpress_defconfig 
make zImage V=1 
输出的 ./init/main.c 文件的编译参数,这段参数将作为我们接下来配置Eclipse的重要参考。

arm-linux-gcc -Wp,-MD,init/.main.o.d  
-nostdinc 
-isystem /opt/arm-buildroot-linux-uclibcgnu/usr/lib/gcc/arm-buildroot-linux-uclibcgnueabihf/5.4.0/include 
-I/mnt/sda5/workplace/linux-3.10.107/arch/arm/include 
-Iarch/arm/include/generated  
-Iinclude -I/mnt/sda5/workplace/linux-3.10.107/arch/arm/include/uapi 
-Iarch/arm/include/generated/uapi -I/mnt/sda5/workplace/linux-3.10.107/include/uapi 
-Iinclude/generated/uapi -include /mnt/sda5/workplace/linux-3.10.107/include/linux/kconfig.h 
-D__KERNEL__ -mlittle-endian -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs 
-fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security 
-fno-delete-null-pointer-checks -std=gnu89 -O2 -fno-dwarf2-cfi-asm -fno-ipa-sra 
-mabi=aapcs-linux -mno-thumb-interwork -funwind-tables -marm 
-D__LINUX_ARM_ARCH__=7 -march=armv7-a -msoft-float -Uarm -Wframe-larger-than=1024 
-fno-stack-protector -Wno-unused-but-set-variable -fomit-frame-pointer 
-fno-var-tracking-assignments -g -Wdeclaration-after-statement -Wno-pointer-sign 
-fno-strict-overflow -fconserve-stack 
-DCC_HAVE_ASM_GOTO    -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(main)"  
-D"KBUILD_MODNAME=KBUILD_STR(main)" -c -o init/main.o init/main.c
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

下面我们开始通过Eclipse构建Linux Kernel 工程,我使用的版本是Eclipse cdt neon 3 
Eclipse 版本信息

  1. 打开Eclipse工程后 File–>New–>Other–>C/C++–>Makefile Project with Existing Code 然后将Kernel所在目录配置好 
    配置工程目录

  2. 配置好工程目录后,右键Project Explorer 中的工程,选择 Properties 进入工程属性配置窗口。

  3. 选择C/C++ build ,将 Use default build command选项去掉,在Build command中输入 ARCH 和 CROSS_COMPILE 的配置信息,配置如下图 
  4. 配置 C/C++ Gernal ,这一项中配置信息较多。 
    首先选择 indexer 子选项,勾选 Enable project specific settings 选项 并 去掉 Index source files not included in the build 选项。 
    indexer配置项
    选择 Paths and Symbols 子选项,需要配置 Includes,Symbols,Source Location 三个tab选项。 
    Includes中添加架构相关的include头文件,参考刚才编译时的 -I 选项 ,我这里添加 
    ./arch/arm/include 
    ./arch/arm/include/uapi 
    ./arch/arm/include/generated 
    ./arch/arm/include/generated/uapi 
    四个目录,工程根目录下的include目录不用添加,eclipse会自动搜索那个目录。 
    includes配置
    其中 Symbols 配置则参考编译输出信息中的 -D 参数 ,KERNEL 是必须的, 其他的要根据平台不同,KBUILD_* 相关的定义可以先不用添加,用到的比较少。 
    symbols配置
    其中 Source Location 配置主要是为了去掉不参与编译的代码,避免多平台头文件的重复定义对indexer的干扰,选择 Edit Fileter–>Add Multiple 将 ./arch目录下的所有文件夹选中,除了需要编译的平台,比如我这里要排除arm文件夹。如果不开发驱动,建议将./drivers目录也添加进入,因为驱动里面的头文件也存在重复定义。 
    source location配置

  5. 配置 Preprocessor Include Paths, Macros etc. 子选项。 
    其中 Entries 选项卡 选中 GNU C –> CDT User Setting Entries –> Add –> Preprocessor Macros File –> 选择 ./include/gernerated/autoconf.h 文件 –> OK 
    所有make menuconfig 时的编译配置信息都在这个文件里,所以需要让eclipse识别这些信息。 
    Entries配置
    其中 Providers 选项卡 选中 CDT Cross GCC Built-in compiler Settings 选项,在 Command to get compiler specs 中添加 -nostdinc 和 -isystem {cross gcc include 目录} 信息,具体的目录信息可以参考内核编译时的输出信息。 
    providers配置
    Providers的配置说明: 通常一个C工程需要包含的头文件分为三类: 
     (1). GCC编译器的头文件,通常包含编译器支持的一些特性比如 va_list 这种特性; 
     (2). libc库的头文件,就是标准C库的头文件,比如stdio.h就属于这一类; 
     (3). 第三方库头文件。 
    Linux内核只用到了第一类头文件,并没有用到libc库和第三方库,所以使用 -nostdinc 选项将交叉编译工具的默认库搜索路径去掉,然后再使用 -isystem 选项将 GCC编译器的头文件路径加入即可。

  6. 完成。 
     
    等待index完成,需要几分钟的时间。 
     
    然后就可以使用Eclipse开发Linux Kernel了,Eclipse在一些小细节上还是会解析的不够好,一些小的语法错误提示可以不用太在意。

参考文档:

  1. https://wiki.eclipse.org/HowTo_use_the_CDT_to_navigate_Linux_kernel_source
  2. http://events.linuxfoundation.org/sites/events/files/slides/ELCE_2016_Exploring_Linux_Kernel_Source_Code_with_E

c++ webrtc基础(1) :webrtc源码下载与编译、项目模块介绍、学习资料推荐 本篇博客介绍webrtc源码的下载与编译,以及推荐webrtc学习资料。 源码下载 电脑环境:win10/win11 64bit,合理的上网环境,没有合理的网络环境无法拉取、下载webrtc代码和工具,宽带速度要快,尽量50M. 主要步骤如下: (1) 安装git (2) 打开cmd控制台,下载google开发工具depot_tools: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git (3) 新建一个目 阅读详情

相关推荐

C#连接数据库报Authentication to host ‘127.0.0.1‘ for user ‘root‘ using method ‘caching_sha2_password‘ fail

所以导致的,除了上边的办法,还可以把这个加密规则修改一下,这个的修改方式有很多,具体原因是因为MySQL8.0以前的加密规则是。

weixin_42209881的博客 4127

Linux 内核开发 - Eclipse内核开发环境搭建

翻译这篇文章的时候,我也想过可能会有高手说,内核开发用vi就足够了,还用什么eclipse,当然对于内核中函数特别了解的人确实如此,但是对于新手,每使用一个函数,就要去查找一下函数的定义,实在是非常浪费时间的工作,本文将介绍如何利用Eclipse这个强大的IDE开发环境进行Linux内核开发。       首先你应该有一个简单的内核模块工程,至少包含一个Makefile和一个c源文件。 1

Matrix_Designer的专栏 718

使用VSCode进行linux内核代码阅读和开发

使用VSCode进行linux内核代码阅读和开发现状新的方法安装与配置1.安装VSCode2.安装Remote - SSH插件3.添加远程主机4.安装clangd5.在远程服务器安装bear6.配置clangd7.触发clangd工作效果遇到的问题总结参考链接 现状 Linux内核由于其本身代码量庞大,其中又包含各种平台宏定义开关/配置,外加各种结构体指针的注册,这使得阅读内核代码变成一件令人头疼的事。针对这个问题目前常见的解决方案有以下几种: 使用简单的文本浏览工具 + grep进行代码搜索浏览,这种方

xhnmdlfl的博客 3万+

MOOS-ivp 实验三 MOOS简介(3)

MOOS-ivp 实验三 MOOS简介(3) 继上一篇文章继续对实验进行记录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MOOS-ivp 实验三 MOOS简介(3)六、A Simple Example with pXRelay1.pXRelay基本使用2.pXRelay简单例子3.pXRelay实验七、First Experiments in Modifying MOOS App Code1.下载一个MOOS模板文件2.打开MOOS模板文件总结 六、A Simple E

weixin_44151170的博客 2532

2024最新实战:用1Panel面板+Docker快速部署Frps服务端(含Nginx配置模板)

本文详细介绍了2024年企业级内网穿透方案,通过1Panel面板和Docker技术快速部署Frps服务端,包含Nginx反向代理配置模板。从服务器选型、系统准备到安全加固,提供全栈实战指南,帮助企业和开发者高效实现内网穿透需求。

weixin_27966471的博客 419

eclipse 编译内核模块_【嵌入式linux】(第五步):使用eclipse集成开发环境开发第一个嵌入式Linux驱动...

1.准备工作首先得安装好gcc工具链,以及开发环境,可以看看我的前面的几步。还得编译好内核,一般开发板都带了,现在我还不知道配置内核,只能按照开发板默认的去编译,编译前需要先编译uboot,建议像我一样的新手先学会驱动编写,慢慢的去学习 内核的配置裁剪,我觉得到时候这个肯定是非常简单的过程,只不过没有找到门道而已,等我会了一定和大家分享,如果有会的可以教我一下,在下感激不尽。我的嵌入式内核编译的路...

weixin_39901685的博客 354

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置)

本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。

weixin_42641741的博客 478

eclipse开发linux内核/驱动/应用测试实例

原文地址:https://www.cnblogs.com/diio/p/11832940.html Garlan和Shaw将软件架构风格分为五大类,数据流风格、调用/返回风格、独立构件风格、虚拟机风格和仓库风格。其中: (1)数据流风格包括批处理序列架构风格和管道/过滤器架构风格; (2)调用/返回风格包括主程序/子程序架构风格、数据抽象和面向对象架构风格和层次结构架构风格; (3)独立构件风格包括进程通信架构风格和事件驱动的架构风格; (4)虚拟机风格包括解释器架构风格和基于规则的系统; (5

2340

OpenBmc开发11:添加传感器(I2C)

1 查看传感器信息 通过qemu以本地端口映射方式运行编译后的镜像,访问bmcweb页面的网址是:https://localhost:2443/,如果想用IP地址启动请参考:openbmc开发4:启动运行编译镜像。(这里以网桥方式启动,以ip地址方式访问BMC) 输入用户名和密码,密码是:0penBmc(第一个是数字)。 选择Health,然后点击Sensor,可以看到传感器信息。 2 查看传感器配置文件 进入meta-live/meta-test/recipes-phosphor/...

master 1万+

乐企增值税及附加税费预缴申报表填报能力说明文档V1.004

申报表填报,是指企业在自有业务系统中将算税结果数据按预填规则要求加工汇总后,进行申报表填报的过程。申报表填报前对纳税申报所需的前提条件进行校验。校验通过后,应用前序算税结果数据及预填规则进行纳税申报表预填,生成申报表数据。申报表数据通过申报业务规则校验后,经纳税人确认即完成申报表填报业务。

记录点滴 354

eclipse 调试linux 内核

搭建Eclipse+QEMU+GDB调试Linux Kernel环境 0.前言 本文讲述搭建环境的关键环节,相应的工具及版本如下: JDK:1.6.0_45 Eclipse:eclipse-cpp-kepler-SR2-linux-gtk-x86_64.tar.gz Qemu:QEMU emulator version 1.5.0 (Debian 1.5.0+dfsg-3ubuntu

linuxarmsummary的专栏 6916

SAP_ABAP_SD_BAPI清单案例教程——销售订单开票_BAPI_BILLINGDOC_CREATEMULTIPLE_VF01_S4版本

SAP BAPI(Business Application Programming Interface)是SAP系统中的一组规范和标准,用于从SAP系统中获取数据、输入数据和更新数据。这些API允许开发者以编程方式与SAP系统交互,而无需编写大量的自定义代码。2.1 Copy代码 直接可使用。2.2 VF01开票。

java_zhong1990的专栏 2213

使用 Eclipse 搭建 Linux 内核开发环境

正文   时光流逝,记得十年前还是个游手好闲的少年,无聊时觉得应该分析一下Linux内核源码,没有别的动机,只觉得这样很酷。   没有任何项目经验的话,突然眼前出现一个浩大的工程,除了惊叹之余,再无其他可言。Linux内核的学习曲线可能陡峭了一点,如果没有点定力的话,是不会有什么进步的。   当把几十MB的tar包下载到本地后,打开方式便成了困扰我的一个问题,前前后后使用过好多工具,但都有一...

aggresss 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Eclipse 搭建 Linux 内核驱动程序开发环境

1、开发工具 eclipse 、arm-linux-gcc交叉工具链、对应开发板的Linux 内核源码。 2、安装开发工具,并将内核源码包解压到指定路径中,并编译。 eg:/usr/local/arm/linux_E9_3.0.35_for_Linux 3、利用eclipse新建一个C Project,Empty Project。 然后一路默认next 到添加交叉编译器路径。 设置...

qq_15271231的博客 3609

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

1. Linux 内核开发 - Eclipse内核开发环境搭建

翻译这篇文章的时候,我也想过可能会有高手说,内核开发用vi就足够了,还用什么eclipse,当然对于内核中函数特别了解的人确实如此,但是对于新手,每使用一个函数,就要去查找一下函数的定义,实在是非常浪费时间的工作,本文将介绍如何利用Eclipse这个强大的IDE开发环境进行Linux内核开发。       首先你应该有一个简单的内核模块工程,至少包含一个Makefile和一个c源文件。 1

小饼仙子的专栏 793

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

eclipse 编译内核模块_eclipse arm Linux驱动开发环境搭建

代码是之前写的[cpp]view plaincopy/*****************************************************************************************************************文件名称:led_drive.c//系统头文件#include#include#include#inc...

weixin_39589923的博客 226

eclipse使用教程嵌入式linux,配置eclipse linux嵌入式 集成开发环境(编译部分)详细...

开发环境:ubuntu12.04(64位)eclipse (c/c++)luna注意:本文主要讲将eclipse配置好编译器。 远程调试的部分请看另一篇帖子 eclipse 调试环境配置。我的arm-linux-gcc 路径是:/opt/EmbedSky/4.3.3/bin/arm-linux-gcc (什么?怎么看arm-linux-gcc的路径?? 你可以使用 which arm-linu...

weixin_35702498的博客 886

CentOS_7 OpenWrt Eclipse 环境搭建

一:内核的编译. 1,linux 编译环境的搭建与源码的准备工作 2,常用软件的安装 (make menuconfig) 3,  针对TP-Link WR740N 一些软件的openwrt 的移植 4,内核的编译 二:OpenWrt  Eclipse 编译环境的搭建 1,OpenWrt 平台依赖包的安装 2,Eclipse 环境的配置 3, 远程调试

bblo 1480

linux下jdk安装及VMware Tools安装内核版本缺失问题

之前遇到了好多问题,都一一解决了,问题排除过程中会对linux有新的认识。这里谈两点,不是多高深的知识,不过对新手挺有帮助。 (1) Java安装问题以及Eclipse CDT问题 我个人喜欢用最新版,所以http://www.oracle.com/technetwork/java/javaee/downloads/java-ee-sdk-7-jdk-7u21-download

paladinosment的专栏 1367

【Android学习笔记】Android概述与开发环境搭建

一、Android概述    2003 年 10 月,Andy Rubin 等人一起创办了 Android 公司。2005 年 8 月谷歌收购了这家仅仅成立了 22 个月的公司,并让 Andy Rubin继续负责 Android 项目。在经过了数年的研发之后,谷歌终于在 2008 年推出了 Android 系统的第一个版本。到目前为止,已经发布了12

斗code、年华 585

ubuntu下编译android源码、linux内核、android的源码结构以及编译结果等全面解析

在公司给小组成员培训,自己做的一个总结,现分享给大家 一培训目标 android的内核就是Linux,android下c/c++代码的编译必须在Linux环境中进行,所以android应用开发若要使用c/c++代码就必须有Linux环境。通过此次培训,你应该可以完全能够独立的搭建Linux下的android源码开发环境,能够编译android源码,Linux源码,了解android源码结构以及

kuwaka的专栏 1607

菜鸟系列之一:在ubuntu linux下搭建android开发

  (说明:在ubuntu liunx 下root用户默认的情况下是不被激活,由于在安装过程中要用到root权限每次都要权限切换很不方便,所以有必要激活root用户.)   步骤:   1. 在终端执行 sudo passwd root 指令后,系统将会提示你设置一个新的 root 帐号密码。   2. 点击 System -> Preferences -> Login Windo...

mv776mv 168

Linux 学习 笔记

2月23日 Linux 1 Linux 2 Hibernate 3 Spring 4 设计模式 3--4周时间学完 复习,项目 Linux: RHCE课程体系 RedHat论证的工程师-- 特点:基于实践 系统,网络,安全 60小时+1--2小时的练习--通过RHCT--RHCE--RHCA RHCH基础 1 什么是OS(操作系统): 1.1 Applicatio...

松松 443
上一篇: 一种通用嵌入式LCD页面切换方法
下一篇: pytorch在win7系统bug解决办法
MessiGodLike
博客等级 码龄16年 52粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值