LED驱动程序的测试
2017-04-15 10:29
253 查看
前面大概聊了一下本人对led驱动的学习情况以及一些总结,现在我们用一个小的测试程序来玩一下
先给出基本的Makefile:
再给出测试程序test.c:
测试小程序就是根据驱动代码的一些函数调用来写,这里要注意判断出错问题,可以用来检查程序。
那么怎么测试呢?
1.先将上述Makefile和上篇的led.c驱动放在同一目录下,make编译生成“.ko”文件。
2.因为我们要把测试程序放到开发板上去测试,所以我们应该使用交叉编译器arm-linux-gcc来编译上述test.c文件,生成可执行文件。
3.将上述生成的.ko文件和可执行文件烧到开发板中:
![](https://img-blog.csdn.net/20170415141119876?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUGV0ZXJfdGFuZzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里的地址为我们的服务器地址。
4.在开发板中用insmod安装我们的led模块:
![](https://img-blog.csdn.net/20170415141400474?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUGV0ZXJfdGFuZzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
此时lsmod看看我们安装的驱动模块:
![](https://img-blog.csdn.net/20170415141505205?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUGV0ZXJfdGFuZzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
驱动安装好以后我们就该创建设备节点了,因为要找次设备号嘛,主设备号都是统一的,我们的板子有4个led,亮哪个灭哪个由次设备号决定,我们先查一下我们的主设备号:
![](https://img-blog.csdn.net/20170415141844825?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUGV0ZXJfdGFuZzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
我们的led为251,所有用mknod建立设备节点:
最后给我们的test可执行文件可执行权限,然后执行:
![](https://img-blog.csdn.net/20170415143917608?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUGV0ZXJfdGFuZzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
我这里创建了四个节点,点亮了四个led,所以根据测试代码,我的led灯是流水灯,这里的延时可以根据需要自己设置。
当然我们如果要卸载驱动,既可以rmmod led,记得查看:
![](https://img-blog.csdn.net/20170415143633826?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUGV0ZXJfdGFuZzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
有了这个我们才可以卸载。
先给出基本的Makefile:
1 obj-m := led.o 2 KERNEL_DIR := ~/kernel/linux-3.0.54/ 3 PWD := $(shell pwd) 4 all: 5 make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules 6 clean: 7 rm *.o *.ko *.mod.c 8 9 .PHONY:clean
再给出测试程序test.c:
t.c 1 /********************************************************************************* 2 * Copyright: (C) 2017 minda 3 * All rights reserved. 4 * 5 * Filename: test.c 6 * Description: This file 7 * 8 * Version: 1.0.0(03/29/2017) 9 * Author: tangyanjun <519656780@qq.com> 10 * ChangeLog: 1, Release initial version on "03/29/2017 02:55:07 PM" 11 * 12 ********************************************************************************/ 13 #include<stdio.h> 14 #include<stdlib.h> 15 #include<unistd.h> 16 #include<fcntl.h> 17 #include<errno.h> 18 #include<string.h> 19 #include<asm/ioctl.h> 20 #ifndef __KERNEL__ 21 #include <sys/ioctl.h> 22 #endif 23 24 #define PLATDRV_MAGIC 0X60 25 #define LED_ON _IO (PLATDRV_MAGIC, 0x19) 26 #define LED_OFF _IO (PLATDRV_MAGIC, 0x18) 27 #define LEN_LED 4 28 #define LED_BUF 128 29 30 int main(int argc,char **argv) 31 { 32 int fd[LEN_LED]; 33 char dev_name[LED_BUF]; 34 int i; 35 36 for(i=0;i<LEN_LED;i++) 37 { 38 snprintf(dev_name,sizeof(dev_name),"/dev/led%d",i); 39 fd[i]=open(dev_name,O_RDWR,0755); 40 if(fd[i]<0) 41 { 42 printf("open failure:%s",strerror(errno)); 43 } 44 } 45 46 while(1) 47 { 48 for(i=0;i<LEN_LED;i++) 49 { 50 // ioctl(fd[i],LED_OFF); 51 // sleep(0.5); 52 ioctl(fd[i],LED_ON); 53 sleep(1); 54 ioctl(fd[i],LED_OFF); 55 sleep(0.5); 56 } 57 58 59 } 60 61 for(i=0;i<LEN_LED;i++) 62 { 63 close(fd[i]); 64 return 0; 65 } }
测试小程序就是根据驱动代码的一些函数调用来写,这里要注意判断出错问题,可以用来检查程序。
那么怎么测试呢?
1.先将上述Makefile和上篇的led.c驱动放在同一目录下,make编译生成“.ko”文件。
2.因为我们要把测试程序放到开发板上去测试,所以我们应该使用交叉编译器arm-linux-gcc来编译上述test.c文件,生成可执行文件。
3.将上述生成的.ko文件和可执行文件烧到开发板中:
这里的地址为我们的服务器地址。
4.在开发板中用insmod安装我们的led模块:
此时lsmod看看我们安装的驱动模块:
驱动安装好以后我们就该创建设备节点了,因为要找次设备号嘛,主设备号都是统一的,我们的板子有4个led,亮哪个灭哪个由次设备号决定,我们先查一下我们的主设备号:
我们的led为251,所有用mknod建立设备节点:
mknod /dev/led0 c 251 0 mknod /dev/led1 c 251 1 mknod /dev/led2 c 251 2 mknod /dev/led3 c 251 3
最后给我们的test可执行文件可执行权限,然后执行:
我这里创建了四个节点,点亮了四个led,所以根据测试代码,我的led灯是流水灯,这里的延时可以根据需要自己设置。
当然我们如果要卸载驱动,既可以rmmod led,记得查看:
有了这个我们才可以卸载。
相关文章推荐
- LINUX2.6.26.6内核下的第一个LED驱动程序测试成功!
- 11.LED驱动程序设计(1)-字符设备控制
- LED灯显示字符驱动程序-linux2.6LED显示驱动
- 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
- 最简单的驱动:LED驱动程序与应用程序解析
- Linux下fl2440之led驱动编写以及测试
- TQ2440 LED驱动程序
- 字符设备驱动--LED驱动程序
- FactoryKit测试LED灯
- (五)编写Android App测试Hello驱动程序API
- exynos4412开发板LED驱动程序
- 普通字符设备LED驱动程序(IO映射内存实现)
- Linux驱动:LED驱动测试
- linux设备驱动之LED驱动测试
- 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
- 基于2440的SPI测试驱动程序以及应用程序(实例)
- fl2440LED驱动程序总结
- OK6410 Linux下LED驱动程序
- 如何在 Windows CE 5.0 中开发和测试设备驱动程序
- LED测试方案及光谱图