《Android深度探索(卷1):HAL与驱动开发》——6.5节使用Eclipse开发和测试Linux驱动程序

简介:

本节书摘来自异步社区《Android深度探索(卷1):HAL与驱动开发》一书中的第6章,第6.5节使用Eclipse开发和测试Linux驱动程序,作者李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.5 使用Eclipse开发和测试Linux驱动程序
Android深度探索(卷1):HAL与驱动开发
在前面几节开发的word_count驱动和测试程序大多都需要在Linux终端进行编译(Android应用程序除外)和运行,而且也无法跟踪到Linux内核函数、变量、宏的内部(除非自己到Linux内核源代码中就寻找这些源代码文件),这并不利于深入了解Linux内核技术。在本节将为读者展示如何在Eclipse中开发Linux驱动程序,并且可以像跟踪Java代码一样直接跟踪到Linux内核源代码。除此之外,Eclipse也可以开发基于C/C++的测试程序。本节的例子需要在Eclipse中安装CDT插件,还没安装CDT的读者请按照节介绍在方法安装CDT。

6.5.1 在Eclipse中开发Linux驱动程序
在Ubuntu Linux中通常使用vi或gedit来编辑C/C++源代码文件。在Linux的其他发行版vi文本编辑器一般是存在的,当然,也可以使用任何自己喜欢的文本编辑器来编辑C/C++源代码文件。虽然很多文本编辑器都可以根据文件扩展名使源代码的关键字变色(如显示的是.c文件,会根据C语言的规则以不同颜色显示源代码中的不同部分),但除此之外并没有什么特殊的功能辅助编码工作。为了获得更多的辅助编码功能,本节将介绍如何利用Eclipse自身的功能开发Linux驱动,并自动进行安装。

使用Eclipse开发Linux驱动程序的步骤如下。

第1步:建立C工程

在Eclipse中单击“File”>“New”>“Other”菜单项,打开“New”对话框,选择“C Project”项(选“C++ Project”项也可),如图6-25所示。

然后单击“Next”按钮,并按照如图6-26所示进行设置,最后单击“Finish”按钮建立一个空的C工程。


ee8d056882a22afad7d892864fa895e04c144289

第2步:建立C源代码文件链接

单击word_count_eclipse工程右键菜单中的“New”>“Soruce Folder”菜单项目,打开“New Soruce Folder”对话框,在“Folder name”文本框中输入“src”,如图6-27所示。然后单击“Finish”按钮建立一个保存Linux驱动源代码文件的目录。


0b54f27aee70d24d99a40196c74d2d3eee1a0a87

注意

建立src目录并不是必需的,但将源代码文件放到一个指定的目录是一个好习惯。
接下来就是将word_count.c文件放到src目录中。当然,最简单的方法是直接将位于word_count目录的word_count.c文件复制到src目录中,但这样就有两个word_count.c文件了,还需要维护word_count.c文件的一致性。为了方便,只需要在src目录建立一个word_count/word_count.c文件的链接即可。建立文件链接仍然需要导入文件。首先单击src目录,在右键菜单中单击“Import”菜单项,打开“Import”对话框,选择“File System”项,如图6-28所示。

单击“Next”按钮进入下一个设置界面,并按着图6-29所示选择word_count.c文件,并单击“Advanced”按钮,选择“Create links in workspace”复选框。最后单击“Finish”按钮建立word_count.c文件中src目录中的链接。


040403989c7dbfe16ce6fdd38397d18aef68842d

建立完word_count.c文件的链接后,我们会发现虽然在Eclipse工程中查看,src目录中有一个word_count.c文件,但从文件浏览器查看,src目录中什么也没有。

第3步:设置include路径

这一步解决了如下两个问题。

可以跟踪进Linux内核源代码。
输入函数、宏等内容时显示代码提示。
为了实现这两个功能,就需要让Eclipse找到Linux内核源代码中的相关资源。C/C++中的资源都是在头文件(.h文件)中定义的,因此,需要为word_count_eclipse工程指定头文件的路径。Linux内核源代码中有很多的文件路径,并不一定指定所有的路径,只需要指定当前工程中C/C++源代码文件引用的头文件所在的路径即可。

单击word_count_eclipse工程右键菜单的“Properties”菜单项(或选中word_count_eclipse,按Alt+Enter键)打开工程属性对话框。选中“C/C++ General”>“Paths and Symbols”项,选中右侧“Includes”页的“GNU C”项,单击右侧的“Add”按钮添加如下两个路径,如图6-30所示。

/root/kernel/goldfish/include

/root/kernel/goldfish/arch/arm/include


886ee2f34be67990ae452286b1c77405c6f5e3c4

现在单击“OK”按钮关闭“Properties”对话框。这时word_count.c文件的错误一一消失了。在Eclipse中打开word_count.c文件,按住Ctrl键,用鼠标左键单击某一个Linux内核函数(如copy_to_user),或直接在某个函数、宏上按F3键,会直接跟踪到Linux内核函数的定义部分,如图6-31所示。


a178107df65e45b7c717d1d0e87395582f8bcb2f

当按下内容助手(Content Assist)快捷键(可通过单击“Help”>“Key Assist”菜单项查看当前的内容助手快捷键),会显示如图6-32所示的内容助手列表。里面列出了所有Eclipse能找到的函数、宏、变量等资源。


ba8572552258ceaf3318dfe33cdc87e297e0a310

第4步:编译Linux驱动

Linux驱动不能在Eclipse中直接运行。但可以编译和安装。可以利用build.sh脚本文件来编译和安装Linux驱动。读者可以按照节介绍的方法为工程添加一个Program,并且去掉系统原先的两个建立项前的复选框。其中Argument直接填写脚本文件的路径即可(Location和Working Directory的设置与2.4.5节的设置相同)。本例只设置“Main”页。其他页不需要设置。设置完Program后。编译word_count_eclipse工程,就会在Console视图中显示编译和安装信息,如图6-33所示。


b931cc81cda94d9832cb09357b16c0c32209d678

6.5.2 在Eclipse中测试Linux驱动
安装了CDT插件后,Eclipse不仅可以开发Java程序,也可以开发普通的C/C++程序。使用Eclipse开发C/C++程序是一个好主意。因为可以带来很多好处,如高亮显示代码、格式化代码、跟踪代码、Content Assist列表、调试代码等。本节将介绍如何在Eclipse中建立C/C++项目,并测试Linux驱动。

首先需要像上一节方法一样(只是将CROSS GCC改成Linux GCC)建立一个C工程(word_count_eclipse_test),并且建立一个存储源代码的src目录。word_count_eclipse_test工程的路径如下。

然后按如下步骤测试Linux驱动。

第1步:导入test_word_count.c文件

按照上一节第2步的方法建立test_word_count.c文件的连接。

第2步:设置include路径

按照上一节第3步的方法设置include路径。本例只需设置/usr/include即可。

第3步:建立Target

单击word_count_eclipse_test工程右键菜单的“Make Targets”>“Create”菜单项,打开“Create Make Target”对话框,在“Target name”文本框中输入“word_count_eclipse_test”,然后单击“OK”按钮关闭对话框。

第4步:Build工程

单击word_count_eclipse_test工程右键菜单的“Make Targets”>“Build”菜单项,打开“Make Targets”对话框,如图6-34所示,选中在第3步建立的“word_count_eclipse_test”,然后单击“Build”按钮,会在word_count_eclipse_test工程中生成一些配置文件,如图6-35所示。


c467887a6df90edf0c97450789a61f1e4908ae49

第5步:运行测试程序

如果是第一次运行word_count_eclipse_test,需要单击工程右键菜单的“Run As”>“Local C/C++ Application”菜单项。如果以前运行过word_count_eclipse_test,可在Eclipse工具栏运行或调试按钮下拉菜单中选择“word_count_eclipse_test”运行程序。运行程序后会将测试结果输出到Console视图中,如图6-36所示。


6d6282feac1c577f31803860327b8ffa8ec3fcad
相关文章
|
12月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
3224 77
|
10月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
461 32
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
533 1
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
659 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
Java Linux API
Linux设备驱动开发详解2
Linux设备驱动开发详解
288 6
|
消息中间件 算法 Unix
Linux设备驱动开发详解1
Linux设备驱动开发详解
355 5
|
存储 Linux 开发工具
如何进行Linux内核开发【ChatGPT】
如何进行Linux内核开发【ChatGPT】
|
存储 传感器 定位技术
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
《移动互联网技术》 第四章 移动应用开发: Android Studio开发环境的使用方法:建立工程,编写源程序,编译链接,安装模拟器,通过模拟器运行和调试程序
555 0
|
Android开发
【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
【Android 逆向】代码调试器开发 ( 等待进程状态改变 | detach 脱离进程调试 PTRACE_DETACH | 调试中继续运行程序 PTRACE_CONT )
333 0
|
网络协议 Android开发 虚拟化
Android Studio无法运行程序调试程序出现Unable to connect to ADB.Check the Event Log for possible issues.Verify th
Android Studio无法运行程序调试程序出现Unable to connect to ADB.Check the Event Log for possible issues.Verify th
264 0
Android Studio无法运行程序调试程序出现Unable to connect to ADB.Check the Event Log for possible issues.Verify th