[OK210開發(fā)板體驗]系統(tǒng)篇(1) 基于S5PV210的智能家居系統(tǒng)之Boa服務(wù)器搭建

原創(chuàng) 2015-12-24 10:10:00 S5PV210 智能家居系統(tǒng) Boa服務(wù)器搭建
前面進行了OK210試用體驗的入門篇和功能篇的體驗,分別為:
入門篇:
[OK210開發(fā)板體驗]入門篇(1):開箱驗板
[OK210開發(fā)板體驗]入門篇(2):板載資源
[OK210開發(fā)板體驗]入門篇(3):開發(fā)環(huán)境(軟件安裝,開發(fā)環(huán)境,燒寫系統(tǒng))
[OK210開發(fā)板體驗]入門篇(4):編程入門(NFS登錄,驅(qū)動入門)
    
功能篇:
[OK210開發(fā)板體驗]功能篇(1):Linux字符驅(qū)動之Led
[OK210開發(fā)板體驗]功能篇(2):Linux字符驅(qū)動之Key按鍵
[OK210開發(fā)板體驗]功能篇(3):Linux Input子系統(tǒng)之Key按鍵
[OK210開發(fā)板體驗]功能篇(4):Linux字符驅(qū)動之DS18B20
[OK210開發(fā)板體驗]功能篇(5):Linux字符驅(qū)動之PWM蜂鳴器
[OK210開發(fā)板體驗]
功能篇(6):Linux字符驅(qū)動之紅外遙控 
[OK210開發(fā)板體驗]功能篇(7):Linux字符驅(qū)動之ADC模數(shù)轉(zhuǎn)換
通過4篇入門篇的介紹,初步了解了OK210開發(fā)板的系統(tǒng)資源,并根據(jù)飛凌公司的提供的軟件手冊和硬件手冊,結(jié)合自身的經(jīng)驗,搭建了相應(yīng)的Linux系統(tǒng)開發(fā)環(huán)境。通過7篇功能篇的介紹,初步熟悉了OK210開發(fā)板的部分資源,對相應(yīng)驅(qū)動模塊的學(xué)習(xí),為智能家居系統(tǒng)的搭建奠定了基礎(chǔ)。
今天是OK210試用體驗的功能篇,Boa服務(wù)器的搭建:主要包括三部分,智能家居系統(tǒng)組成、Boa服務(wù)器搭建及附錄。
一、智能家居系統(tǒng)組成
本設(shè)計的智能家居系統(tǒng)大體分為四大模塊,數(shù)據(jù)采集、數(shù)據(jù)控制與處理、網(wǎng)絡(luò)和終端顯示與控制,具體如下圖所示
 

數(shù)據(jù)采集分為5大部分,主要包括家庭安防、環(huán)境檢測、燈光控制、窗簾控制和可視對講,這些功能通過OK210連接的外設(shè)完成。數(shù)據(jù)控制與處理,主要通過OK210上的S5PV210處理器完成,即將采集到的數(shù)據(jù)進行處理,打包,通過網(wǎng)絡(luò)發(fā)送到用戶端。而網(wǎng)絡(luò)部分可采用有線或無線的方法,來連接智能家居系統(tǒng)和用戶端。終端顯示與控制,主要實現(xiàn)用戶對家居系統(tǒng)的檢查和控制,可通過PC端或移動端來實現(xiàn)。
二、Boa服務(wù)器搭建

Boa 服務(wù)器是一個小巧高效的web服務(wù)器,是一個運行于unix或linux下的,支持CGI的、適合于嵌入式系統(tǒng)的單任務(wù)的http服務(wù)器。作為一種單任務(wù)Web服務(wù)器,Boa只能依次完成用戶的請求,而不會fork出新的進程來處理并發(fā)連接請求。但Boa支持CGI,能夠為CGI程序fork出一個進程來執(zhí)行。Boa的設(shè)計目標是速度和安全。它的最大特點是源代碼開放、性能高,其可執(zhí)行代碼只有大約60KB左右。

由于Boa服務(wù)器運行在Linux系統(tǒng),所以搭建分兩步,第一步首先在Ubuntu主機上實現(xiàn);第二步,完成在OK210的移植。其中,在Ubuntu上搭建有兩個目的:(1)為在OK210上移植做準備,(2)方便程序功能代碼的調(diào)試。
(一)主機上搭建

第一步編譯Boa
1、下載Boa源碼
下載地址: http://www.boa.org/ 或 http://sourceforge.net(當(dāng)前版本為boa-0.94.13)
下載boa-0.94.13.tar.gz
解壓: tar xvzfboa-0.94.13.tar.gz
2、生成Makefile文件
cd/boa-0.94.13/src
運行configure文件:./configure
3、安裝bison和flex
sudoapt-get install bison
sudoapt-get install flex
4、編譯
make
ps:編譯前安裝附錄(1)(2)(3)修改相應(yīng)的源碼,不然會在編譯或運行的過程中出錯,修改后,進行編譯
5、安裝
將生成的可執(zhí)行文件boa復(fù)制到/usr/local/bin/ 目錄下
sudo cp /boa-0.94.13/src/boa /usr/local/bin/
第二步 Boa的配置
1、創(chuàng)建目錄和文件
sudo mkdir /etc/boa
sudo mkdir -p  /var/www/cgi-bin/
sudo mkdir /var/log/boa/
sudo touch /var/log/boa/error_log
sudo touch /var/log/boa/access_log
2、修改權(quán)限
sudo chmod  -R 777  /var/www /var/log/boa/error_log/var/log/boa/access_log
sudo chmod  777 /uar/local/boa
3、配置boa.conf
將boa-0.94.13/boa.conf 復(fù)制到/etc/boa/ 目錄下
sudo cp boa.conf /etc/boa/
(1)修改Group參數(shù)
將Group nogroup修改為Group 0
ps:由于在/etc/group文件中沒有nogroup組,所以設(shè)成0。另外在/etc/passwd中有nobody用戶,所以User nobody不用修改
(2)修改ScriptAlias參數(shù)
將ScriptAlias /cgi-bin/  /usr/lib/cgi-bin/修改為ScriptAlias /cgi-bin/  /var/www/cgi-bin/
第三步:Boa的執(zhí)行
boa
ps:如果在第二步?jīng)]有執(zhí)行sudo chmod  777 /uar/local/boa,在此使用sudo boa
第四步:功能測試
1、靜態(tài)網(wǎng)頁測試
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>http://bbs.elecfans.com</title>
  6. </head>
  7. Hello World
  8. <body>
  9. </body>
  10. </html>
復(fù)制代碼
將靜態(tài)網(wǎng)頁index.html存入/var/www目錄下
直接在瀏覽器中輸入:本機地址
靜態(tài)HTML調(diào)試成功。
2、CGI腳本測試
1、編寫Helloworld.c程序
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.      printf("Content-type: text/html\n\n ");
  5.      printf("<html> ");
  6.      printf("<head><title>CGI Output</title></head> ");
  7.      printf("<body> ");
  8.      printf("<h1>Hello,world.</h1> ");
  9.      printf("<body> ");
  10.      printf("</html> ");
  11.      return 0;
  12. }
復(fù)制代碼
ps:
(1)形狀應(yīng)寫成printf("Content- type: text/html\n\n");
(2)主程序的程序開頭一定要用Tab,而不是空格

2、編譯helloworld.c成helloworld.cgi
若在主機上測試,則用: gcc -ohelloworld.cgi helloworld.c
若在開發(fā)板上測試,則用:arm-linux-gcc -o helloworld.cgi helloworld.c
3、瀏覽
將helloworld.cgi拷貝至/var/www/cgi-bin/下,瀏覽器輸入http://IP/cgi-bin/helloworld.cgi
(二)OK210上搭建

第一步:編譯Boa
1、修改Makefile
CC = gcc
CPP = gcc -E   
該為:
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
修改成功后,直接make
2、Boa瘦身

可以發(fā)現(xiàn)boa的大小前后差距很大,這為我們節(jié)省了很大的空間
第二步:配置boa
將主機 /etc/ 目錄下的 mime.types 文件拷貝到開發(fā)板 /etc 目錄下
第三步:移植
其實在OK210開發(fā)板上,已經(jīng)移植好了Boa服務(wù)器,我們需要知道的是配置文件在/etc/boa目錄下,可執(zhí)行程序在/sbin/目錄下,網(wǎng)頁文件在/usr/local/boa下,我們可以替換成我們自己編譯好的,也可以使用當(dāng)前的,下面的是使用當(dāng)前的測試結(jié)果:即在OK210開發(fā)板上運行Boa服務(wù)器,在PC上輸入OK210的IP地址顯示的結(jié)果。

三、附錄
附錄1
1)修改 src/compat.h,定位到120
找到
#define TIMEZONE_OFFSET(foo)foo##->tm_gmtoff
修改成
#define TIMEZONE_OFFSET(foo)(foo)->tm_gmtoff
否則會出現(xiàn)錯誤:
util.c:100:1: error: pasting "t"and "->" does not give a valid preprocessing token make: ***[util.o] 錯誤 1
2)修改 src/log.c,定位到72
注釋掉
if (dup2(error_log, STDERR_FILENO) == -1) {
                         DIE("unableto dup2 the error log");
                   }
為:
/*if (dup2(error_log, STDERR_FILENO) == -1){
                         DIE("unableto dup2 the error log");
                   }*/
否則會出現(xiàn)錯誤:
log.c:73 unable to dup2 the error log:badfile descriptor
3)修改src/boa.c,定位到210行和228
注釋掉下面兩句話:
if (passwdbuf == NULL) {
        DIE(”getpwuid”);
        }
        if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
        DIE(”initgroups”);
        }
#if 0
        if (passwdbuf == NULL) {
        DIE(”getpwuid”);
        }
        if(initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
        DIE(”initgroups”);
        }
        #endif
否則會出現(xiàn)錯誤:boa.c:211 - getpwuid: No such file or directory
注釋掉下面語句:
if (setuid(0) != -1) {
                        DIE(”ickyLinux kernel bug!”);
        }
#if 0
         if (setuid(0) != -1) {
                        DIE(”ickyLinux kernel bug!”);
                }
#endif
否則會出現(xiàn)問題:boa.c:228 - icky Linux kernel bug!: No such file or directory
附錄2
boa.conf中各參數(shù)的含義:
Port 80                                #監(jiān)聽的端口號,缺省都是80,一般無需修改
#Listen 192.68.0.5                #bind調(diào)用的IP地址,一般注釋掉,表明綁定到INADDR_ANY,通配于服務(wù)器的所有IP地址
User nobody                         #作為哪個用戶運行,即它擁有該用戶的權(quán)限,一般都是nobody,需要/etc/passwd中有nobody用戶
Group nogroup                     #作為哪個用戶組運行,即它擁有該用戶組的權(quán)限,一般都是nogroup,需要在/etc/group文件中有nogroup
#ServerAdmin root@localhost  #當(dāng)服務(wù)器發(fā)生問題時發(fā)送報警的email地址,目前未用,注釋掉
ErrorLog /var/log/boa/error_log       #錯誤日志文件。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。如果不需要錯誤日志,則用#/dev/null。在下面設(shè)置時,注意一定要建立/var/log/boa目錄
#AccessLog/var/log/boa/access_log     #訪問日志文件。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。如果不需要錯誤日志,則用#/dev/null或直接注釋掉。在下面設(shè)置時,注意一定要建立/var/log/boa目錄
#UseLocaltime                         #是否使用本地時間。如果沒有注釋掉,則使用本地時間。注釋掉則使用UTC時間
#VerboseCGILogs                       #是否記錄CGI運行信息,如果沒有注釋掉,則記錄,注釋掉則不記錄
ServerName www.hyesco.com             #服務(wù)器名字
#VirtualHost                          #是否啟動虛擬主機功能,即設(shè)備可以有多個網(wǎng)絡(luò)接口,每個接口都可以擁有一個虛擬的Web服務(wù)器。一般注釋掉,即不需要啟動
DocumentRoot /var/www                 #非常重要,HTML文檔的主目錄。如果沒有以/開始,則表示從服務(wù)器的根路徑開始。
UserDir public_html                   #如果收到一個用戶請求的話,在用戶主目錄后再增加的目錄名
DirectoryIndex index.html             #HTML目錄索引的文件名,也是沒有用戶只指明訪問目錄時返回的文件名
#DirectoryMaker/usr/lib/boa/boa_indexer     #當(dāng)HTML目錄沒有索引文件時,用戶只指明訪問目錄時,boa會調(diào)用該程序生成索引文件然后返回給用戶,因為該過程比較慢最好不執(zhí)行,可以注釋掉或者給每個HTML目錄加DirectoryIndex指明的文件,如果                                                            DirectoryIndex不存在,并且DirectoryMaker被注釋,那么就用Boa自帶的索引
#DirectoryCache/var/spool/boa/dircache      #生成程序來生成目錄的索引文件并輸出到下面目錄,該目錄必須是Boa能讀寫
KeepAliveMax 1000                           #一個連接所允許的HTTP持續(xù)作用請求最大數(shù)目,注釋或設(shè)為0都將關(guān)閉HTTP持續(xù)作用
KeepAliveTimeout 10                        #HTTP持續(xù)作用中服務(wù)器在兩次請求之間等待的時間數(shù),以秒為單位,超時將關(guān)閉連接
MimeTypes /etc/mime.types                   #指明mime.types文件位置。如果沒有以/開始,則表示從服務(wù)器的根路徑開始??梢宰⑨尩舯苊馐褂?/span>mime.types文件,此時需要用AddType在本文件里指明
DefaultType text/plain                      #文件擴展名沒有或未知的話,使用的缺省MIME類型
CGIPath/bin:/usr/bin:/usr/local/bin         #提供CGI程序的PATH環(huán)境變量值
#AddType application/x-httpd-cgicgi         #將文件擴展名和MIME類型關(guān)聯(lián)起來,和mime.types文件作用一樣。如果用mime.types文件,則注釋掉,如果不使用mime.types文件,則必須使用
#Redirect /barhttp://elsewhere/feh/bar      #指明文檔重定向路徑
Alias /doc /usr/doc                         #為路徑加上別名
ScriptAlias /cgi-bin//var/www/cgi-bin/      #非常重要,指明CGI腳本的虛擬路徑對應(yīng)的實際路徑。一般所有的CGI腳本都要放在實際路徑里,用戶訪問執(zhí)行時輸入站點+虛擬路徑+CGI腳本名

相關(guān)產(chǎn)品 >

  • OKMX6UL-C開發(fā)板

    飛凌嵌入式專注imx6系列imx6ul開發(fā)板、飛思卡爾imx6ul核心板等ARM嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計和生產(chǎn),i.mx6UL系列產(chǎn)品現(xiàn)已暢銷全國,作為恩智浦imx6ul,imx6ul開發(fā)板,i.mx6提供者,飛凌嵌入式提供基于iMX6 iMX6UL解決方案定制。

    了解詳情
    OKMX6UL-C開發(fā)板
  • OKMX6ULL-C開發(fā)板

    40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開發(fā)板是基于NXP i.MX6ULL設(shè)計開發(fā)的的一款Linux開發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應(yīng)場景豐富。 了解詳情
    OKMX6ULL-C開發(fā)板

推薦閱讀 換一批 換一批