linzhao789 发表于 2020-8-10 11:28

IMX6ULL开发平台Linux-LED实验(三)

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/** @description : main 主程序* @param - argc : argv 数组元素个数* @param - argv : 具体参数* @return : 0 成功;其他 失败*/int main(int argc, char *argv[]){      int fd, retvalue;      char *filename;      unsigned char databuf;      if(argc != 3){                printf("Error Usage!\r\n");                return -1;      }      filename = argv;      /* 打开 led 驱动 */      fd = open(filename, O_RDWR);      if(fd < 0){                printf("file %s open failed!\r\n", argv);                return -1;      }      databuf = atoi(argv); /* 要执行的操作:打开或关闭 */      /* 向/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);                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_gaCURRENT_PATH := $(shell pwd)obj-m := gpioled.obuild: kernel_moduleskernel_modules:      $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modulesclean:      $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean首先我们在终端输入两个命令(设置两个环境变量):export ARCH=armexport CROSS_COMPILE=arm-linux-gnueabihf-然后执行“make”命令编译模块,编译完成生成gpioled.ko,如下图所示:http://www.eechina.com/data/attachment/album/202008/10/103719jj94552e6j4rg06j.jpg36.6.2 编译应用测试程序输入如下命令编译应用测试程序:arm-linux-gnueabihf-gcc-ogpioled_testgpioled_test.c编译完成后,会生成gpioled_test可执行文件。如下图所示:http://www.eechina.com/data/attachment/album/202008/10/103719d0c1c9xvgqq9qbk1.jpg36.6.3 运行测试启动开发板,将编译好的gpioled.ko驱动模块和gpioled_test应用测试文件拷贝到/lib/modules/4.1.15目录下(检查开发板根文件系统中有没有“/lib/modules/4.1.15”这个目录,如果没有的话需要自行创建一下。开发板中使用的是光盘资料里面提供的busybox文件系统,光盘资料的“i.MX6UL终结者光盘资料\08_开发板系统镜像\03_文件系统镜像\01_Busybox文件系统”目录下)。输入下面命令加载模块:depmodmodprobe gpioled驱动加载成功后,显示下面的信息:http://www.eechina.com/data/attachment/album/202008/10/103719sleivhkca4emakil.jpg可以看出模块加载成功,打印了一下基本信息。然后使用gpioled_test应用测试程序来进行测试LED驱动是否可行。执行下面的命令来打开LED灯:./gpioled_test /dev/gpioled 1然后观察开发板上的LED红灯是否点亮,如果点亮的话,说明驱动工作正常。然后输入下面的命令关闭LED灯:./gpioled_test /dev/gpioled 0观察LED灯是否熄灭。卸载驱动使用下面的命令:rmmod gpioledhttp://www.eechina.com/data/attachment/album/202008/10/104830zgpnipiaieapzuma.jpg


页: [1]
查看完整版本: IMX6ULL开发平台Linux-LED实验(三)