36.5 编写应用测试程序 创建应用测试程序gpioled_test.c,内容如下: #include "stdio.h" #include "unistd.h" #include "sys/types.h" #include "sys/stat.h" #include "fcntl.h" #include "stdlib.h" #include "string.h" #define LEDOFF 0 #define LEDON 1 /* * @param - argc : argv 数组元素个数 * @param - argv : 具体参数 */ int main(int argc, char *argv[]) { int fd, retvalue; char *filename; unsigned char databuf[1]; if(argc != 3){ printf("Error Usage!\r\n"); return -1; } filename = argv[1]; /* 打开 led 驱动 */ fd = open(filename, O_RDWR); if(fd < 0){ printf("file %s open failed!\r\n", argv[1]); return -1; } databuf[0] = atoi(argv[2]); /* 要执行的操作:打开或关闭 */ /* 向/dev/led 文件写入数据 */ retvalue = write(fd, databuf, sizeof(databuf)); if(retvalue < 0){ printf("LED Control Failed!\r\n"); close(fd); return -1; } retvalue = close(fd); /* 关闭文件 */ if(retvalue < 0){ printf("file %s close failed!\r\n", argv[1]); return -1; } return 0; } gpioled_test.c应用测试程序还是比较简单的,就是对LED驱动的打开、关闭、写操作,在运行程序时需要指定设备文件名称和要执行的操作。 36.6 编译运行测试36.6.1 编译LED驱动文件和前面章节中驱动测试程序一样需要一个Makefile文件,只是将obj-m的值改为gpioled.o,Makefile文件内容如下: KERNELDIR := /home/topeet/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga CURRENT_PATH := $(shell pwd) obj-m := gpioled.o build: kernel_modules kernel_modules: $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules clean: $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean 首先我们在终端输入两个命令(设置两个环境变量): export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf- 然后执行“make”命令编译模块,编译完成生成gpioled.ko,如下图所示: 36.6.2 编译应用测试程序输入如下命令编译应用测试程序: arm-linux-gnueabihf-gcc -o gpioled_test gpioled_test.c 编译完成后,会生成gpioled_test可执行文件。如下图所示: 36.6.3 运行测试启动开发板,将编译好的gpioled.ko驱动模块和gpioled_test应用测试文件拷贝到/lib/modules/4.1.15目录下(检查开发板根文件系统中有没有“/lib/modules/4.1.15”这个目录,如果没有的话需要自行创建一下。开发板中使用的是光盘资料里面提供的busybox文件系统,光盘资料的“i.MX6UL终结者光盘资料\08_开发板系统镜像\03_文件系统镜像\01_Busybox文件系统”目录下)。输入下面命令加载模块: depmod modprobe gpioled 驱动加载成功后,显示下面的信息: 可以看出模块加载成功,打印了一下基本信息。 然后使用gpioled_test应用测试程序来进行测试LED驱动是否可行。执行下面的命令来打开LED灯: ./gpioled_test /dev/gpioled 1 然后观察开发板上的LED红灯是否点亮,如果点亮的话,说明驱动工作正常。 然后输入下面的命令关闭LED灯: ./gpioled_test /dev/gpioled 0 观察LED灯是否熄灭。 卸载驱动使用下面的命令: rmmod gpioled
|