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

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

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

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

[復(fù)制鏈接]

319

主題

319

帖子

2727

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

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

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

關(guān)于BOA

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

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

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

BOA下載與修改

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

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



下載壓縮包后,將其傳入U(xiǎn)buntu中,用于交叉編譯至開(kāi)發(fā)板端運(yùn)行。

1. 解壓Boa壓縮包。
  • tar -xvf boa-0.94.13.tar.gzcd boa-0.94.13/
    2. 安裝依賴(lài)包。
  • sudo apt-get updatesudo apt-get install byaccsudo apt-get install flex
    3. 進(jìn)入src源碼目錄配置Mafile。
    左右滑動(dòng)查看完整內(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
    將源碼中的
    左右滑動(dòng)查看完整內(nèi)容
  • #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff
    修改為:
    左右滑動(dòng)查看完整內(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
    將原來(lái)的程序
    左右滑動(dòng)查看完整內(nèi)容
  • /* redirect stderr to error_log */ if (dup2(error_log, STDERR_FILENO) == -1) { DIE("unable to dup2 the error log"); }
    注釋或者使用if 0不執(zhí)行改程序,如下所示:
    左右滑動(dòng)查看完整內(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:
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~/boa-0.94.13/src$ make
    編譯完成后會(huì)得到可執(zhí)行程序boa和boa_indexer。

    修改安裝目錄

    1. 進(jìn)入源碼目錄中。
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~/boa-0.94.13$ cd srcubuntu@ubuntu2004:~/boa-0.94.13/src$
    2. 在源碼src目錄下,創(chuàng)建boa安裝目錄。
    左右滑動(dòng)查看完整內(nèi)容
  • sudo mkdir -p /boa /boa/www /boa/cgi-bin /boa/log
    3. 修改defines.h文件中的SERVER_ROOT,使其指向改動(dòng)后的配置文件路徑。
  • vim defines.h +30
    修改源碼為:
  • #define SERVER_ROOT "/boa"
    4. 修改boa配置文件。
    在boa-0.94.13目錄下修改:
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~/boa-0.94.13$ vim boa.conf
    將其中的內(nèi)容修改為:
    左右滑動(dòng)查看完整內(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. 復(fù)制必要的文件到安裝目錄。
    在boa-0.94.13目錄下boa.conf配置文件至/boa/目錄下。
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~/boa-0.94.13$ sudo cp boa.conf /boa/
    在源碼目錄下復(fù)制boa_indexer至/boa/目錄下。
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp boa_indexer /boa/
    復(fù)制/etc/mime.types至/boa/目錄下。
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp /etc/mime.types /boa/
    在源碼目錄下復(fù)制boa至/boa/目錄下。
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~/boa-0.94.13/src$ sudo cp boa /boa/
    復(fù)制完成后可以在/boa/看到對(duì)應(yīng)的可執(zhí)行程序和配置文件。

    實(shí)現(xiàn)HTML頁(yè)面文件

    1. 在www目錄下創(chuàng)建html文件。
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~$ cd /boa/www/ubuntu@ubuntu2004:/boa/www$ sudo touch index.html
    2. 編輯index.html文件。

    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:/boa/www$ sudo vim index.html
    將下面的內(nèi)容填入html文件中:
    左右滑動(dòng)查看完整內(nèi)容
  • this is a test!



    上機(jī)實(shí)驗(yàn)

    1. 在boa-0.94.13/src目錄下執(zhí)行程序清理。
  • make clean
    清理完成后可以看到,可執(zhí)行文件被刪除。

    2. 修改Makefile使用交叉編譯工具鏈進(jìn)行編譯。
  • vi Makefile
    注釋掉原來(lái)的gcc工具鏈,新增CPP工具鏈。
  • CPP = $(CC) -E -static
    使用靜態(tài)鏈接編譯:
    左右滑動(dòng)查看完整內(nèi)容
  • $(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -static$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -static
    修改完成后如下所示:



    3. 編譯:
    ① 在boa-0.94.13/src目錄下配置環(huán)境并編譯可執(zhí)程序。
    左右滑動(dòng)查看完整內(nèi)容
  • source /opt/remi-sdk/environment-setup-aarch64-poky-linuxmake
    編譯完成后可查看對(duì)應(yīng)的可執(zhí)行程序的可用的平臺(tái)。
  • file boafile boa_indexer
    ② 將可執(zhí)行文件拷貝到安裝目錄。
    在拷貝前線殺掉后臺(tái)運(yùn)行boa進(jìn)行,可查看前面運(yùn)行boa、成功后的打印信息,運(yùn)行成功后會(huì)返回PID值,假設(shè)PID值為49153:
  • sudo kill -9 49153
    拷貝兩個(gè)可執(zhí)行程序到/boa目錄下。
    左右滑動(dòng)查看完整內(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/
    ③ 編譯測(cè)試程序。
    由于無(wú)法在根目錄下進(jìn)行交叉編譯,所以需要將test.c拷貝到用戶空間編譯。拷貝test.c到home目錄下:
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:/boa/cgi-bin$ sudo cp test.c ~/ubuntu@ubuntu2004:/boa/cgi-bin$ cd ~
    在編譯前需要配置環(huán)境變量,配置完成后:
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~$ source /opt/remi-sdk/environment-setup-aarch64-poky-linuxubuntu@ubuntu2004:~$ $CC test.c -o test.cgi
    編譯完成后可得到交叉編譯后的可執(zhí)行程序,將可執(zhí)行程序拷貝回安裝目錄。
    左右滑動(dòng)查看完整內(nèi)容
  • ubuntu@ubuntu2004:~$ sudo cp test.cgi /boa/cgi-bin/
    ④ 將根目錄中的整個(gè)/boa文件夾上傳到開(kāi)發(fā)板端。
    假設(shè)設(shè)置開(kāi)發(fā)板的IP為:192.168.5.9,上傳程序到開(kāi)發(fā)板上。
    左右滑動(dòng)查看完整內(nèi)容
  • sudo scp -r /boa/ root@192.168.5.9:/mnt/
    測(cè)試:
    進(jìn)入/mnt目錄運(yùn)行程序:
  • root@myir-remi-1g:~# cd /mnt/root@myir-remi-1g:/mnt# lsboa/
    將/mnt/目錄下的boa文件夾拷貝到開(kāi)發(fā)板根目錄下。
    左右滑動(dòng)查看完整內(nèi)容
  • root@myir-remi-1g:/mnt# cp boa/ -rf /
    修改boa.conf配置文件中的端口號(hào)。
    左右滑動(dòng)查看完整內(nèi)容
  • root@myir-remi-1g:/mnt# vi /boa/boa.conf
    修改文件中的端口號(hào)Port為8080,如下所示:
  • Port 8080
    執(zhí)行boa程序運(yùn)行Web服務(wù)器:
    左右滑動(dòng)查看完整內(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
    運(yùn)行成功后,可用在Ubuntu端使用瀏覽器打開(kāi)的網(wǎng)址,假設(shè)開(kāi)發(fā)板的IP為192.168.5.9,那么Ubuntu端打開(kāi)的網(wǎng)址為:
  • http://192.168.5.9:8080


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

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


    MPU使用GCC編譯的過(guò)程


    單片機(jī)和PHY芯片連接時(shí)的注意事項(xiàng)


    瑞薩RA8系列教程 | RA8輸出PWM實(shí)現(xiàn)方法
  • 發(fā)表回復(fù)

    本版積分規(guī)則

    關(guān)閉

    站長(zhǎng)推薦上一條 /1 下一條


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