Linux嵌入式系统开发之Led开发
时间:2010-11-06 来源:☆&寒 烟☆
"革命?革谁的命啊,是PC吗,把电源拔了,不就可以解决问题了,还那么费劲.."小王眨巴着眼睛说。
"啊?我晕,算啦,不跟你纠结这些问题了,咱们开始正题吧"我苦笑而无奈的说。
看看咱们的开发板,有四个led灯,对吧,这次就是向办法用程序来点亮它,请看下边的代码:
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/ioctl.h> int main(int argc, char **argv) { int on; int led_no; int fd; if(argc != 3 ||sscanf(argv[1],"%d",&led_no) !=1 || sscanf(argv[2],"%d",&on) !=1 || on < 0 || on > 1 || led_no <0 || led_no>3) { fprintf(stderr,"Usage:Leds led_no 0|1\n"); exit(1); } //打开/dev/leds0设备文件 fd = open("/dev/leds0",0); if(fd < 0) { fd = open("/dev/leds",0); } if(fd <0 ) { perror("open device leds"); exit(1); } //通过系统调用ioctl和输入的参数控制led ioctl(fd, on ,led_no); //关闭设备句柄 close(fd); return 0; }
看这段代码,极其相当简单吧,在宿主机上用arm-linux-gcc –o led_control led_test,就会生成led_control的程序,通过上节咱们说的ftp下载到开发板上,就可以运行了,比如:
./led_control 0 1 //点亮0号灯
./led_control 1 1 //点亮1号灯
./led_control 2 1 //点亮2号灯
./led_control 3 1 //点亮3号灯
"快看快看,真的亮了哦,真好玩.."小王高兴的拍着手说。
"小王,别玩了,你给我分析下代码,看看你的理解能力。”
"嗯?我感觉关键在于ioctl(fd, on ,led_no); 其他都是些检测和准备工作,对吧?而且有种奇怪的感觉.."小王试探着说。
"继续"
"ioctl(fd, on ,led_no); 如果led设备是字符设备的话, 这个函数就是不是调用你前边给我讲的那么多的字符设备驱动中的ioctl()函数"小王不自信的说。
"嗯,真聪明,你能把今天的和前边的联系起来看,真是不错,不过这段时间咱们就把设备驱动放放,先做上层的调用控制设备,等先有个形象的认识后,我们在回过头来,细看底层对应的设备驱动,会更加形象的认识理解"我心里的那个兴奋劲,真是不用提了..