Linux 6.1.36 上の FET-MX9352-C プラットフォームに BOA を移植する方法は?

組み込みデバイスの管理とインタラクションでは、Web モードに基づくアプリケーションが主流になっています。このタイプのサーバーは、リソースをあまり占有せず、効率的に実行されるだけでなく、実際のニーズに応じてページ コンテンツを動的に生成することもできます。ユーザーは、追加のソフトウェアをインストールしたり、複雑な構成を設定したりすることなく、一般的に使用されている Web ブラウザーのみを介して、組み込みデバイスのリモート管理、状態監視、機能制御を実現できます。

BOA は軽量で効率的な組み込み Web サーバーで、リソース消費が最小限で構成が簡単なことで知られています。メモリと処理能力が限られているデバイスに特に適しており、基本的な Web 機能を提供します。この記事では、FET-MX9352-C プラットフォームに boa サーバーを移植する方法について説明します。 

ソースコードをコンパイルするには?

ダウンロードアドレス:

http://www.boa.org/

1. 依存ライブラリをインストールする

sudo apt-get install bison flex

Ubuntuでソースコードを解凍する

$ tar xvf boa-0.94.14rc21.tar 
cd boa-0.94.14rc21/

boaソースコードを変更する

src/compat.h を修正する

探す

#define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

変更する

#define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

それ以外の場合はエラーが発生します:

util.c:100:1: エラー: 「t」と「->」を貼り付けても有効なプリプロセス トークンが生成されません。make: *** [util.o]

エラー 1

src/log.c を修正する

探す

if (dup2(error_log, STDERR_FILENO) == -1) {
	                  DIE("unable to dup2 the error log");
                   }

変更する

/*if (dup2(error_log, STDERR_FILENO) == -1) {
                         DIE("unable to dup2 the error log");
                   }*/

それ以外の場合はエラーが発生します:

log.c:73 エラー ログを複製できません: ファイル記述子が不正です

src/boa.c を修正する

探す

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

それ以外の場合は、エラーが発生します: boa.c:211 - getpwuid: そのようなファイルまたはディレクトリはありません

環境変数を設定してコンパイルする

. /opt/fsl-imx-xwayland/6.1-mickledore/environment-setup-armv8a-poky-linux
./configure --host=arm-linux
make
aarch64-poky-linux-strip src/boa

この時点で、boaはクロスコンパイルされている

予想されるファイルパス examples/boa.conf および SRC/boa

2. boa.confを変更する

vi boa.conf

(1)グループの変更

グループの変更 nogroup

グループルートへ

(2)ユーザーによる変更

ユーザーの変更nobody

ユーザールートへ

(3)DocumentRootを変更する

ドキュメントルート /var/www

(4)ScriptAliasを変更する

スクリプトエイリアス /cgi-bin/ /usr/lib/cgi-bin/

(5)サーバー名の設定

#ServerName を www.your.org.here に変更します

サーバー名 www.your.org.here

そうでない場合、「gethostbyname::No such file or directory」というエラーが発生します。

3. テストファイルをコンパイルする

Ubuntuでソースコードを解凍する

tar xvf cgi_app.tar.gz
cd cgi_app/

ファイルをクリーンアップする

make clean

環境変数を設定してコンパイルする

. /opt/fsl-imx-xwayland/6.1-mickledore/environment-setup-armv8a-poky-linux
$CC -o app.cgi cgi_app.c cJSON/cJSON.c

app.cgi を生成する

4.開発ボードへの配置

ディレクトリを作成するには、開発ボードで次のコマンドを入力します。

mkdir /usr/lib/cgi-bin
mkdir /var/www
mkdir /etc/boa

mkdir /usr/lib/cgi-bin/ 目次app.cgiを/usr/lib/cgi-bin/ディレクトリに置く

index.html、xmlhttpreq.jsを/var/www/フォルダに置く

boa.confを/etc/boa/ディレクトリに置く

boaを/usr/bin/ディレクトリに置く

MIMEタイプを/etc/ディレクトリに配置する

権限の変更

chown root:root /var/www/*
chown root:root /usr/lib/cgi-bin/app.cgi
chmod  o+x /usr/lib/cgi-bin/app.cgi
chmod  o+r /usr/lib/cgi-bin/app.cgi

元のネットワークサービスをオフにする

9352のlighttpdサービスが自己起動しているため、ps aux | grep httpでそのプロセスIDを確認できます。Lighttpdサービスの起動を無効にするには、vi /lib/systemd/system/lighttpd.serviceの8行目と9行目を次のように変更します。

#ExecStartPre=/usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf
#ExecStart=/usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf

ログファイルを作成する

Vi/etc/autorun.sh これをmkdir/var/log/boaに書き込んで再起動する

開発ボード上で次のコマンドを入力して boa を起動します

boa

コンピュータと開発ボードはネットワーク ケーブルを介して直接接続され、コンピュータはブラウザーを開いて開発ボードの IP にアクセスします。

http://192.168.0.232/

 


 

親愛なる友人の皆様、弊社は Facebook 上に組み込み技術交流専用のグループを作成しました。このグループでは、弊社の専門家が最新の技術トレンドと実践的なスキルを共有しています。ご参加いただき、一緒に成長しましょう!