電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 34|回復: 0
收起左側(cè)

一款適合嵌入式系統(tǒng)的輕量級Web服務器

[復制鏈接]

319

主題

319

帖子

2727

積分

三級會員

Rank: 3Rank: 3

積分
2727
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-10-22 11:45:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)注+星標公眾,不錯過精彩內(nèi)容
來源 | 白問網(wǎng)
轉(zhuǎn)自 | 瑞薩嵌入式小百科

今天給大家分享一款適合嵌入式系統(tǒng)的輕量級Web服務器:BOA,并手把手教大家移植。

關(guān)于BOA

BOA是一款適合嵌入式系統(tǒng)的輕量級Web服務器,它支持開放源代碼、具備高性能,并且兼容CGI(通用網(wǎng)關(guān)接口)技術(shù)。BOA的核心功能是促進嵌入式設備之間的信息交流,實現(xiàn)對這些設備的網(wǎng)絡監(jiān)控,并自動將數(shù)據(jù)反饋給主控設備。

這個服務器基于HTTP(超文本傳輸協(xié)議),其中Web頁面是傳輸信息的基本單位。在客戶端/服務器模型的基礎(chǔ)上,BOA作為服務器與客戶端的Web瀏覽器交互。瀏覽器首先與BOA服務器建立連接,打開一個套接字,這標志著SOCKET連接已成功建立。隨后,瀏覽器通過這個套接字使用GET或POST方法向服務器發(fā)送請求,這些請求通過HTTP協(xié)議傳遞。

服務器收到請求后,會根據(jù)請求類型進行處理,可能是返回HTML文件,或者通過CGI調(diào)用外部程序來處理請求并返回結(jié)果。CGI允許服務器與外部應用程序和腳本進行交互,服務器會收集瀏覽器提供的信息,并將其傳遞給相應的CGI程序進行處理。處理完畢后,服務器會分析結(jié)果并將其發(fā)送回客戶端,以便在瀏覽器中顯示。這樣,BOA服務器就能夠有效地在嵌入式設備和控制系統(tǒng)之間傳遞和顯示信息。

BOA下載與修改

下面展示如何移植Boa輕量級Web服務器到開發(fā)板端。

進入Boa官方網(wǎng)址獲取Boa源碼:
http://www.boa.org/



下載壓縮包后,將其傳入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!



    上機實驗

    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
    修改完成后如下所示:



    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


    注意:在訪問web服務器前,請確保開發(fā)板使用網(wǎng)線連接到電腦端/路由器,并成功設置IP。

    ------------ END ------------


    MPU使用GCC編譯的過程


    單片機和PHY芯片連接時的注意事項


    瑞薩RA8系列教程 | RA8輸出PWM實現(xiàn)方法
  • 回復

    使用道具 舉報

    發(fā)表回復

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則

    關(guān)閉

    站長推薦上一條 /1 下一條


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表