本节书摘来自异步社区《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](https://i-blog.csdnimg.cn/blog_migrate/c950769a8c9aa42f975d6789c0135a81.png)
第2步:建立C源代码文件链接
单击word_count_eclipse工程右键菜单中的“New”>“Soruce Folder”菜单项目,打开“New Soruce Folder”对话框,在“Folder name”文本框中输入“src”,如图6-27所示。然后单击“Finish”按钮建立一个保存Linux驱动源代码文件的目录。
![0b54f27aee70d24d99a40196c74d2d3eee1a0a87](https://i-blog.csdnimg.cn/blog_migrate/d6cccfd7b300ea1b62092d1012749b25.png)
注意
建立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](https://i-blog.csdnimg.cn/blog_migrate/a276fa63371c7c2e93795e3d1c9cebfa.png)
建立完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](https://i-blog.csdnimg.cn/blog_migrate/0e59c14e14aa9e42a00c4d192d12bef7.png)
现在单击“OK”按钮关闭“Properties”对话框。这时word_count.c文件的错误一一消失了。在Eclipse中打开word_count.c文件,按住Ctrl键,用鼠标左键单击某一个Linux内核函数(如copy_to_user),或直接在某个函数、宏上按F3键,会直接跟踪到Linux内核函数的定义部分,如图6-31所示。
![a178107df65e45b7c717d1d0e87395582f8bcb2f](https://i-blog.csdnimg.cn/blog_migrate/0807636753d8524dc8d63a36baee1e40.png)
当按下内容助手(Content Assist)快捷键(可通过单击“Help”>“Key Assist”菜单项查看当前的内容助手快捷键),会显示如图6-32所示的内容助手列表。里面列出了所有Eclipse能找到的函数、宏、变量等资源。
![ba8572552258ceaf3318dfe33cdc87e297e0a310](https://i-blog.csdnimg.cn/blog_migrate/87e9f588d5d5c3132490b2e124345e55.png)
第4步:编译Linux驱动
Linux驱动不能在Eclipse中直接运行。但可以编译和安装。可以利用build.sh脚本文件来编译和安装Linux驱动。读者可以按照节介绍的方法为工程添加一个Program,并且去掉系统原先的两个建立项前的复选框。其中Argument直接填写脚本文件的路径即可(Location和Working Directory的设置与2.4.5节的设置相同)。本例只设置“Main”页。其他页不需要设置。设置完Program后。编译word_count_eclipse工程,就会在Console视图中显示编译和安装信息,如图6-33所示。
![b931cc81cda94d9832cb09357b16c0c32209d678](https://i-blog.csdnimg.cn/blog_migrate/ad0613801eae91694caf1fda68878c5c.png)
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](https://i-blog.csdnimg.cn/blog_migrate/1e573e4bb98da3cba44ab7b8c0e509d4.png)
第5步:运行测试程序
如果是第一次运行word_count_eclipse_test,需要单击工程右键菜单的“Run As”>“Local C/C++ Application”菜单项。如果以前运行过word_count_eclipse_test,可在Eclipse工具栏运行或调试按钮下拉菜单中选择“word_count_eclipse_test”运行程序。运行程序后会将测试结果输出到Console视图中,如图6-36所示。
![6d6282feac1c577f31803860327b8ffa8ec3fcad](https://i-blog.csdnimg.cn/blog_migrate/7c160838bf5686ce89e0e5b3c43f87e9.png)