不是用的GPBDAT做的 这个通过改变寄存器来控制LED暂时还没搞懂 我这个是直接通过读取后台的BUTTON值来控制LED灯的 都是在2.6.29.4上编译的 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/select.h> #include <sys/time.h> #include <errno.h> #define led_on 1 #define led_off 0 int main(void) { int i; int buttons_fd; char key_value[6]; buttons_fd = open("/dev/buttons", 0); if (buttons_fd < 0) { perror("open device buttons"); exit(1); } int led_fd; struct file *a; led_fd=open("/dev/leds",O_RDWR); if(led_fd==-1) printf("open_leds error"); void led_off_all(void) { int a; for( a=0;a<4;a++) ioctl(led_fd,led_off,a); } for (;;) { fd_set rds; int ret; FD_ZERO(&rds); FD_SET(buttons_fd, &rds); ret = select(buttons_fd + 1, &rds, NULL, NULL, NULL); if (ret < 0) { perror("select"); exit(1); } if (ret == 0) { printf("Timeout./n"); } else if (FD_ISSET(buttons_fd, &rds)) { int ret = read(buttons_fd, key_value, sizeof key_value); if (ret != sizeof key_value) { if (errno != EAGAIN) perror("read buttons/n"); continue; } else { led_off_all(); for (i = 0; i < 5; i++) { int a=key_value[i]; if(a==49) //button 按下后从控制台显示的十进制是49 { printf("key%d is press && led%d is lighting/n",i,i); ioctl(led_fd,led_on,i); } } } } } close(buttons_fd); close(led_fd); }