天天看点

《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工程。

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

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

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

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

注意

建立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目录中的链接。

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

建立完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所示。

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

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

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

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

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

第4步:编译linux驱动

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

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

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所示。

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

第5步:运行测试程序

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

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