printf(\ [3] All Display\\n\ printf(\ [4] Clear Display\\n\ printf(\ [5] Write Display\\n\ printf(\ [C] Close Device\\n\ printf(\ [x] Exit Test\\n\ printf(\ ***********************\\n\ printf(\ }
int main(intargc, char **argv) { intfd=-1; intnum=0; charch=0x00; unsigned char led[4]; display_menu(); while(1) {
ch=getchar();
switch(ch) { case '0': if(fd>0) { printf(\ } else { fd = open(SEG_DEV, O_RDWR); if(fd< 0) printf(\ else printf(\ } display_menu(); break; case '1': if(fd>0) { appear_same(fd); clear_led(fd); }
else
printf(\ display_menu(); break; case '2': if(fd>0) { appear_roll(fd); clear_led(fd); } else
printf(\display_menu(); break; case '3': if(fd>0) display_led(fd); else printf(\display_menu(); break; case '4': if(fd>0) clear_led(fd); else printf(\display_menu(); break; case '5': if(fd>0) { printf(“please input a number(0 <= number <=9999):”); scanf(“%d”, &num); if (num<0 || num> 9999) printf(“can not display this number.\\n”); else { led[0]=num/1000; led[1]=(num00)/100; led[2]=(num0)/10; led[3]=num; write(fd,led,4); } } else
printf(\display_menu(); break; case 'c': case 'C': if(fd>0) { clear_led(fd); sleep(1); close(fd); printf(\ fd=-1; } display_menu(); break; case 'x': case 'X': if(fd>0) { clear_led(fd); sleep(1); close(fd); } exit(0); break; } } return(0); }
2) 测试程序的Makefile文件内容: seg7_test:seg7_test.c arm-linux-gcc seg7_test.c -o seg7_test clean: rm -f seg7_test
5. 七段数码管驱动的交叉编译
1) 进入目录/root/Backup/source下,解压缩驱动源代码到指定路径。
图4
2) 交叉编译驱动:进入/root/Backup/Driver/xidian_seg7目录下,编译源程序。
图5
3) 在确认测试代码和Makefile文件编写无误之后,交叉编译测试代码。
图6
4) 调用file命令查看文件格式,编译出来的可执行程序seg7_test是ARM
的ELF文件。
图7
6. 驱动程序的移植、注册与测试
1) 首先确认实验板和主机的网络连通,然后调用scp命令将测试程序和驱
动程序模块拷贝到目标机上(目标机root用户的密码为“xidian”)。
图8
拷贝成功后,驱动和测试程序保存在目标机的/opt目录下面,如图9所示:
图9
2) 在目标机上利用mknod命令建立设备文件节点;并利用insmod命令动
态加载驱动模块,同时利用lsmod命令查看驱动模块的加载情况。
图10
执行完以上三条命令后,驱动模块成功添加进内核中,完成注册。 3) 在目标机的/opt目录下执行驱动测试程序。