基于嵌入式Web服務(wù)器的遠(yuǎn)程控制系統(tǒng)的實(shí)現(xiàn)
2.3 驅(qū)動(dòng)程序和應(yīng)用程序設(shè)計(jì)
設(shè)備驅(qū)動(dòng)程序是系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口,它為應(yīng)用程序屏蔽了硬件的細(xì)節(jié),在應(yīng)用程序看來(lái),硬件設(shè)備已抽象為設(shè)備文件,可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。Linux操作系統(tǒng)下的設(shè)備分為3類:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)接口。應(yīng)用程序在系統(tǒng)中是不能直接訪問(wèn)硬件地址的,因此應(yīng)用程序?qū)唧w設(shè)備的操作必須通過(guò)設(shè)備驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)。本例通過(guò)編寫對(duì)應(yīng)端口的驅(qū)動(dòng)程序,實(shí)現(xiàn)了對(duì)端口的輸入輸出設(shè)置,以及輸出高低電平的系統(tǒng)調(diào)用接口。在目錄/μClinux-dist/linux-2.4.x/drivers/char下創(chuàng)建驅(qū)動(dòng)源文件port.c和驅(qū)動(dòng)頭文件polt.h。編寫端口的驅(qū)動(dòng)程序最重要的是編寫port_ioctl接口調(diào)用函數(shù),其中定義了實(shí)現(xiàn)功能的所有命令,以供應(yīng)用程序調(diào)用。
設(shè)備驅(qū)動(dòng)程序加入系統(tǒng)有2種方式,一種是直接編入內(nèi)核中,另一種是以模塊的方式靈活添加。由于本例較簡(jiǎn)單,所以直接編入內(nèi)核中。通過(guò)在當(dāng)前目錄下的Makefile管理文件和Config.in配置文件添加相應(yīng)項(xiàng),并在vendor/Samsung/44BO/目錄下的Makefile中device部分添加port,c,126,0,使系統(tǒng)啟動(dòng)時(shí)即注冊(cè)設(shè)備。
編寫CGI應(yīng)用程序時(shí),只需打開(kāi)相應(yīng)的設(shè)備文件,就可通過(guò)調(diào)用驅(qū)動(dòng)中的命令控制接口實(shí)現(xiàn)對(duì)端口的控制。本文引用地址:http://butianyuan.cn/article/151707.htm
然后可通過(guò)ioctl系統(tǒng)調(diào)用實(shí)現(xiàn)對(duì)端口的控制,程序結(jié)束時(shí)再調(diào)用close(fd)關(guān)閉設(shè)備。
在配置BOA服務(wù)器時(shí),這里設(shè)定CGI程序的目錄是/home/www/cgi-bin/目錄,使用交叉編譯工具生成CGI程序并放入此目錄下,然后對(duì)整個(gè)操作系統(tǒng)內(nèi)核進(jìn)行配置裁剪,最終生成的系統(tǒng)鏡像中就可以包含編寫的程序功能,實(shí)現(xiàn)對(duì)設(shè)備的遠(yuǎn)程控制。圖4為遠(yuǎn)程控制界面。
通過(guò)測(cè)試該遠(yuǎn)程控制系統(tǒng),實(shí)現(xiàn)了對(duì)外部設(shè)備的遠(yuǎn)程控制,只需對(duì)CGI程序進(jìn)行適當(dāng)修改即可實(shí)現(xiàn)較復(fù)雜系統(tǒng)的控制。
3 結(jié)束語(yǔ)
隨著計(jì)算機(jī)、通信、嵌入式和互聯(lián)網(wǎng)等技術(shù)的飛速發(fā)展,傳統(tǒng)基于現(xiàn)場(chǎng)總線的控制系統(tǒng)已不能滿足遠(yuǎn)程控制的要求,而基于以太網(wǎng)的控制系統(tǒng)正逐漸成為遠(yuǎn)程控制的首選。本文利用ARM內(nèi)核的32位處理器及以太網(wǎng)控制器搭建硬件平臺(tái),移植了μClinux嵌入式操作系統(tǒng),配置了BOA服務(wù)器,通過(guò)編寫設(shè)備驅(qū)動(dòng)程序和CGI程序,實(shí)現(xiàn)了遠(yuǎn)程控制系統(tǒng),具有廣闊的應(yīng)用前景。
評(píng)論