嵌入式Linux设备驱动开发之:按键驱动程序实例
11.6.3按键驱动的测试程序
按键驱动程序的测试程序所下所示。在测试程序中,首先打开按键设备文件和gpio设备(包括4个LED和蜂鸣器)文件,接下来,根据按键的输入值(按键ID)的二进制形式,LEDD9~D12发亮(例如,按下11号按键,则D9、D10和D12会发亮),而蜂鸣器当每次按键时发出声响。
/*butt_test.c*/
#includesys/stat.h>
#includefcntl.h>
#includestdio.h>
#includesys/time.h>
#includesys/types.h>
#includeunistd.h>
#includeasm/delay.h>
#includebutt_drv.h
#includegpio_drv.h
main()
{
intbutt_fd,gpios_fd,i;
unsignedcharkey=0x0;
butt_fd=open(BUTTONS_DEVICE_FILENAME,O_RDWR);/*打开按钮设备*/
if(butt_fd==-1)
{
printf(Openbuttondevicebuttonerrr!n);
return0;
}
gpios_fd=open(GPIO_DEVICE_FILENAME,O_RDWR);/*打开GPIO设备*/
if(gpios_fd==-1)
{
printf(Openbuttondevicebuttonerrr!n);
return0;
}
ioctl(butt_fd,0);/*清空键盘缓冲区,后面参数没有意义*/
printf(PressNo.16keytoexitn);
do
{
if(read(butt_fd,key,1)=0)/*读键盘设备,得到相应的键值*/
{
continue;
}
printf(KeyValue=%dn,key);
for(i=0;iLED_NUM;i++)
{
if((key(1i))!=0)
{
ioctl(gpios_fd,LED_D09_SWT+i,LED_SWT_ON);/*LED发亮*/
}
}
ioctl(gpios_fd,BEEP_SWT,BEEP_SWT_ON);/*发声*/
sleep(1);
for(i=0;iLED_NUM;i++)
{
ioctl(gpios_fd,LED_D09_SWT+i,LED_SWT_OFF);/*LED熄灭*/
}
ioctl(gpios_fd,BEEP_SWT,BEEP_SWT_OFF);
}while(key!=16);/*按16号键则退出*/
close(gpios_fd);
close(butt_fd);
return0;
}
首先编译和加载按键驱动程序,而且要创建设备文件节点。
$makeclean;make/*驱动程序的编译*/
$insmodbutt_dev.ko/*加载buttons设备驱动*/
$cat/proc/devices/*通过这个命令可以查到buttons设备的主设备号*/
$mknod/dev/buttonsc2520/*假设主设备号为252,创建设备文件节点*/
接下来,编译和加载GPIO驱动程序,而且要创建设备文件节点。
$makeclean;make/*驱动程序的编译*/
$insmodgpio_drv.ko/*加载GPIO驱动*/
$cat/proc/devices/*通过这个命令可以查到GPIO设备的主设备号*/
$mknod/dev/gpioc2510/*假设主设备号为251,创建设备文件节点*/
然后编译并运行驱动测试程序。
$arm-linux-gcc–obutt_testbutt_test.c
$./butt_test
linux操作系统文章专题:linux操作系统详解(linux不再难懂)linux相关文章:linux教程
蜂鸣器相关文章:蜂鸣器原理
评论