999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Linux設(shè)備驅(qū)動(dòng)模塊設(shè)計(jì)實(shí)例分析

2016-03-22 11:20:50桂林電子科技大學(xué)信息科技學(xué)院趙志鵬
電子世界 2016年1期
關(guān)鍵詞:功能模塊

桂林電子科技大學(xué)信息科技學(xué)院 趙志鵬

?

Linux設(shè)備驅(qū)動(dòng)模塊設(shè)計(jì)實(shí)例分析

桂林電子科技大學(xué)信息科技學(xué)院趙志鵬

【摘要】Linux設(shè)備驅(qū)動(dòng)屬于內(nèi)核的一部分,在嵌入式系統(tǒng)開(kāi)發(fā)中,驅(qū)動(dòng)程序的設(shè)計(jì)是硬件設(shè)計(jì)的關(guān)鍵部分,本文以buzzer的驅(qū)動(dòng)設(shè)計(jì)為例,詳細(xì)分析了硬件驅(qū)動(dòng)設(shè)計(jì)流程,以及在程序設(shè)計(jì)中的各個(gè)重要功能模塊及其相互關(guān)系。

【關(guān)鍵詞】Linux硬件設(shè)備驅(qū)動(dòng);設(shè)計(jì)流程;功能模塊

1 驅(qū)動(dòng)的功能

當(dāng)前社會(huì)中,嵌入式系統(tǒng)開(kāi)發(fā)設(shè)計(jì)滲透到了生活的各個(gè)領(lǐng)域和方方面面,在嵌入式系統(tǒng)開(kāi)發(fā)設(shè)計(jì)中,軟件設(shè)計(jì)和硬件環(huán)環(huán)相扣,密不可分,其中硬件是設(shè)計(jì)的底層和基礎(chǔ),是軟件運(yùn)行的平臺(tái),其重要性不言而喻。

作為嵌入式系統(tǒng)硬件設(shè)計(jì)的重要組成部分,設(shè)備驅(qū)動(dòng)程序的編寫是我們嵌入式開(kāi)發(fā)人員必須完成的工作。設(shè)備的驅(qū)動(dòng)就是驅(qū)使硬件設(shè)備工作,它直接和底層硬件打交道,按照硬件設(shè)備的具體工作方式,執(zhí)行固定的一些操作,比如進(jìn)行設(shè)備的寄存器讀寫,完成設(shè)備的輪詢、中斷處理、DMA通信等。

因此,驅(qū)動(dòng)是硬件和應(yīng)用軟件之間交互的一個(gè)平臺(tái),通過(guò)驅(qū)動(dòng)程序,實(shí)現(xiàn)硬件功能訴求和軟件應(yīng)用程序完成的一種交流,用戶通過(guò)應(yīng)用程序只需要調(diào)用系統(tǒng)應(yīng)用軟件的一個(gè)標(biāo)準(zhǔn)編程接口就能夠完成相應(yīng)的功能。

2 驅(qū)動(dòng)程序編寫步驟

2.1查看分析原理圖

buzzer蜂鳴器采用了電磁式蜂鳴器,此電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片以及外殼組成。當(dāng)電路導(dǎo)通后,振蕩器產(chǎn)生的音頻新型號(hào)電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)。振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性的震

動(dòng)發(fā)聲,在蜂鳴器報(bào)警裝置中,采用了PWM的方式,占空比為1/2,報(bào)警時(shí)間設(shè)置為10s。

2.2編寫驅(qū)動(dòng)代碼

Linux內(nèi)核的一個(gè)模塊可以以兩種方式被編譯和加載: 第一直接編譯進(jìn)Linux內(nèi)核,隨同Linux啟動(dòng)時(shí)加載;第二編譯成一個(gè)可加載和刪除的模塊,使用insmod加載,但依賴于相關(guān)的配置文件,rmmod刪除。這種方式控制了內(nèi)核的大小,而模塊一旦被插入內(nèi)核,它就和內(nèi)核其他部分一樣。

編寫一個(gè)驅(qū)動(dòng)首先涉及到一個(gè)頭文件,驅(qū)動(dòng)程序一般包括三個(gè)頭文件,分別為:。一般在c里面,.h文件一般用作調(diào)用庫(kù)的功能,在很多的場(chǎng)合,源代碼不便向用戶公開(kāi),只要向用戶提供頭文件和二進(jìn)制的庫(kù)即可。在頭文件里面,含有各種函數(shù)的定義,變量的定義以及頭文件的定義,當(dāng)使用頭文件的時(shí)候,就可以使用頭文件定義的資源了。

在結(jié)構(gòu)上驅(qū)動(dòng)程序一般會(huì)包括三個(gè)基本的部分,第一個(gè)是申請(qǐng)?jiān)S可證,相當(dāng)于世界linux內(nèi)核驅(qū)動(dòng)通用性許可證,有了許可證在編譯的時(shí)候才不會(huì)報(bào)錯(cuò),否則linux內(nèi)核會(huì)說(shuō)此模塊非法加載。第二個(gè)為加載函數(shù),這個(gè)函數(shù)是驅(qū)動(dòng)程序模塊的入口,第三個(gè)為卸載函數(shù),與加載函數(shù)相反,當(dāng)然標(biāo)準(zhǔn)的驅(qū)動(dòng)程序還包含作者信息、編寫日期等信息等,但這個(gè)不是必要的。

(1)加載函數(shù)

加載函數(shù)是驅(qū)動(dòng)一個(gè)程序的入口,類似于應(yīng)用程序中主程序中的main函數(shù),當(dāng)運(yùn)行一個(gè)驅(qū)動(dòng)程序時(shí),系統(tǒng)首先找到加載函數(shù),怎樣識(shí)別哪個(gè)是加載函數(shù)呢?系統(tǒng)內(nèi)核自己的一套識(shí)別機(jī)制,在函數(shù)中加上__init,系統(tǒng)就會(huì)識(shí)別這個(gè)函數(shù)是加載函數(shù)。在加載函數(shù)中加上static靜態(tài)變量函數(shù),表明此函數(shù)只能被源程序使用,不能被源程序以外的函數(shù)調(diào)用。

static int __init s5pc100_pwm_init (void)//buzzer加載函數(shù)

{

int ret;

devno = MKDEV(pwm_major, pwm_minor);//申請(qǐng)?jiān)O(shè)備號(hào)

ret=register_chrdev_region(devno,device_of_number, "buzzer");//注冊(cè)設(shè)備號(hào)

if(ret<0) //如果注冊(cè)不成功,結(jié)束程序

goto err1;

cdev_init(&cdev, &s5pc100_pwm_fops);//初始化設(shè)備

cdev.owner = THIS_MODULE;

ret=cdev_add(&cdev,devno,device_of_number); //注冊(cè)設(shè)備

}

(2) 卸載函數(shù)

卸載函數(shù)與加載函數(shù)相反,當(dāng)系統(tǒng)程序運(yùn)行結(jié)束時(shí),就要執(zhí)行卸載函數(shù),將所申請(qǐng)的空間釋放掉,否則常此以往就會(huì)使系統(tǒng)的剩余空間越來(lái)越少,甚至系統(tǒng)崩潰。

static void __exit s5pc100_pwm_exit (void)

iounmap(gpdcon);//釋放gpdcon配置寄存器的虛擬空間

iounmap(timer_base);

cdev_del(&cdev);//卸載設(shè)備

unregister_chrdev_region(devno, device_of_number);//卸載設(shè)備號(hào)

printk (KERN_INFO "Goodbye world ");

}

(3) buzzer采用的io的打開(kāi)方式

采用了static變量的ioctl的打開(kāi)方式,ioctl可以控制I/O設(shè)備 ,提供了一種獲得設(shè)備信息和向設(shè)備發(fā)送控制參數(shù)的手段。用于向設(shè)備發(fā)控制和配置命令 ,有些命令需要控制參數(shù),這些數(shù)據(jù)是不能用read / write 讀寫的。這個(gè)時(shí)候就可以用ioctl的方式來(lái)達(dá)到這個(gè)目的。

static int s5pc100_pwm_ioctl(struct inode *inode, struct file *file,

unsigned int cmd, unsigned long arg)

switch(cmd)//采用switch語(yǔ)句,當(dāng)有命令響應(yīng)時(shí)執(zhí)行

{

case PWM_ON:

//0x2<<8開(kāi)始,0x9<<8 自動(dòng)重載,反相輸出

writel((readl(timer_base + S5PC100_TCON) & ~(0xf << 8))

| 0x2 << 8, timer_base + S5PC100_TCON);

writel((readl(timer_base + S5PC100_TCON) & ~(0xf << 8))

| 0x9 << 8, timer_base + S5PC100_TCON);

//先采用手動(dòng)更新TCNTB1 , TCMPB1 ,然后采用自動(dòng)重載

break;

case PWM_OFF: writel(readl(timer_base + S5PC100_TCON) & ~(0xf << 8),

timer_base + S5PC100_TCON);

break;

{

}

r eturn 0;

}

3 buzzer線程模塊

圖1 buzzer線程流程圖

buzzer線程運(yùn)行在主程序里面,當(dāng)程序執(zhí)行的時(shí)候,buzzer線程也被執(zhí)行,字符設(shè)備文件被打開(kāi)(open),buzzer線程執(zhí)行pthred_cond_wait()函數(shù),進(jìn)入等待喚醒的狀態(tài),當(dāng)溫度、濕度或者光照強(qiáng)度超標(biāo)的時(shí)候,buzzer線程會(huì)接收到一個(gè)喚醒的信號(hào),獲取buzzer模塊的掩碼,然后采用pwm控制蜂鳴器的亮滅。

4 結(jié)論

本文以buzzer的驅(qū)動(dòng)模塊設(shè)計(jì)為實(shí)例,詳細(xì)分析了嵌入式系統(tǒng)設(shè)備驅(qū)動(dòng)模塊的設(shè)計(jì)原理和步驟,對(duì)驅(qū)動(dòng)模塊的編寫原理和結(jié)構(gòu)以源代碼的方式進(jìn)行了重點(diǎn)描述,力圖以此方式建立一個(gè)開(kāi)發(fā)硬件驅(qū)動(dòng)模塊的標(biāo)準(zhǔn)流程模板,最后分析了buzzer的線程流程,通過(guò)在開(kāi)發(fā)板上對(duì)驅(qū)動(dòng)程序的實(shí)際測(cè)試,該設(shè)備驅(qū)動(dòng)模塊的設(shè)計(jì)思想和設(shè)計(jì)過(guò)程完全能夠?qū)崿F(xiàn)設(shè)計(jì)要求,應(yīng)用程序調(diào)用硬件驅(qū)動(dòng)程序后能夠在開(kāi)發(fā)環(huán)境正常運(yùn)行,硬件能夠正常工作,達(dá)到了預(yù)期效果。

參考文獻(xiàn)

[1]宋寶華.設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解(第2版)[M].北京:人民郵電出版社.2010.11.

[2]諾兒加德.嵌入式系統(tǒng)硬件與軟件結(jié)構(gòu)[M].北京:人民郵電出版社學(xué).2008.2.

[3]田澤主編.嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2005.

[4]Atmel Corporation ARM7TDMITM (Thumb?) Datasheet[M].1999-01.

趙志鵬(1973—),男,河南西平人,碩士,現(xiàn)供職于桂林電子科技大學(xué)信息科技學(xué)院,主要從事智能儀器、嵌入式開(kāi)發(fā)應(yīng)用、及測(cè)控方面的教學(xué)科研工作。

作者簡(jiǎn)介:

項(xiàng)目:以應(yīng)用為導(dǎo)向的嵌入式系統(tǒng)教改研究與實(shí)踐,編號(hào):2015JGB488。

猜你喜歡
功能模塊
OA系統(tǒng)新增功能界面設(shè)計(jì)與流程開(kāi)發(fā)
商業(yè)模式是新媒體的核心
二次措施單編制系統(tǒng)的應(yīng)用
基于ASP.NET標(biāo)準(zhǔn)的采購(gòu)管理系統(tǒng)研究
風(fēng)景區(qū)潮汐性人流與可移動(dòng)建筑設(shè)計(jì)研究
科技視界(2016年11期)2016-05-23 12:04:33
電網(wǎng)企業(yè)物資合同臺(tái)賬管理系統(tǒng)的建設(shè)與實(shí)踐
FJGS公司集中財(cái)務(wù)管理建設(shè)實(shí)踐與啟示
電子檔案管理系統(tǒng)解決方案及其關(guān)鍵技術(shù)實(shí)現(xiàn)
輸電線路附著物測(cè)算系統(tǒng)測(cè)算功能模塊的研究
M市石油裝備公服平臺(tái)網(wǎng)站主要功能模塊設(shè)計(jì)與實(shí)現(xiàn)
主站蜘蛛池模板: 国产一区二区网站| 九色视频线上播放| 国产成人综合网在线观看| 夜夜爽免费视频| 日韩在线视频网站| 久青草国产高清在线视频| 囯产av无码片毛片一级| 中日韩欧亚无码视频| 国产极品嫩模在线观看91| 福利小视频在线播放| 亚洲男人天堂2020| 狠狠色婷婷丁香综合久久韩国 | 亚洲精品人成网线在线| 亚洲色图欧美| jizz亚洲高清在线观看| 黄色一级视频欧美| 无码又爽又刺激的高潮视频| 日韩成人免费网站| 免费啪啪网址| 免费久久一级欧美特大黄| 国产精品无码久久久久久| 亚洲综合国产一区二区三区| 第九色区aⅴ天堂久久香| 国产成人一区| 白浆视频在线观看| 国产一级精品毛片基地| 在线无码av一区二区三区| 97视频精品全国免费观看| 无码精品国产dvd在线观看9久 | 在线中文字幕日韩| 亚洲A∨无码精品午夜在线观看| 欧美啪啪精品| 无码视频国产精品一区二区 | 国产乱子伦精品视频| 国产男女XX00免费观看| 国产免费精彩视频| 亚洲视频在线观看免费视频| 欧美成人A视频| a毛片免费观看| 中国特黄美女一级视频| 在线亚洲精品福利网址导航| 99这里精品| 婷婷五月在线| 亚洲日本韩在线观看| 日韩精品一区二区三区视频免费看| 国产精品成人免费视频99| 国产av色站网站| 亚洲精品欧美日本中文字幕| 2021国产乱人伦在线播放| 日韩人妻无码制服丝袜视频| 777国产精品永久免费观看| 青青久久91| 999精品视频在线| 久久大香伊蕉在人线观看热2| 精品少妇人妻无码久久| 日韩小视频网站hq| 国产一区二区三区视频| 亚洲AⅤ波多系列中文字幕| 精品黑人一区二区三区| 在线观看免费人成视频色快速| 国产一级二级在线观看| 丁香婷婷在线视频| 一边摸一边做爽的视频17国产 | 国产丝袜无码精品| 国产麻豆精品手机在线观看| 9cao视频精品| 欲色天天综合网| 国产成人亚洲毛片| 久久久91人妻无码精品蜜桃HD| 国产不卡一级毛片视频| 亚洲福利视频一区二区| 亚洲天堂精品视频| 老司机午夜精品网站在线观看| 国产亚洲精品资源在线26u| 一级毛片免费不卡在线视频| 激情午夜婷婷| 国产福利影院在线观看| 国产欧美日韩在线一区| 亚洲精品国偷自产在线91正片| 国产一区成人| 人妻丰满熟妇αv无码| 久久天天躁夜夜躁狠狠|