資源描述:
《linux字符設(shè)備驅(qū)動(dòng)篇.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、基于GPRS遠(yuǎn)程安防監(jiān)控系統(tǒng)作者:261676224項(xiàng)目描述本裝置可以通過傳感器采集現(xiàn)場(chǎng)火警【溫度傳感器模擬】等數(shù)據(jù),通過攝像頭采集現(xiàn)場(chǎng)圖像,通過紅外傳感器【按鍵模擬】是否有人進(jìn)入現(xiàn)場(chǎng),在異常情況下給用戶發(fā)送短信同時(shí)并報(bào)警;用戶可以通過INTERNET登陸監(jiān)控機(jī)的主頁,在主頁上觀察監(jiān)控機(jī)采集到的現(xiàn)場(chǎng)數(shù)據(jù),以及現(xiàn)場(chǎng)是否有人進(jìn)入過,通過攝像頭采集現(xiàn)場(chǎng)圖像或?qū)ΜF(xiàn)場(chǎng)進(jìn)行實(shí)時(shí)監(jiān)控實(shí)現(xiàn)功能KEY1-啟動(dòng)報(bào)警KEY2-解除報(bào)警LED1-運(yùn)行狀態(tài)提示燈LED2-溫度過限提示燈LED3-阻值過限提示燈LED4-網(wǎng)頁控制LED燈---------
2、-------------------------------------------------------------------------------采集到的阻值及溫度數(shù)據(jù)全部存入數(shù)據(jù)庫實(shí)時(shí)監(jiān)控終端界面可以修改阻值、溫度閥值、或者主要控制蜂鳴器或LED燈驅(qū)動(dòng)篇module_init(xxx_init)module_exit(xxx_exit)intinit_module(int)voidinit_module(void)insmod[裝載]rmmod[卸載]lsmod[查看]驅(qū)動(dòng)篇如何編寫一個(gè)字符設(shè)備驅(qū)動(dòng)?編寫驅(qū)動(dòng)準(zhǔn)備
3、首先對(duì)驅(qū)動(dòng)所涉及到的硬件相關(guān)進(jìn)行了解,包括其可實(shí)現(xiàn)的功能,需要配置的寄存器等,當(dāng)然我們可以先實(shí)現(xiàn)裸驅(qū)程序正常執(zhí)行,看看運(yùn)行狀態(tài),然后再考慮如何將其編寫為驅(qū)動(dòng)模塊驅(qū)動(dòng)編寫思想可以把驅(qū)動(dòng)作為一個(gè)接口函數(shù),功能當(dāng)然也體現(xiàn)在接口函數(shù)上,可以使用多個(gè)函數(shù)來實(shí)現(xiàn)不同的功能,然后供給上層應(yīng)用層的調(diào)用驅(qū)動(dòng)加載模式如何加載?驅(qū)動(dòng)模塊加載方式的選擇根據(jù)需要來決定,如果僅為調(diào)試使用,建議以命令insmod方式加載,rmmod方式卸載,否則可以以靜態(tài)方式加載,用makemenuconfig來選配,生成zImage驅(qū)動(dòng)篇int(*release)(st
4、ructinode*,structfile*);int(*open)(structinode*,structfile*);DEMO1?register_chrdev_region(xx_devnumber,1,“driver_name”);alloc_chrdev_region(&xx_devnumber,1,“driver_name”);register_chrdev_region(xx_devnumber,1);cdev_addcdev_initIounmap()驅(qū)動(dòng)篇DEMO2?platform_device_regis
5、ter(xx_device);platform_device_unregister(xx_device);-------------------------------------------------------------------------------------------------------------------structplatform_devicexx_device=
6、structxx_device_resource={{
7、[0]={.name=“xx_d”,
8、.start=0XE03001C0,.
9、id=-1,
10、.end=0XE03001C0+0X3,.resource=xx_device_resource,
11、.flags=IORESOURCE_MEM,.num_resource=?,
12、},.dev={
13、[1]={.release=myrelease,}
14、…};
15、}Voidmyrelease(structdevice*dev){}
16、}xx_device.c驅(qū)動(dòng)篇DEMO2?platform_driver_register(xx_driver);platform_driver_unregister(xx_driver);-
17、------------------------------------------------------------------------------------------------------------------structplatform_driverxx_driver={.driver={.name=“xx_d”,},.probe=xx_init,--->xx_init(structplatform_device*xx_device).remove=xx_exit,--->xx_exit(structpla
18、tform_device*xx_device)};-----------------------------------------------------------------------------------------------------------------