二,Makefile文件:
obj-m:=My_led.o
CC=arm-linux-gcc
KERNELDIR=/usr/local/opt/EmbedSky/linux-2.6.30.4
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
三,驱动对应的上层应用程序源代码My_Led_Test.c
#include
#include
#include
#include
#include
#include
int main()
{
int fd,i,cmd=0;
fd=open("/dev/My_led",0);
if (fd<0)
{
printf("open led_driver error");
exit(1);
}
while(1)
{
switch(cmd)
{
case 0:
printf("All off\n");
for(i = 0;i < 4;i ++)
ioctl(fd,0,i);
for(i=0;i<100;++i);
case 1:
printf("light first led\n");
ioctl(fd,1,0);
for(i=0;i<100;++i);
case 2:
printf("light second led\n");
ioctl(fd,0,0);
ioctl(fd,1,1);
for(i=0;i<100;++i);
case 3:
printf("light third led\n");
ioctl(fd,0,1);
ioctl(fd,1,2);
for(i=0;i<100;++i);
case 4:
printf("light fourth led\n");
ioctl(fd,0,2);
ioctl(fd,1,3);
for(i=0;i<100;++i);
case 5:
printf("All light \n");
for(i = 0;i < 4;i ++)
ioctl(fd,1,i);
for(i=0;i<100;++i);
}
}
return 0;
}
源码分析:
case0,case1,case2,case3,case4,case5分别表示四盏灯全灭,第一盏灯亮,第二盏灯亮,第三盏灯亮,第四盏灯亮,四盏灯全亮,这四个case彼此之间都使用一个空循环for来实现延迟的效果,从而最终实现LED灯闪烁的效果。