嵌入式Linux設(shè)備驅(qū)動(dòng)開發(fā)之:按鍵驅(qū)動(dòng)程序?qū)嵗?/h1>
本文引用地址:http://butianyuan.cn/article/257107.htm11.6.3按鍵驅(qū)動(dòng)的測試程序
按鍵驅(qū)動(dòng)程序的測試程序所下所示。在測試程序中,首先打開按鍵設(shè)備文件和gpio設(shè)備(包括4個(gè)LED和蜂鳴器)文件,接下來,根據(jù)按鍵的輸入值(按鍵ID)的二進(jìn)制形式,LEDD9~D12發(fā)亮(例如,按下11號(hào)按鍵,則D9、D10和D12會(huì)發(fā)亮),而蜂鳴器當(dāng)每次按鍵時(shí)發(fā)出聲響。
/*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);/*打開按鈕設(shè)備*/
if(butt_fd==-1)
{
printf(Openbuttondevicebuttonerrr!n);
return0;
}
gpios_fd=open(GPIO_DEVICE_FILENAME,O_RDWR);/*打開GPIO設(shè)備*/
if(gpios_fd==-1)
{
printf(Openbuttondevicebuttonerrr!n);
return0;
}
ioctl(butt_fd,0);/*清空鍵盤緩沖區(qū),后面參數(shù)沒有意義*/
printf(PressNo.16keytoexitn);
do
{
if(read(butt_fd,key,1)=0)/*讀鍵盤設(shè)備,得到相應(yīng)的鍵值*/
{
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發(fā)亮*/
}
}
ioctl(gpios_fd,BEEP_SWT,BEEP_SWT_ON);/*發(fā)聲*/
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號(hào)鍵則退出*/
close(gpios_fd);
close(butt_fd);
return0;
}
首先編譯和加載按鍵驅(qū)動(dòng)程序,而且要?jiǎng)?chuàng)建設(shè)備文件節(jié)點(diǎn)。
$makeclean;make/*驅(qū)動(dòng)程序的編譯*/
$insmodbutt_dev.ko/*加載buttons設(shè)備驅(qū)動(dòng)*/
$cat/proc/devices/*通過這個(gè)命令可以查到buttons設(shè)備的主設(shè)備號(hào)*/
$mknod/dev/buttonsc2520/*假設(shè)主設(shè)備號(hào)為252,創(chuàng)建設(shè)備文件節(jié)點(diǎn)*/
接下來,編譯和加載GPIO驅(qū)動(dòng)程序,而且要?jiǎng)?chuàng)建設(shè)備文件節(jié)點(diǎn)。
$makeclean;make/*驅(qū)動(dòng)程序的編譯*/
$insmodgpio_drv.ko/*加載GPIO驅(qū)動(dòng)*/
$cat/proc/devices/*通過這個(gè)命令可以查到GPIO設(shè)備的主設(shè)備號(hào)*/
$mknod/dev/gpioc2510/*假設(shè)主設(shè)備號(hào)為251,創(chuàng)建設(shè)備文件節(jié)點(diǎn)*/
然后編譯并運(yùn)行驅(qū)動(dòng)測試程序。
$arm-linux-gcc–obutt_testbutt_test.c
$./butt_test
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux相關(guān)文章:linux教程
蜂鳴器相關(guān)文章:蜂鳴器原理
11.6.3按鍵驅(qū)動(dòng)的測試程序
按鍵驅(qū)動(dòng)程序的測試程序所下所示。在測試程序中,首先打開按鍵設(shè)備文件和gpio設(shè)備(包括4個(gè)LED和蜂鳴器)文件,接下來,根據(jù)按鍵的輸入值(按鍵ID)的二進(jìn)制形式,LEDD9~D12發(fā)亮(例如,按下11號(hào)按鍵,則D9、D10和D12會(huì)發(fā)亮),而蜂鳴器當(dāng)每次按鍵時(shí)發(fā)出聲響。
/*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);/*打開按鈕設(shè)備*/
if(butt_fd==-1)
{
printf(Openbuttondevicebuttonerrr!n);
return0;
}
gpios_fd=open(GPIO_DEVICE_FILENAME,O_RDWR);/*打開GPIO設(shè)備*/
if(gpios_fd==-1)
{
printf(Openbuttondevicebuttonerrr!n);
return0;
}
ioctl(butt_fd,0);/*清空鍵盤緩沖區(qū),后面參數(shù)沒有意義*/
printf(PressNo.16keytoexitn);
do
{
if(read(butt_fd,key,1)=0)/*讀鍵盤設(shè)備,得到相應(yīng)的鍵值*/
{
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發(fā)亮*/
}
}
ioctl(gpios_fd,BEEP_SWT,BEEP_SWT_ON);/*發(fā)聲*/
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號(hào)鍵則退出*/
close(gpios_fd);
close(butt_fd);
return0;
}
首先編譯和加載按鍵驅(qū)動(dòng)程序,而且要?jiǎng)?chuàng)建設(shè)備文件節(jié)點(diǎn)。
$makeclean;make/*驅(qū)動(dòng)程序的編譯*/
$insmodbutt_dev.ko/*加載buttons設(shè)備驅(qū)動(dòng)*/
$cat/proc/devices/*通過這個(gè)命令可以查到buttons設(shè)備的主設(shè)備號(hào)*/
$mknod/dev/buttonsc2520/*假設(shè)主設(shè)備號(hào)為252,創(chuàng)建設(shè)備文件節(jié)點(diǎn)*/
接下來,編譯和加載GPIO驅(qū)動(dòng)程序,而且要?jiǎng)?chuàng)建設(shè)備文件節(jié)點(diǎn)。
$makeclean;make/*驅(qū)動(dòng)程序的編譯*/
$insmodgpio_drv.ko/*加載GPIO驅(qū)動(dòng)*/
$cat/proc/devices/*通過這個(gè)命令可以查到GPIO設(shè)備的主設(shè)備號(hào)*/
$mknod/dev/gpioc2510/*假設(shè)主設(shè)備號(hào)為251,創(chuàng)建設(shè)備文件節(jié)點(diǎn)*/
然后編譯并運(yùn)行驅(qū)動(dòng)測試程序。
$arm-linux-gcc–obutt_testbutt_test.c
$./butt_test
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關(guān)文章:linux教程
蜂鳴器相關(guān)文章:蜂鳴器原理
評論