嵌入式linuxweb服務(wù)器boa的移植方法arm開發(fā)板linux嵌入式web服務(wù)器boa_第1頁
嵌入式linuxweb服務(wù)器boa的移植方法arm開發(fā)板linux嵌入式web服務(wù)器boa_第2頁
嵌入式linuxweb服務(wù)器boa的移植方法arm開發(fā)板linux嵌入式web服務(wù)器boa_第3頁
嵌入式linuxweb服務(wù)器boa的移植方法arm開發(fā)板linux嵌入式web服務(wù)器boa_第4頁
嵌入式linuxweb服務(wù)器boa的移植方法arm開發(fā)板linux嵌入式web服務(wù)器boa_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、嵌入式linux web服務(wù)器boa的移植方法/arm開發(fā)板linux嵌入式web服務(wù)器boa今天自己在開發(fā)板上移植了 boa服務(wù)器。參考資料是李駒光、鄭耿大俠在包頤論壇上的帖子。李大俠寫的好,我沒有費(fèi)什么力氣就搞定了,:-)0步驟如下:1. 從/下載Boa源碼,將其解壓并進(jìn)入源碼目錄的src子目錄# tar -zxvf boa-0.94.13.tar.gz# cd boa-0.94.13/src2. 生成Makefile文件# ./configure修改Makefile文件,a. 找到 CC=gcc,將其改成 CC = arm-linux-gcc ,b. 找

2、到 CPP = gcc -E,將其改成 CPP = arm-linux-gcc-E,保存退出。3. 運(yùn)行make進(jìn)行編譯,得到的可執(zhí)行程序?yàn)?boa ,并將調(diào)試信息剝?nèi)? make# arm-linux-strip boa4. 編寫 boa.conf5. cp boa到開發(fā)板的/bin目錄下,在開發(fā)板/etc目錄下建boa目錄,cpboa.conf 至U板子的/etc/boa 目錄。6. 創(chuàng)建日志文件所在目錄/var/log/boa ,創(chuàng)建HTML文檔的主目錄/var/www創(chuàng)建CGI腳本所在目錄/var/www/cgi-bin/ ,在/var/www 中放置一個(gè)index.html 文件7.

3、 cp mime.types文件到開發(fā)板/etc目錄8. vi passwd,添加 nouser 用戶,vi group 添加 nogroup 組8. 運(yùn)行boa:#/bin/boa現(xiàn)在通過其他機(jī)器就可以訪問了。2就可以訪問到你放置的那個(gè)index頁面了。9. 編輯helloworld.c 程序測(cè)試cgi的運(yùn)行#arm-linux-gcc -o helloworld.cgi helloworld.c#cp helloworld.cgi到開發(fā)板的 /var/www/cgi-bin 目錄下在pc機(jī)的瀏覽器地址欄輸入2/cgi-bi

4、n/helloworld.cgi,可以看到相關(guān)頁面,CGI腳本測(cè)試通過。10. 從CGIC的主站點(diǎn)下載源碼,將其解壓并進(jìn)入源碼目錄# tar -zxvf cgic205.tar.gz# cd cgic20511.修改Makefile 文件a. 找到 CC=gcc,將其改成 CC=arm-linux-gcc ,b. 找到 AR=ar ,將其改成 AR=arm-linux-ar ,c. 找到 RANLIB=ranlib ,將其改成 RANLIB=arm-linux-ranlib 。e. 找至U gcc cgictest.o -o cgictest.cgi $LIBS ,將其改成 $(CC) $(C

5、FLAGS) cgictest.o -o cgictest.cgi $LIBS,f. 找至U gcc capture.o -o capture $LIBS ,將其改成 $(CC) $(CFLAGS) capture.o -o capture $LIBS ,保存退出。12. 然后運(yùn)行make進(jìn)行編譯,得到的CGIC庫(kù)libcgic.a ,我們通過調(diào)試輔助程序capture和測(cè)試程序cgictest.cgi,來驗(yàn)證生成CGIC庫(kù)的正確性。13. 將 capture 和 cgictest.cgi 拷貝到主機(jī)的 /var/www/cgi-bin 目錄下。在工作站的瀏覽器地址欄輸入http:/192.1

6、68.0.12/cgi-bin/cgictest.cgi,可以看到頁面,CGIC庫(kù)和測(cè)試腳本都移植成功。下邊是李大俠的大文了。隨著Internet技術(shù)的興起,在嵌入式設(shè)備的管理與交互中,基丁 Web方式的應(yīng)用成為目前的主流,這種程序結(jié)構(gòu)也就是大家非常熟悉的B/S結(jié)構(gòu),即在嵌入式設(shè)備上運(yùn)行一個(gè)支持腳本或 CGI功能的Web服務(wù)器,能夠生成動(dòng)態(tài)頁面, 在用戶端只需要通過 Web瀏覽器就可以對(duì)嵌入式設(shè)備進(jìn)行管理和監(jiān)控,非常方 便實(shí)用。本節(jié)主要介紹這種應(yīng)用的開發(fā)和移植工作。用戶首先需要在嵌入式設(shè)備上成功移植支持腳本或CGI功能的Web服務(wù)器,然后才能進(jìn)行應(yīng)用程序的開發(fā)。1、嵌入式 Web服務(wù)器移植由丁

7、嵌入式設(shè)備資源一般都比較有限,并且也不需要能同時(shí)處理很多用戶的請(qǐng) 求,因此不會(huì)使用Linux下最常用的如Apache等服務(wù)器,而需要使用一些專門 為嵌入式設(shè)備設(shè)計(jì)的 Web服務(wù)器,這些 Web服務(wù)器在存貯空間和運(yùn)行時(shí)所占 有的內(nèi)存空間上都會(huì)非常適合丁嵌入式應(yīng)用場(chǎng)合。典型的嵌入式 Web服務(wù)器有Boa ( )和thttpd( )等,它們和 Apache 等高性能的Web服務(wù)器主要的區(qū)別在丁它們一般是單進(jìn)程服務(wù)器,只有在完成一個(gè)用戶請(qǐng) 求后才能響應(yīng)另一個(gè)用戶的請(qǐng)求,而無法并發(fā)響應(yīng),但這在嵌入式設(shè)備的應(yīng)用場(chǎng) 合里已經(jīng)足夠了。我們介紹比較常用的Boa服務(wù)器的移植。Boa是一個(gè)非常

8、小巧的 Web服務(wù) 器,可執(zhí)行代碼只有約60KB。它是一個(gè)單任務(wù) Web服務(wù)器,只能依次完成用 戶的請(qǐng)求,而不會(huì)fork出新的進(jìn)程來處理并發(fā)連接請(qǐng)求。但 Boa支持CGI,能 夠?yàn)镃GI程序fork出一個(gè)進(jìn)程來執(zhí)行。Boa的設(shè)計(jì)目標(biāo)是速度和安全,在其站點(diǎn)公布的性能測(cè)試中,Boa的性能要好丁 Apache服務(wù)器第一步完成Boa程序的移植。從 下載Boa源碼,當(dāng)前最新版 本為0.94.13,將其解壓并進(jìn)入源碼目錄的src子目錄# tar xzf boa-0.94.13.tar.gz# cd boa-0.94.13/src生成Makefile文件# ./configure修改M

9、akefile 文件,找到CC=gcc,將其改成 CC = arm-linux-gcc ,再找 到CPP = gcc E,將其改成 CPP = arm-linux-gcc-E,并保存退出。然后運(yùn)行make進(jìn)行編譯,得到的可執(zhí)行程序?yàn)?boa ,將調(diào)試信息剝?nèi)?,?到的最后程序只有約60KB大小。# make# arm-linux-strip boa第二步完成Boa的配置,使其能夠支持CGI程序的執(zhí)行。Boa需要在/etc目 錄下建立一個(gè)boa目錄,里面放入 Boa的主要配置文件 boa.conf。在Boa源 碼目錄下已有一個(gè)示例boa.conf ,可以在其基礎(chǔ)上進(jìn)行修改,下面解釋一下該 文件的

10、含義:#監(jiān)聽的端口號(hào),缺省都是80, 一股無需修改Port 80# bind調(diào)用的IP地址,一般注釋掉,表明綁定到INADDR_ANY ,通配丁服務(wù) 器的所有IP地址#Listen #作為哪個(gè)用戶運(yùn)行,即它擁有該用戶的權(quán)限,一般都是nobody ,需要 /etc/passwd 中有 nobody 用戶User nobody#作為哪個(gè)用戶組運(yùn)行,即它擁有該用戶組的權(quán)限,一般都是nogroup ,需要在/etc/group 文件中有 nogroup 組Group nogroup#當(dāng)服務(wù)器發(fā)生問題時(shí)發(fā)送報(bào)警的email地址,目前未用,注釋掉#ServerAdmin rootloc

11、alhost#錯(cuò)誤日志文件。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。如果不需要錯(cuò)誤日志,則用#/dev/null 。在下面設(shè)置時(shí),注意一定要建立/var/log/boa 目 錄ErrorLog /var/log/boa/error_log#訪問日志文件。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。如果不需要錯(cuò)誤日志,則用#/dev/null或直接注釋掉。在下面設(shè)置時(shí),注意一定要建立/var/log/boa 目錄#AccessLog /var/log/boa/access_log#是否使用本地時(shí)間。如果沒有注釋掉,則使用本地時(shí)間。注釋掉則使用UTC時(shí)間#UseLocaltime#是否記錄

12、CGI運(yùn)行信息,如果沒有注釋掉,則記錄,注釋掉則不記錄#VerboseCGILogs#服務(wù)器名字ServerName #是否啟動(dòng)虛擬主機(jī)功能,即設(shè)備可以有多個(gè)網(wǎng)絡(luò)接口,每個(gè)接口都可以擁有一個(gè)虛擬的Web服務(wù)器。一般注釋掉,即不需要啟動(dòng)#VirtualHost#非常重要,HTML文檔的主目錄。如果沒有以/開始,則表示從服務(wù)器的根路 徑開始。DocumentRoot /var/www#如果收到一個(gè)用戶請(qǐng)求的話,在用戶主目錄后再增加的目錄名UserDir public_html#HTML目錄索引的文件名,也是沒有用戶只指明訪問目錄時(shí)返回的文件名DirectoryIndex index.html#當(dāng)H

13、TML目錄沒有索引文件時(shí),用戶只指明訪問目錄時(shí),boa會(huì)調(diào)用該程序生 成索引文件然后返回給用戶,因?yàn)樵撨^程比較慢最好不執(zhí)行,可以注釋掉或者給 每個(gè)HTML目錄加上DirectoryIndex 指明的文件#DirectoryMaker /usr/lib/boa/boa_indexer#如果DirectoryIndex 不存在,并且 DirectoryMaker 被注釋,那么就用 Boa 自帶的索引生成程序來生成目錄的索引文件并輸出到下面目錄,該目錄必須是Boa能讀寫# DirectoryCache /var/spool/boa/dircache#一個(gè)連接所允許的HTTP持續(xù)作用請(qǐng)求最大數(shù)目,注釋

14、或設(shè)為0都將關(guān)閉HTTP 持續(xù)作用KeepAliveMax 1000#HTTP持續(xù)作用中服務(wù)器在兩次請(qǐng)求之間等待的時(shí)間數(shù),以秒為單位,超時(shí)將關(guān)閉連接KeepAliveTimeout 10#指明mime.types文件位置。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。可以注釋掉避免使用mime.types文件,此時(shí)需要用AddType在本文件里 指明MimeTypes /etc/mime.types#文件擴(kuò)展名沒有或未知的話,使用的缺省 MIME類型DefaultType text/plain#提供CGI程序的PATH環(huán)境變量值CGIPath /bin:/usr/bin:/usr/local/

15、bin#將文件擴(kuò)展名和MIME類型關(guān)聯(lián)起來,和mime.types文件作用一樣。如果用mime.types#文件,則注釋掉,如果不使用 mime.types文件,則必須使用#AddType application/x-httpd-cgi cgi#指明文檔重定向路徑#Redirect /bar http:/elsewhere/feh/bar#為路徑加上別名Alias /doc /usr/doc#非常重要,指明CGI腳本的虛擬路徑對(duì)應(yīng)的實(shí)際路徑。一般所有的CGI腳本都要放在實(shí)際路徑里,用戶訪問執(zhí)行時(shí)輸入站點(diǎn)+虛擬路徑+CGI腳本名ScriptAlias /cgi-bin/ /var/www/cgi

16、-bin/用戶可以根據(jù)自己需要,對(duì)boa.conf進(jìn)行修改,但必須要保證其他的輔助文件和設(shè)置必須和boa.conf里的配置相符,不然Boa就不能正常工作。在上面的 例子中,我們還需要?jiǎng)?chuàng)建日志文件所在目錄 /var/log/boa ,創(chuàng)建HTML文檔的主目錄/var/www,將mime.types 文件拷貝到/etc目錄,創(chuàng)建CGI腳本所在目 錄/var/www/cgi-bin/ 。mime.types 文件用來指明不同文件擴(kuò)展名對(duì)應(yīng)的MIME類型,一般可以直接從Linux主機(jī)上拷貝一個(gè),大部分也都是在主機(jī)的/etc 目錄下。第三步就是測(cè)試Boa能否正常工作,靜態(tài)HTML頁面能否正常訪問,CGI

17、腳本 能否正常運(yùn)行,一般采用NFS方式來進(jìn)行測(cè)試工作,可以將嵌入式目標(biāo)系統(tǒng)上的/etc目錄拷貝到主機(jī)的NFS共享目錄下,然后將NFS共享目錄下的etc目錄 重新NFS mount為目標(biāo)系統(tǒng)上的/etc目錄。這樣就可以在主機(jī)上對(duì)etc目錄下 的各種配置文件,如進(jìn)行修改而立刻在目標(biāo)系統(tǒng)上生效。假設(shè)主機(jī)/nfs目錄為共享目錄,在其下面建立一個(gè)www子目錄作為 Web站點(diǎn)的主目錄,其內(nèi)容如下:# ls /nfs/wwwcgi-bin images index.htmlindex.html為測(cè)試主頁面,images為存放各種圖片的子目錄,cgi-bin 為CGI腳本的存放目錄。根據(jù)示例boa.conf的

18、配置,目前HTML文檔的主目錄為/var/www , CGI腳本目錄為/var/www/cgi-bin,則運(yùn)行以下命令將主機(jī)的/nfs/www 目錄mount成目標(biāo)板上的/var/www 目錄。然后就可以運(yùn)行boa 了:# mount -t nfs 0:/nfs/www /var/www -o nolock # boa在工作站上運(yùn)行瀏覽器進(jìn)行測(cè)試,在地址欄輸入目標(biāo)系統(tǒng)IP,即62,可以看到相關(guān)頁面,表示靜態(tài)HTML頁面測(cè)試通過。接下來進(jìn)行CGI腳本的測(cè)試,我們需要一個(gè)測(cè)試用的CGI腳本??梢詫憘€(gè)最簡(jiǎn)單的Hello World 程序,示例代

19、碼如下#includevoid main() printf("Content-type: text/htmlnn");printf("n");printf("CGI Outputn");printf("n");printf("Hello, world.n");printf("n");printf("n");exit(0);然后進(jìn)行交義編譯,將得到的 helloworld.cgi拷貝到主機(jī)的/nfs/www/cgi-bin 目 錄下。#arm-linux-g

20、cc -o helloworld.cgi helloworld.c#cp helloworld.cgi /nfs/www/cgi-bin在瀏覽器地址欄輸入 6/cgi-bin/helloworld.cgi相關(guān)頁面,表示CGI腳本測(cè)試通過現(xiàn)在我們已經(jīng)可以讓Boa在嵌入式目標(biāo)系統(tǒng)上正常工作了,嵌入式 Web服務(wù) 器移植成功。在以上的移植過程中,最好設(shè)定boa.conf中的錯(cuò)誤日志文件ErrorLog,允許Boa記錄錯(cuò)誤信息;測(cè)試靜態(tài) HTML頁面和CGI腳本時(shí),不管 結(jié)果如何,最好都查看錯(cuò)誤日志文件;CGI腳本測(cè)試很容易發(fā)生權(quán)限不夠的錯(cuò)誤,要保證Boa訪問的主目

21、錄、CGI腳本目錄以及臨時(shí)文件目錄(如果沒有設(shè) 置TMP環(huán)境變量時(shí),缺省是/tmp目錄),都必須能被Boa運(yùn)行時(shí)所代表的用 戶完全訪問,該用戶由boa.conf中的User指出。目前Web技術(shù)中生成動(dòng)態(tài)Web頁面的方法有CGI和服務(wù)器腳本,如JSP, ASP 等,但后者需要 Web服務(wù)器具有這些腳本的運(yùn)行支持模塊。在嵌入式Web服務(wù)器中,考慮到資源限制問題,一般都只提供CGI支持,因此在嵌入式設(shè)備中Web方式應(yīng)用實(shí)際上就是基丁 CGI的程序開發(fā)。CGI (Common Gate Intergace )是一段運(yùn)行在 Web服務(wù)器上的程序,提 供同客戶端Html頁面的接口。我們看一個(gè)實(shí)際例子:常見

22、的個(gè)人主貞上大都有 一個(gè)留言本,留言本的工作方式是這樣的:先由用戶輸入一些信息,如名字之類 的東西,接著用戶按一下“留言”(到目前為止工作都在客戶端),瀏覽器就把這些信息傳送到服務(wù)器的CGI程序中,丁是CGI程序在服務(wù)器上按照預(yù)定的方 法進(jìn)行處理,在本例中就是把用戶提交的信息存入指定的文件中,最后CGI程序給客戶端發(fā)回一個(gè)“留言結(jié)束”字樣的頁面,用戶可以在瀏覽器里看到。在進(jìn)行CGI編程之前,我們先了解HTML的一些知識(shí)。CGI可以使用多種編程 語言來實(shí)現(xiàn),包括C、C+、Perl等,但在嵌入式設(shè)備的開發(fā)中,一般都不會(huì)采用Perl等解釋性語言,因?yàn)檫@種語言還需要有解釋執(zhí)行的支撐模塊,會(huì)占用存貯空間

23、和內(nèi)存,最常用的方法當(dāng)然是用C來編寫,但C并不是很適合開發(fā)象CGI這種需要大量進(jìn)行字符申操作的程序,編程比較煩瑣,因此,對(duì)丁一個(gè)專業(yè) 的開發(fā)人員來說,首先想到的應(yīng)該是有沒有可復(fù)用的庫(kù)來支持快速高效的開發(fā)CGI程序。幸運(yùn)的是目前就有不少開放源碼的支持CGI開發(fā)的C庫(kù)。我們?cè)诖酥唤榻BCGIC,有興趣的朋友可以自己在Internet上搜索其他的C庫(kù)。CGIC庫(kù)的移植CGIC是一個(gè)支持CGI開發(fā)的開放源碼的標(biāo)準(zhǔn)C庫(kù),可以免費(fèi)使用,只需要在 開發(fā)的站點(diǎn)和程序文檔中有個(gè)公開聲明即可,表明程序使用了 CGIC庫(kù),用戶也 可以購(gòu)買商業(yè)授權(quán)而無需公開聲明。CGIC能夠提供以下功能:1分析數(shù)據(jù),并自動(dòng)校正一些有缺

24、陷的瀏覽器發(fā)來的數(shù)據(jù);2透明接收用GET或POST方法發(fā)來的From數(shù)據(jù);3 能接受上傳文件;4 能夠設(shè)置和接收cookies ;5 用一致的方式處理From元素里的回車;6 提供字符申,整數(shù),浮點(diǎn)數(shù),單選或多選功能來接收數(shù)據(jù);7 提供數(shù)字字段的邊界檢查;8 能夠?qū)GI環(huán)境變量轉(zhuǎn)化成C中的非空字符申;9 提供CGI程序的調(diào)試手段,能夠回放 CGI程序執(zhí)行時(shí)的CGI狀態(tài);總之,CGIC是一個(gè)功能比較強(qiáng)大的支持 CGI開發(fā)的標(biāo)準(zhǔn)C庫(kù),并支持Linux,Unix和Windows等多操作系統(tǒng)。以下描述CGIC的移植過程。從CGIC的主站點(diǎn)下載源碼,當(dāng)前最新版本是2.05版。將其解壓并進(jìn)入源碼目錄#

25、tar xzf cgic205.tar.gz# cd cgic205修改Makefile 文件,找到CC=gcc,將其改成CC=arm-linux-gcc ,找到 AR=ar ,將其改成 AR=arm-linux-ar ,找到 RANLIB=ranlib ,將其改成 RANLIB=arm-linux-ranlib 。找到 gcc cgictest.o -o cgictest.cgi $LIBS ,將 其改成 $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi $LIBS,找到 gcccapture.o -o capture $LIBS,將其改成 $(CC) $

26、(CFLAGS) capture.o -ocapture $LIBS,并保存退出。然后運(yùn)行make進(jìn)行編譯,得到的CGIC庫(kù)libcgic.a ,我們通過調(diào)試輔助程 序capture和測(cè)試程序cgictest.cgi,來驗(yàn)證生成CGIC庫(kù)的正確性。將 capture 和 cgictest.cgi 拷貝到主機(jī)的 /nfs/www/cgi-bin 目錄下。在工作站的瀏覽器地址欄輸入6/cgi-bin/cgictest.cgi ,可以看到頁面,表示 CGIC 庫(kù)和測(cè) 試腳本都移植成功。cgictest.cgi比較完整的展現(xiàn)了 CGIC庫(kù)的功能,在開發(fā)基丁 CGIC

27、庫(kù)的CGI程序前最好先掌握cgictest.cgi程序,也是用戶開發(fā)特定應(yīng)用程序時(shí)的參考范例HTML模板的制作Web方式的應(yīng)用開發(fā)一般都會(huì)將界面和程序邏輯脫離開來,允許在一定程度下 更改界面,如改變界面文本的屆性,建立多語言版本等,而無需改動(dòng)程序邏輯。 界面一般由美工來進(jìn)行制作,而程序員負(fù)責(zé)具體功能的實(shí)現(xiàn)。在HTML中,表單(FORM)是最主要的傳遞信息的手段,它適用丁任何瀏覽器。表單中有很多 元素,包括輸入文本框,單選框,多選框,按鈕,等等,可以提供信息的交互。具體對(duì)象說明和語法請(qǐng)參見其他 HTML書籍,在這里不作介紹。根據(jù)應(yīng)用需求, 美工或其他設(shè)計(jì)人員將最后的 Web頁面設(shè)計(jì)出來,作為程序員進(jìn)行開發(fā)的模板。CGI程序的工作一般就是接收表單數(shù)據(jù),進(jìn)行數(shù)據(jù)處理,最后根據(jù)處理結(jié)果 生成新的頁面返回給瀏覽器。表單數(shù)據(jù)一般是

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論