在上一篇文章中已经实现了一个简单的Linux驱动程序,该驱动的功能是统计给定字符串中的单词数。并且在最后已经将该Linux驱动的源代码成功编译成动态Linux驱动模块word_count.ko。下一步就是测试该模块。测试的方法很多,最常用的就是直接在Ubuntu Linux、Android模拟器中测试。当然,这 对于本章实现的Linux驱动是没问题的,但是对于需要直接访问硬件的驱动在Ubuntu Linux上测试就不太方便。在这种情况下就需要在相应的硬件上进行测试。
对于一个Linux驱动程序,一开始可以在UbuntuLinux上做前期开发和测试。对于访问硬件的部分也可以在Ubuntu Linux用软件进行模拟。当基本开发完成后,就需要在开发板或工程样机上使用真实的硬件进行测试。当然,最后还需要在最终销售的手机上进行测试。最终测 试通过,Linux驱动才能算真正开发完成。在开发Linux驱动的过程中一个重要的步骤就是测试。本节将结合实际的开发流程介绍在不同平台上测试 Linux驱动程序。这些测试平台包括UbuntuLinux、Android模拟器和S3C6410开发板。
一、使用Ubuntu Linux测试Linux驱动
本节将介绍如何在Ubuntu Linux下测试驱动程序。由于上一节编写的Linux驱动程序通过4个字节从设备文件(/dev/wordcount)返回单词数,所以不能使用cat 命令测试驱动程序(cat命令不会将这4个字节还原成int类型的值显示)。但可以使用如下命令从日志中查看单词数。
# sh build.sh
# echo 'I love you.' > /dev/wordcount
# dmesg
执行上面的命令后,如果输出如图6-13所示白框中的信息,说明驱动程序成功统计了单词数。
虽然使用echo和dmesg命令可以测试Linux驱动程序,但这种方式并不是真正的测试。为了使测试效果更接近真实环境,一般需要编写专门用于测试的 程序。本节将为word_count驱动编写一个专门的测试程序(test_word_count.c)。test_word_count.c通过直接操 作/dev/wordcount设备文件与word_count驱动进行交互。测试程序的代码如下:
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
int testdev; // 打开设备文件(/dev/wordcount)的句柄
unsigned char buf[4]; // 表示单词数的4个字节
// 打开设备文件
testdev = open("/dev/wordcount", O_RDWR);
// 如果open函数返回-1,表示打开设备文件失败
if (testdev == -1)
{
printf("Cann't open file \n");
return 0;
}
// 如果test_word_count后面跟有命令行参数,程序