使用Eclipse开发和测试Linux驱动程序
在前面几节开发的word_count驱动和测试程序大多都需要在Linux终端进行编译(Android应用程序除外)和运行,而且也无法跟踪到Linux内核函数、变量、宏的内部(除非自己到Linux内核源代码中就寻找这些源代码文件),这并不利于深入了解Linux内核技术。在本节将为读者展示如何在Eclipse中开发Linux驱动程序,并且可以像跟踪Java代码一样直接跟踪到Linux内核源代码。除此之外,Eclipse也可以开发基于C/C++的测试程序。本节的例子需要在Eclipse中安装CDT插件,还没安装CDT的读者请按照2.4.2节介绍在方法安装CDT。
在Eclipse中开发Linux驱动程序
在Ubuntu Linux中通常使用vi或gedit来编辑C/C++源代码文件。在Linux的其他发行版vi文本编辑器一般是存在的,当然,也可以使用任何自己喜欢的文本编辑器来编辑C/C++源代码文件。虽然很多文本编辑器都可以根据文件扩展名使源代码的关键字变色(如显示的是.c文件,会根据C语言的规则以不同颜色显示源代码中的不同部分),但除此之外并没有什么特殊的功能辅助编码工作。为了获得更多的辅助编码功能,本节将介绍如何利用Eclipse自身的功能开发Linux驱动,并自动进行安装。
本节示例的路径如下。
随书光盘:<光盘根目录>/sources/ch06/word_count/word_count_eclipse
虚拟环境:~/drivers/ch06/word_count/word_count_eclipse
使用Eclipse开发Linux驱动程序的步骤如下。
第1步:建立C工程
在Eclipse中单击“File”>“New”>“Other”菜单项,打开“New”对话框,选择“C Project”项(选“C++ Project”项也可),如图6-25所示。
然后单击“Next”按钮,并按照如图6-26所示进行设置,最后单击“Finish”按钮建立一个空的C工程。
▲图6-25 选择“C Project”项
▲图6-26 选择C工程存放的路径
第2步:建立C源代码文件链接
单击word_count_eclipse工程右键菜单中的“New”>“Soruce Folder”菜单项目,打开“New Soruce Folder”对话框,在“Folder name”文本框中输入“src”,如图6-27所示。然后单击“Finish”按钮建立一个保存Linux驱动源代码文件的目录。
▲图6-27 建立保存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目录中的链接。
▲图6-28 选择“File System”项
▲图6-29 建立word_count.c文件中src目录中的链接
建立完word_count.c文件的链接后,我们会发现虽然在Eclipse工程中查看,src目录中有一个word_count.c文件,但从文件浏览器查看,src目录中什么也没有。
第3步:设置include路径
这一步解决了如下两个问题。
q 可以跟踪进Linux内核源代码。
q 输入函数、宏等内容时显示代码提示。
为了实现这两个功能,就需要让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
▲图6-30 设置include路径
现在单击“OK”按钮关闭“Properties”对话框。这时word_count.c文件的错误一一消失了。在Eclipse中打开word_count.c文件,按住Ctrl键,用鼠标左键单击某一个Linux内核函数(如copy_to_user),或直接在某个函数、宏上按F3键,会直接跟踪到Linux内核函数的定义部分,如图6-31所示。
▲图6-31 跟踪Linux内核函数
当按下内容助手(Content Assist)快捷键(可通过单击“Help”>“Key Assist”菜单项查看当前的内容助手快捷键),会显示如图6-32所示的内容助手列表。里面列出了所有Eclipse能找到的函数、宏、变量等资源。
▲图6-32 内容辅助列表
第4步:编译Linux驱动
Linux驱动不能在Eclipse中直接运行。但可以编译和安装。可以利用build.sh脚本文件来编译和安装Linux驱动。读者可以按照2.4.5节介绍的方法为工程添加一个Program,并且去掉系统原先的两个建立项前的复选框。其中Argument直接填写脚本文件的路径即可(Location和Working Directory的设置与2.4.5节的设置相同)。本例只设置“Main”页。其他页不需要设置。设置完Program后。编译word_count_eclipse工程,就会在Console视图中显示编译和安装信息,如图6-33所示。
在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工程的路径如下。
随书光盘:<光盘根目录>/sources/ch06/word_count/word_count_eclipse_test 虚拟环境:~/drivers/ch06/word_count/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所示。
▲图6-34 “Make Targets”对话框
▲图6-35 word_count_eclipse_test工程的结构 第5步:运行测试程序
如果是第一次运行word_count_eclipse_test,需要单击工程右键菜单的“Run As”>“Local C/C++ Application”菜单项。如果以前运行过word_count_eclipse_test,可在Eclipse工具栏运行或调试按钮下拉菜单中选择“word_count_eclipse_test”运行程序。运行程序后会将测试结果输出到Console视图中,如图6-36所示。
▲图6-36 输出测试结
小结
统计单词数的word_count驱动是本书实现的第一个完整的Linux驱动。虽然word_count驱
动的功能并不复杂,但足以让以前从未接触过Linux驱动的开发人员了解Linux驱动的完整开发过程。本章不仅仅是介绍一个示例,还介绍了如何使用不同的方法测试Linux驱动。这些方法主要以平台来区分。例如,可以直接使用Ubuntu Linux测试Linux驱动。有很多驱动只要再利用相应的Linux内核编译一遍,就可以直接安装在Android、Linux等嵌入式系统中。当然,也可以直接在Android模拟器、开发板甚至手机上测试Linux驱动。为了更快地开发Linux驱动,也可以考虑采用6.5节介绍的Eclipse集成开发环境。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务