嵌入式遠程監(jiān)控系統(tǒng)設計與實現(xiàn).doc_第1頁
嵌入式遠程監(jiān)控系統(tǒng)設計與實現(xiàn).doc_第2頁
嵌入式遠程監(jiān)控系統(tǒng)設計與實現(xiàn).doc_第3頁
嵌入式遠程監(jiān)控系統(tǒng)設計與實現(xiàn).doc_第4頁
嵌入式遠程監(jiān)控系統(tǒng)設計與實現(xiàn).doc_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章 嵌入式遠程監(jiān)控系統(tǒng)設計與實現(xiàn)1.1 課程設計目的通過本課程設計,要對嵌入式系統(tǒng)的開發(fā)有比較深入的學習和分析。通過對WEB編程、服務器的架設、驅動程序的開發(fā)這些步驟的深入研究,掌握構建一個完備的嵌入式系統(tǒng)的開發(fā)流程。1.2 課程設計要求通過本課程設計,熟練前面幾章的內容。在此基礎上,編寫相關驅動程序,以及CGI和數據處理程序完成基于WEB的嵌入式遠程控制系統(tǒng)。通過本章的課程設計,可以初步了解一個嵌入式系統(tǒng)的基本構建過程,學習如何在ARM系統(tǒng)上搭建嵌入式服務器,并通過CGI控制外部設備的一般方法。1.3 系統(tǒng)簡介嵌入式WEB 服務器及遠程測控總的思想就是網絡化儀器。完成的目標就是設計基于Linux 操作系統(tǒng)的遠程測控系統(tǒng),并且討論實踐中的可行性,我們通過普通的瀏覽器就可以對遠端現(xiàn)場的控制和測量以及獲取遠端現(xiàn)場的圖像信息。使用嵌入式WEB 服務器的好處有這樣幾點:(1) 遠程監(jiān)控終端僅需要安裝瀏覽器即可,無需開發(fā)專門的應用軟件,降低系統(tǒng)成本。(2)瀏覽器所在的監(jiān)控終端平臺與WEB 所在的服務器平臺無關,監(jiān)控終端可以采用多種操作系統(tǒng),真正實現(xiàn)了跨平臺。(3)操作界面簡單統(tǒng)一,表達直觀生動,用戶無需經過專門培訓。(4)易于擴展新的功能,系統(tǒng)升級僅需在Web 服務器一端添加相應模塊,與遠程監(jiān)控終端無關,降低系統(tǒng)升級維護費用。系統(tǒng)整體結構如下:圖3.1 系統(tǒng)整體結構遠程監(jiān)控系統(tǒng)所涉及的知識點很多,主要包括Linux 操作系統(tǒng),內核移植,文件系統(tǒng)的移植,服務器的移植,CGI 程序的移植,CGI 腳本的編寫,設備驅動的調試和JavaScript 腳本,TCP 服務器與客戶端,UDP 服務器與客戶端,Java 中的多線程技術,Java 畫圖板及各種控件的添加。下面提供幾張已經做好的測控服務器的圖片,先達到一個感性的認識。圖3.2 是一個實時視頻及溫度測量遠程監(jiān)控系統(tǒng),它將采集到的圖像以及溫度參數在網頁中顯示出來。圖3.2 ARM9 遠程實時視頻及溫度測量在這一章中我們將學習一個基本的嵌入式遠程監(jiān)控系統(tǒng)的搭建,由于涉及到的知識點較多,我們只能把其中最主要的知識簡要地描述,更多更詳細的設計可以參考手冊后面的參考文獻。通過對本章的學習,讀者可以了解架設一個嵌入式WEB服務器的全過程及其要點。1.4 嵌入式WEB服務器移植1.4.1 BOA的移植1、下載BOA源碼下載地址: / 或者/。最新發(fā)行版本: 0.94.13 下載 boa-0.94.13.tar.gz,注意:從boa 上下載的是boa-0.94.13.tar.gz,按照一般解壓步驟進行解壓:# tar xzf boa-0.94.13.tar.gz 2、生成Makefile文件生成Makefile 文件直接運行src/configure 文件。 3、修改Makefile文件修改Makefile 文件修改 CC = gcc 為 CC = arm-linux-gcc 修改 CPP = gcc - E 為 CPP = arm-linux-gcc -E4、編譯# make 生成boa 文件 # arm-linux-strip boa 去掉文本信息,使boa 變小# make 生成boa 文件 # arm-linux-strip boa 去掉文本信息,使boa 變小5、BOA的配置BOA 需要在/etc目錄下建立一個boa 目錄,里面放入BOA的主要配置文件boa.conf。在BOA源碼目錄下已有一個示例boa.conf,可以在其基礎上進行修改。 (a)、Group 的修改修改 Group nogroup 為 Group 0 由于在/etc/group文件中沒有nogroup組,所以設成0。另外在/etc/passwd 中有nobody用戶,所以User nobody不用修改。(注意如果沒有nobody 用戶,也需要將User設成0)(b)、ScriptAlias 的修改指示CGI 腳本的存放位置。修改 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 為 ScriptAlias /cgi-bin/ /var/www/cgi-bin/ ScriptAlias /index.html /var/www/index.html 指示網頁存放的位置。(c)、ServerName 的設置修改 ServerName .here/ 為 ServerName .here/ 注意:該項默認為未打開,執(zhí)行BOA會異常退出,提示“gethostbyname:No such file ordirectory”,所以必須打開。其它默認設置即可。 6、BOA 的運行成功配置以后,還需要創(chuàng)建日志文件所在目錄/var/log/boa ,創(chuàng)建HTML 文檔的主目錄/var/www,將靜態(tài)網頁存入該目錄下(可以將主機 /usr/share/doc/HTML/ 目錄下的index.html 文件和img 目錄復制到/var/www 目錄下),創(chuàng)建CGI 腳本所在錄 /var/www/cgi-bin ,將cgi 的腳本存放在該目錄下。另外還要將mime.types 文件復制/etc 目錄下,通??梢詮膌inux 主機的 /etc 目錄下直接復制即可。實際運行時,可以將index.html文件、img目錄和mime.types文件放到CF 卡目錄下,建立目錄后,拷貝至相應目錄。制作run.sh:mkdir /etc/boacp /cf/boa/boa.conf /etc/boa/mkdir /var/logmkdir /var/log/boamkdir /var/wwwcp /cf/boa/index.html /var/www/cp -r /cf/boa/img /var/www/mkdir /var/www/cgi-bincp /cf/boa/mime.types /etc/cp /cf/boa/boa /./boa &啟動瀏覽器,直接在瀏覽器中輸入07/,出現(xiàn)BOA TEST的歡迎網頁。靜態(tài)HTML調試成功。1.4.2 CGI 腳本測試為了測試剛才建立的BOA服務器是否正確,我們可以編寫一個簡單例程進行測試。helloworld.c 程序就起這個作用,其內容如下:#includeint main() printf(Content-type: text/htmlnn);printf(n); printf(BOA CGI TESTn);printf(n); printf(BOA CGI TESTn);printf(n);printf(n);exit(0); 編寫完后進行交叉編譯,得到的helloworld 拷貝到var/www/cgi-bin 目錄下。# arm-linux-gcc -o helloworld.cgi helloworld.c在瀏覽器中輸入22/cgi-bin/helloworld 可以看到BOA測試頁面,表示CGI 測試通過。1.5 HTML 網頁設計普通的HTML 頁面只能提供靜態(tài)的信息給用戶,如果要實現(xiàn)網頁的交互僅靠HTML 是無能為力的。在一個完整的系統(tǒng)中,用戶提交信息輸入界面的好壞將影響到系統(tǒng)的成敗。好的輸入界面可以彌補系統(tǒng)設計上的某些缺陷,但如何才能設計一個好的輸入界面呢?HTML 中表單(FORM)在CGI 中是常見使用的輸入界面,雖然并不十分完美,但它的確是目前www中最強大的輸入工具。FORM是由一組相關聯(lián)的標簽所組成,使用方法就像HTML 中的其他標簽一樣。在FORM 中提供了多種輸入資料的工具,如文字輸入區(qū)(Text)、下拉式菜單(select)、復選框(CheckBox)、單選框(RadioButton)等等。就目前所定義的標準種,F(xiàn)ORM 的標簽可以分為、以及三個大類。我們來看看具體的程序實現(xiàn),下面是一段HTML 表單:CGI LED test基于S3C2440 的Web 服務器的設計程序系統(tǒng)資源:s3c2440,16M Flash,32M SDRM,IP:0輸入要點亮的LED:輸入LED 狀態(tài):網頁中表單由字頭開始,結束。其中action=/cgi-bin/cgi_led.cgi指明使用的CGI 程序名為cgi_led.cgi;method 屬性指定提交數據的方法(POST 還是GET),這里使用的是GET 方法。我們要實現(xiàn)的功能很簡單,就是采集現(xiàn)場的LED的狀態(tài),并在網頁上輸出結果。在這個實例中我們提交了兩個數據,一個是數據的名字是led,另一個數據的名字是status,它們的值由用戶在網頁中輸入。這里首先了解一下CGI 編碼的規(guī)則。其規(guī)則如下:不同域(變量值對)之間用“&”分開;變量與值之間用“”連接;空格符用“”代替;任何特殊字符用“”接相應的十六進制ASCII 碼代替,最后形成的格式為:name1=value1&name2=value2%name3=value3 .1.6 CGI 程序設計CGI(Common Gateway Interface) 通用網關接口的簡稱。其主要的功能是在WWW環(huán)境下,從客戶端傳遞一些信息給WEB服務器,再由WEB服務器去啟動所指定的程序來完成特定的工作。所以簡單點說,CGI是一種通用的接口標準。CGI可以為我們提供許多HTML(HyperText Markup Language,超文本標記語言)無法做到的功能。比如一個計算器、顧客表格的提交以及統(tǒng)計、搜索引擎、WEB 數據庫等等。用HTML是沒有辦法記住客戶的任何信息的。要把顧客的信息記錄在服務器的硬盤上,就要用到CGI。CGI是一種通用的接口標準。CGI程序就是符合這種接口標準的,運行在WEB服務器上的程序。它的工作就是控制信息要求,產生并傳回所需的文件。CGI 由瀏覽器的輸入觸發(fā)這個程序。先看看瀏覽器瀏覽網頁是怎樣實現(xiàn)的。作為一個用戶首先在瀏覽器的地址欄中添加上要訪問的主頁地址并回車觸發(fā)這個申請。瀏覽器將申請發(fā)送到服務器上。WEB服務器接收這些申請并根據.htm 或.html 的后綴并認識到這是HTML 文件。WEB服務器從當前硬盤或內存中讀取正確的HTML 文件,然后將它送回瀏覽器。HTML文件將被用戶的瀏覽器解釋并將結果顯示在用戶瀏覽器上。CGI程序可以用來在WEB內加入動態(tài)的內容。通過接口,瀏覽器能夠發(fā)送一個可執(zhí)行應用程序的HTTP請求,而不僅僅只是靜態(tài)的HTML文件。服務器運行指定的應用程序,這個應用程序讀取與請求相關的信息,獲得請求傳過來的數值。例如使用者填寫HTML表單提交了數據,瀏覽器將這些數據發(fā)送到WEB服務器上。WEB服務器接收這些數據并根據客戶機指定的CGI程序把這些數據遞交給指定的CGI程序,并使CGI在服務器上運行。CGI程序運行結束,生成HTML頁面,WEB服務器把CGI程序運行的結果送回用戶瀏覽器。HTML文件將會被用戶的瀏覽器解釋并將結果顯示在用戶瀏覽器上。CGI的基本工作情況如下圖所示:圖3.3 CGI工作流程示意圖WEB服務器與CGI 程序之間通過四種途徑進行通信: 環(huán)境變量、命令行、標準輸入和標準輸出。其中負責輸入的有環(huán)境變量、命令行和標準輸入。命令行只用于ISINDEX 查詢,較少使用。環(huán)境變量存放服務器向CGI程序傳遞的一些運行參數, 比如REQUEST_METHOD表示用戶提出請求或提交數據的方法是GET 還是POST。方法(METHOD) 是HTTP中對命令的稱呼。GET方法通過環(huán)境變量QUERY-STRING傳遞用戶提交的數據。經過編碼的數據以問號打頭追加在標識CGI腳本地址的URL后一起傳給WEB服務器。服務器將其存于QUERYSTRING中,CGI 程序可以通過getenv( )函數來讀取。編碼數據除了表單數據,還可以是直接調用CGI腳本時追加在URL 地址后面的參數。POST 方法則通過標準輸入( stdin) 傳遞提交數據。編碼了的表單數據獨立地傳送給WEB 服務器, CGI 程序從標準輸入中獲得,可以用getchar( ), sscanf( ) , fread( ) 等函數。要注意的是數據的長度是通過讀取環(huán)境變量CONTENT_LENGTH 獲得的, 而不是通過文件尾標識符來判斷。一般而言,要使用CGI 程序就必須在WEB網頁中遷入調用CGI 程序的代碼。通常的做法有三種,一是通過表單調用,二是通過超鏈接調用,三是通過SSI 調用。在3.5節(jié)中我們已經闡述了網頁的設計,在這里重點說明使用表單調用CGI 程序的辦法。 我們來看看到底如何從GET表單收集數據到CGI 程序,下面給出了一個比較簡單的C 源代碼:#include #include #include #include #include #include #include #include #define DEVICE_GPIODRV /dev/gpiosint main() int fd; int led; int status; char *data; if(fd=open(DEVICE_GPIODRV,O_RDONLY | O_NONBLOCK)0) printf(open device: %sn,DEVICE_GPIODRV); perror(can not open device); exit(1); printf(Content-type:ext/html;charset=gb2312nn);printf(n); printf(CGI LED DEMOn); printf(n); printf(CGI LED DEMO 1:0 led1 on 1:1 led1 offn); printf(n); data=getenv(QUERY_STRING); if(sscanf(data,led=%ld&status=%ld,&led,&status)!=2) printf( 請正確輸入); printf(); if(led3) printf(Please input 0=led=3!); printf(); if(status1) printf(Please input 0=status=1!); printf(); ioctl(fd,status,led); close(fd); printf(n); exit(0); 對于CGI程序來講,當采用GET方式提交數據時,用戶提交的數據放在環(huán)境變量QUERY_STRING中。CGI程序從環(huán)境變量QUERY_STRING獲得數據。為了解釋和執(zhí)行程序,CGI必須要分析(處理)這個字符串。當你想從服務器獲得數據并且不改變服務器上的數據時,應該選用GET。但是用GET 方式提交時,數據不經過CGI編碼,而且數據長度不能超過1K字節(jié)。否則只能用POST方式了。CGI 程序的任務大概有兩部分,輸入任務和輸出任務。輸入任務就是指獲取用戶提交數據的過程。輸入任務大概分以下幾個步驟:(1)首先從CGI 環(huán)境變量REQUESR_METHOD中獲取CGI程序的提交方式;(2)根據提交方式的不同取出變量名和變量值。如果是Get方式,從環(huán)境變量QUERY_STRING 中取出編碼數據;如果是POST 方式,從標準輸入輸出中讀取相應的字符串,讀取長度有環(huán)境變量CONTENT_LENGTH 決定。(3)根據CGI 編碼規(guī)則取出字符串中的數據(變量名和變量值對)。在輸入任務完成后,我們得到所有的變量名和變量值對,而后就是輸出任務。輸出任務主要有三個:(1)輸出HTTP 響應的頭標志。如printf(“Content-type:ext/htmlnn”);它告訴Web 服務器隨后的輸出是以HTML 文本形式輸出的。注意這個頭信息中有兩個換行符,這是因為WEB服務器需要在實際的文本信息開始之前先看見一個空行。(2)調用其它程序(如遠的測量程序、設置參數的程序、或者查詢數據庫的程序)。(3)輸出CGI 程序執(zhí)行結果。表單提交數據測試了解了POST 和GET 兩種表單提交數據方式以及步驟后,下面進行測試。GET方式:對于那些使用了屬性“METHOD=GET”的表單(或者沒有METHOD 屬性,這時候GET 是其缺省值),CGI 定義為:當表單被發(fā)送到服務器端后,表單中的數據被保存在服務器上一個叫做QUERY_STRING的環(huán)境變量中。這種表單的處理相對簡單,只要讀取環(huán)境變量就可以了。這一點對不同的語言有不同的做法。在C語言中,你可以用庫函數getenv(定義在標準庫函數stdlib中)來把環(huán)境變量的值作為一個字符串來存取。你可以在取得了字符串中的數據后,運用一些小技巧進行類型的轉換,這都是比較簡單的了。在CGI 程序中的標準輸出(output)(比如在C中的stdout文件流)也是經過重定義了的。它并沒有在服務器上產生任何的輸出內容,而是被重定向到客戶瀏覽器。這樣,如果編寫一個C 的CGI 程序的時候,把一個HTML 文檔輸出到它的stdout 上,這個HTML 文檔會被在客戶端的瀏覽器中顯示出來。這也是CGI 程序的一個基本原理。上例中具體的C 語法就不多講了,我們來看看它作為CGI 程序所特殊的地方。前面已經提到標準輸出的內容就是要被顯示在瀏覽器中的內容。第一行的輸出內容是必須的,也是一個CGI 程序所特有的:printf(Content-type: ext/html;charset=gb2312nn),這個輸出是作為HTML 的文件頭。因為CGI 不僅可以像瀏覽器輸出HTML 文本,而且可以輸出圖像,聲音之類的東西。這一行告訴瀏覽器如何處理接受到的內容。在Content-Type 的定義后面跟有兩行的空行,這也是不可缺少的。因為所有CGI 程序的頭部輸出都是相近的,因而可以為其定義一個函數,來節(jié)省編程的時間。這是CGI 編程常用的一個技巧。程序在后面調用了用了庫函數getevn 來得到QUERY_STRING 的內容,然后使用sscanf 函數把每個參數值取出來,要注意的是sscanf 函數的用法。其他的就沒有什么了,和一般的C 程序沒有區(qū)別。把程序編譯后,改名為cgi_led.cgi 放在/cgi-bin/目錄下面,就可以被表單調用了。這樣,一個處理GET 方式表單的CGI 程序就大功告成了。POST方式:下面我們來考慮另外一種表單傳送方法。假設我們要實現(xiàn)的任務是這樣的:把表單中客戶輸入的一段文本內容添加到服務器上的一個文本文件的后面。這可以看作是一個留言版程序的雛形。顯然,這個工作是無法用java script 這種客戶端腳本來實現(xiàn),也算得上真正意義上的CGI 程序了??雌饋磉@個問題和上面講的內容很相近,僅僅是用不同的表單和不同的腳本(程序)而已。但實際上,這中間是有一些區(qū)別的。在上面的例子中,GET 的處理方法可以看作是“純查詢(pure query)”類型的,也就是說,它與狀態(tài)無關。同樣的數據可以被提交任意的次數,而不會引起任何的問題(除了服務器的一些小小的開銷)。但是現(xiàn)在的任務就不同了,至少它要改變一個文件的內容。因而,可以說它是與狀態(tài)有關的。這也算是POST 和GET 的區(qū)別之一。而且,GET 對于表單的長度是有限制的,而POST 則不然,這也是在這個任務中選用POST 方法的主要原因。但相對的,對GET 的處理速度就要比POST 快一些。在CGI 的定義中,對于POST 類型的表單,其內容被送到CGI 程序的標準輸入(在C 語言中是stdin),而被傳送的長度被放在環(huán)境變量CONTENT_LENGTH 中。因而我們要做的就是,在標準輸入中讀入CONTENT_LENGTH 長度的字符串。從標準輸出讀入數據聽起來似乎要比從環(huán)境變量中讀數據來的要容易一些,其實則不然,有一些細節(jié)地方要注意,這在下面的程序中可以看到。特別要注意的一點就是:CGI 程序和一般的程序有所不同,一般的程序在讀完了一個文件流的內容之后,會得到一個EOF 的標志。但在CGI 程序的表單處理過程中,EOF 是永遠不會出現(xiàn)的,所以千萬不要讀多于CONTENT_LENGTH 長度的字符,否這會有什么后果,誰也不知道(CGI 規(guī)范中沒有定義,一般根據服務器不同而有不同得處理方法)。我們來看看到底如何從POST 表單收集數據到CGI 程序,下面給出了一個比較簡單的C 源代碼。#include #define MAXLEN 80 #define EXTRA 5 /* 4 個字節(jié)留給字段的名字data, 1 個字節(jié)留給= */ #define MAXINPUT MAXLEN+EXTRA+2 /* 1 個字節(jié)留給換行符,還有一個留給后面的NULL */ #define DATAFILE data.txt /* 要被添加數據的文件 */ void unencode(char *src, char *last, char *dest) for(; src != last; src+, dest+) if(*src = +) *dest = ; else if(*src = %) int code; if(sscanf(src+1, %2x, &code) != 1) code = ?; *dest = code; src +=2; else *dest = *src; *dest = ; *+dest = ; int main(void) char *lenstr;char inputMAXINPUT, dataMAXINPUT;long len; FILE *f;printf(Content-type: text/html;charset=gb2312nn);printf(n); printf(Responsen);printf(n); printf(Responsen);printf(n);lenstr = getenv(CONTENT_LENGTH);if(lenstr = NULL | sscanf(lenstr,%ld,&len)!=1 | len MAXLEN) printf(表單提交錯誤); printf(); else fgets(input, len+1, stdin);unencode(input+EXTRA, input+len, data);f = fopen(DATAFILE, a);if(f = NULL)printf(對不起,意外錯誤,不能夠保存你的數據 ); printf(); else fputs(data, f); fclose(f); printf(非常感謝,您的數據已經被保存%s,data); printf(); printf(n); exit(0); 從本質上來看,程序先從CONTENT_LENGTH 環(huán)境變量中得到數據的字長,然后讀取相應長度的字符串。因為數據內容在傳輸的過程中是經過了編碼的,所以必須進行相應的解碼。編碼的規(guī)則很簡單,主要的有這幾條:1、 表單中每個每個字段用字段名后跟等號,再接上上這個字段的值來表示,每個字段之間的內容用&連結;2、 所有的空格符號用加號代替,所以在編碼碼段中出現(xiàn)空格是非法的;3、 特殊的字符比如標點符號,和一些有特定意義的字符如“+”,用百分號后跟其對應的ACSII 碼值來表示。例如:如果用戶輸入的是:Hello there!那么數據傳送到服務器的時候經過編碼,就變成了data=Hello+there%21 上面的unencode()函數就是用來把編碼后的數據進行解碼的。在解碼完成后,數據被添加到data.txt 文件的尾部,并在瀏覽其中回顯出來。把文件編譯完成后,把它改名為collect.cgi 后放在CGI 目錄中就可以被表單調用了。下面給出了其相應的表單: CGI POST test CGI POST test 請輸入您的留言(最多80 個字符): 事實上,這個程序只能作為例子,是不能夠正式的使用的。它漏掉了很關鍵的一個問題:當有多個用戶同時像文件寫入數據是,肯定會有錯誤發(fā)生。而對于一個這樣的程序而言,文件被同時寫入的幾率是很大的。因此,在比較正式的留言版程序中,都需要做一些更多的考慮,比如加入一個信號量,或者是借助于一個鑰匙文件等。因為那只是編程的技巧問題,在這兒就不多說了。最后,我們來寫一個瀏覽data.txt 文件的的CGI 程序,這只需要把內容輸出到stdout 就可以了: #include #include #define DATAFILE ./data/data.txt int main(void) FILE *f = fopen(DATAFILE,r); int ch; if(f = NULL) printf(%s%c%c , Content-Type:text/html;charset=gb2312,13,10); printf(錯誤 ); printf(意外錯誤,無法打開文件); else printf(%s%c%c , Content-Type:text/plain,13,10); while(ch=getc(f) != EOF) putchar(ch); fclose(f); return 0; 這個程序唯一要注意的是:它并沒有把data.txt 包裝成HTML 格式后再輸出,而是直接作為簡單文本(plain text)輸出,這只要在輸出的頭部用text/plain 類型代替text/html 就可以了,瀏覽器會根據Content-Type 的類型自動的選擇相應的處理方法。1.7 設備驅動程序設計現(xiàn)在設計一個簡單的LED 控制頁面。當輸入1 /0時對應的LED燈亮滅。LED 驅動程序使用insmod命令加載,CGI 程序編譯后放在var/www/cgi-bin 目錄下。#include #include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME gpios#define GPIO_MAJOR 215static unsigned long gpio_table = S3C2410_GPD0, S3C2410_GPD1, S3C2410_GPD2, S3C2410_GPD3, ; static unsigned int gpio_cfg_table = S3C2410_GPD0_OUTP, S3C2410_GPD1_OUTP, S3C2410_GPD2_OUTP, S3C2410_GPD3_OUTP, ; static int sbc2440_gpios_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) switch(cmd) case 0: case 1: if (arg 4) return -EINVAL; s3c2410_gpio_setpin(gpio_tablearg, !cmd); return 0; default: return -EINVAL; static struct file_operations sbc2440_gpios_fops = .owner = THIS_MODULE, .ioctl = sbc2440_gpios_ioctl, ; static int

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論