|
關注+星標公眾號,不錯過精彩內(nèi)容
來源 | 白問網(wǎng)
轉自 | 瑞薩嵌入式小百科
今天給大家分享一款適合嵌入式系統(tǒng)的輕量級Web服務器:BOA,并手把手教大家移植。
關于BOA
BOA是一款適合嵌入式系統(tǒng)的輕量級Web服務器,它支持開放源代碼、具備高性能,并且兼容CGI(通用網(wǎng)關接口)技術。BOA的核心功能是促進嵌入式設備之間的信息交流,實現(xiàn)對這些設備的網(wǎng)絡監(jiān)控,并自動將數(shù)據(jù)反饋給主控設備。
這個服務器基于HTTP(超文本傳輸協(xié)議),其中Web頁面是傳輸信息的基本單位。在客戶端/服務器模型的基礎上,BOA作為服務器與客戶端的Web瀏覽器交互。瀏覽器首先與BOA服務器建立連接,打開一個套接字,這標志著SOCKET連接已成功建立。隨后,瀏覽器通過這個套接字使用GET或POST方法向服務器發(fā)送請求,這些請求通過HTTP協(xié)議傳遞。
服務器收到請求后,會根據(jù)請求類型進行處理,可能是返回HTML文件,或者通過CGI調(diào)用外部程序來處理請求并返回結果。CGI允許服務器與外部應用程序和腳本進行交互,服務器會收集瀏覽器提供的信息,并將其傳遞給相應的CGI程序進行處理。處理完畢后,服務器會分析結果并將其發(fā)送回客戶端,以便在瀏覽器中顯示。這樣,BOA服務器就能夠有效地在嵌入式設備和控制系統(tǒng)之間傳遞和顯示信息。
BOA下載與修改
下面展示如何移植Boa輕量級Web服務器到開發(fā)板端。
進入Boa官方網(wǎng)址獲取Boa源碼:
http://www.boa.org/
xevcdgyu0pn64040258829.png (136.08 KB, 下載次數(shù): 0)
下載附件
保存到相冊
xevcdgyu0pn64040258829.png
2024-10-24 07:35 上傳
下載壓縮包后,將其傳入Ubuntu中,用于交叉編譯至開發(fā)板端運行。
1. 解壓Boa壓縮包。
tar -xvf boa-0.94.13.tar.gzcd boa-0.94.13/
2. 安裝依賴包。
sudo apt-get updatesudo apt-get install byaccsudo apt-get install flex
3. 進入src源碼目錄配置Mafile。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13$ cd src/ubuntu@ubuntu2004:~/boa-0.94.13/src$ ./configure
4. 修改源碼。
修改 compat.h:
vi src/compat.h +120
將源碼中的
左右滑動查看完整內(nèi)容
#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
修改為:
左右滑動查看完整內(nèi)容
define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff
修改boa.c:
vi src/boa.c +255修改源碼為:
#if 0 if (setuid(0) != -1) { DIE("icky Linux kernel bug!"); }#endif
修改log.c:
vi src/log.c +73
將原來的程序
左右滑動查看完整內(nèi)容
/* redirect stderr to error_log */ if (dup2(error_log, STDERR_FILENO) == -1) { DIE("unable to dup2 the error log"); }
注釋或者使用if 0不執(zhí)行改程序,如下所示:
左右滑動查看完整內(nèi)容
#if 0 /* redirect stderr to error_log */ if (dup2(error_log, STDERR_FILENO) == -1) { DIE("unable to dup2 the error log"); }#endif
5. 編譯源碼。
在src源碼目錄下執(zhí)行編譯make:
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13/src$ make
編譯完成后會得到可執(zhí)行程序boa和boa_indexer。
修改安裝目錄
1. 進入源碼目錄中。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13$ cd srcubuntu@ubuntu2004:~/boa-0.94.13/src$
2. 在源碼src目錄下,創(chuàng)建boa安裝目錄。
左右滑動查看完整內(nèi)容
sudo mkdir -p /boa /boa/www /boa/cgi-bin /boa/log
3. 修改defines.h文件中的SERVER_ROOT,使其指向改動后的配置文件路徑。
vim defines.h +30
修改源碼為:
#define SERVER_ROOT "/boa"
4. 修改boa配置文件。
在boa-0.94.13目錄下修改:
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13$ vim boa.conf
將其中的內(nèi)容修改為:
左右滑動查看完整內(nèi)容
Port 80User 0Group 0ErrorLog /boa/log/error_logAccessLog /boa/log/access_logDocumentRoot /boa/wwwUserDir public_htmlDirectoryIndex index.htmlDirectoryMaker /boa/boa_indexerKeepAliveMax 1000KeepAliveTimeout 10MimeTypes /boa/mime.typesDefaultType text/plainCGIPath /bin:/usr/bin:/usr/local/binAlias /doc /usr/docScriptAlias /cgi-bin/ /boa/cgi-bin/
5. 復制必要的文件到安裝目錄。
在boa-0.94.13目錄下boa.conf配置文件至/boa/目錄下。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13$ sudo cp boa.conf /boa/
在源碼目錄下復制boa_indexer至/boa/目錄下。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp boa_indexer /boa/
復制/etc/mime.types至/boa/目錄下。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp /etc/mime.types /boa/
在源碼目錄下復制boa至/boa/目錄下。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp boa /boa/
復制完成后可以在/boa/看到對應的可執(zhí)行程序和配置文件。
實現(xiàn)HTML頁面文件
1. 在www目錄下創(chuàng)建html文件。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~$ cd /boa/www/ubuntu@ubuntu2004:/boa/www$ sudo touch index.html
2. 編輯index.html文件。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:/boa/www$ sudo vim index.html
將下面的內(nèi)容填入html文件中:
左右滑動查看完整內(nèi)容
this is a test!
cfvvixp5nso64040258929.png (502.39 KB, 下載次數(shù): 0)
下載附件
保存到相冊
cfvvixp5nso64040258929.png
2024-10-24 07:35 上傳
上機實驗
1. 在boa-0.94.13/src目錄下執(zhí)行程序清理。
make clean
清理完成后可以看到,可執(zhí)行文件被刪除。
2. 修改Makefile使用交叉編譯工具鏈進行編譯。
vi Makefile
注釋掉原來的gcc工具鏈,新增CPP工具鏈。
CPP = $(CC) -E -static
使用靜態(tài)鏈接編譯:
左右滑動查看完整內(nèi)容
$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -static$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -static
修改完成后如下所示:
ay34sga2u0r64040259029.png (124 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ay34sga2u0r64040259029.png
2024-10-24 07:35 上傳
3. 編譯:
① 在boa-0.94.13/src目錄下配置環(huán)境并編譯可執(zhí)程序。
左右滑動查看完整內(nèi)容
source /opt/remi-sdk/environment-setup-aarch64-poky-linuxmake
編譯完成后可查看對應的可執(zhí)行程序的可用的平臺。
file boafile boa_indexer
② 將可執(zhí)行文件拷貝到安裝目錄。
在拷貝前線殺掉后臺運行boa進行,可查看前面運行boa、成功后的打印信息,運行成功后會返回PID值,假設PID值為49153:
sudo kill -9 49153
拷貝兩個可執(zhí)行程序到/boa目錄下。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp boa /boa/ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp boa_indexer /boa/
③ 編譯測試程序。
由于無法在根目錄下進行交叉編譯,所以需要將test.c拷貝到用戶空間編譯?截恡est.c到home目錄下:
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:/boa/cgi-bin$ sudo cp test.c ~/ubuntu@ubuntu2004:/boa/cgi-bin$ cd ~
在編譯前需要配置環(huán)境變量,配置完成后:
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~$ source /opt/remi-sdk/environment-setup-aarch64-poky-linuxubuntu@ubuntu2004:~$ $CC test.c -o test.cgi
編譯完成后可得到交叉編譯后的可執(zhí)行程序,將可執(zhí)行程序拷貝回安裝目錄。
左右滑動查看完整內(nèi)容
ubuntu@ubuntu2004:~$ sudo cp test.cgi /boa/cgi-bin/
④ 將根目錄中的整個/boa文件夾上傳到開發(fā)板端。
假設設置開發(fā)板的IP為:192.168.5.9,上傳程序到開發(fā)板上。
左右滑動查看完整內(nèi)容
sudo scp -r /boa/ root@192.168.5.9:/mnt/
測試:
進入/mnt目錄運行程序:
root@myir-remi-1g:~# cd /mnt/root@myir-remi-1g:/mnt# lsboa/
將/mnt/目錄下的boa文件夾拷貝到開發(fā)板根目錄下。
左右滑動查看完整內(nèi)容
root@myir-remi-1g:/mnt# cp boa/ -rf /
修改boa.conf配置文件中的端口號。
左右滑動查看完整內(nèi)容
root@myir-remi-1g:/mnt# vi /boa/boa.conf
修改文件中的端口號Port為8080,如下所示:
Port 8080
執(zhí)行boa程序運行Web服務器:
左右滑動查看完整內(nèi)容
root@myir-remi-1g:/mnt# cd /boaroot@myir-remi-1g:/boa# ./boa[01/Jan/2066:02:07:10 +0000] boa: server version Boa/0.94.13[01/Jan/2066:02:07:10 +0000] boa: server built Apr 30 2024 at 02:17:37.[01/Jan/2066:02:07:10 +0000] boa: starting server pid=610, port 8080
運行成功后,可用在Ubuntu端使用瀏覽器打開的網(wǎng)址,假設開發(fā)板的IP為192.168.5.9,那么Ubuntu端打開的網(wǎng)址為:
http://192.168.5.9:8080
oxpilqwvjxv64040259130.png (620.92 KB, 下載次數(shù): 0)
下載附件
保存到相冊
oxpilqwvjxv64040259130.png
2024-10-24 07:35 上傳
注意:在訪問web服務器前,請確保開發(fā)板使用網(wǎng)線連接到電腦端/路由器,并成功設置IP。
------------ END ------------
xt4x2vt3iuh64040259230.jpg (338.3 KB, 下載次數(shù): 0)
下載附件
保存到相冊
xt4x2vt3iuh64040259230.jpg
2024-10-24 07:35 上傳
MPU使用GCC編譯的過程
t1zcxv3te3564040259330.jpg (212.13 KB, 下載次數(shù): 0)
下載附件
保存到相冊
t1zcxv3te3564040259330.jpg
2024-10-24 07:35 上傳
單片機和PHY芯片連接時的注意事項
hwkmsi4l1ed64040259430.jpg (215.56 KB, 下載次數(shù): 0)
下載附件
保存到相冊
hwkmsi4l1ed64040259430.jpg
2024-10-24 07:35 上傳
瑞薩RA8系列教程 | RA8輸出PWM實現(xiàn)方法 |
|