JetsonNanoに基づくBluezBluetoothプロトコルスタック開発環境の構築

0、注文

  BlueZは、公式のLinuxBluetoothプロトコルスタックです。この記事では、Jetsonnano開発プラットフォームでBluezに基づくBluetooth開発環境を構築する方法を紹介します。主に、SIGAllianceが提供する「DeveloperStudyGuide-How to Deploy BlueZ on the Raspberry Pi Board as a Bluetooth MeshProvisioner」を参照してください。また、JetsonnanoプラットフォームのLinuxカーネルの更新も含まれます。上記の情報のポータル:https//www.bluetooth.com/bluetooth-resources/

1.関連する依存関係ライブラリのインストール

1.1、ライブラリのインストール

sudo apt-get install libglib2.0-dev libdbus-1-dev libdbus-c++-dev libudev-dev libical-dev libreadline-dev

1.2、json-cのインストール

wget https://s3.amazonaws.com/json-c_releases/releases/json-c-0.13.tar.gz
tar -xvf json-c-0.13.tar.gz 
cd json-c-0.13/
./configure --prefix=/usr --disable-static && make
sudo make install

2.Bluezのインストール

2.1、コンパイルしてインストールする

wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.54.tar.xz
tar -xvf bluez-5.54.tar.xz 
cd bluez-5.54/
./configure --enable-mesh --enable-testing --enable-tools --prefix=/usr --mandir=/usr/share/man -- sysconfdir=/etc --localstatedir=/var 
sudo make 
sudo make install

2.2、構成ファイルを確認します

  Bluezサービス構成ファイルをチェックし、サービス構成ファイルのExecStartの値が「/ usr / libexec / bluetooth / bluetoothdであることを確認します

vim /lib/systemd/system/bluetooth.service

ここに画像の説明を挿入します

2.3、環境構成

  元の実行可能プログラムをバックアップし、次のシンボリックリンクを作成します。

sudo cp /usr/lib/bluetooth/bluetoothd /usr/lib/bluetooth/bluetoothd-550.orig
sudo ln -sf /usr/libexec/bluetooth/bluetoothd /usr/lib/bluetooth/bluetoothd 
sudo systemctl daemon-reload 
cd ~/.config/ 
mkdir meshctl 
cp ~/bluez-5.54/tools/mesh-gatt/local_node.json ~/.config/meshctl/ 
cp ~/bluez-5.54/tools/mesh-gatt/prov_db.json ~/.config/meshctl/

2.4。インストールされているBluezのバージョンを確認します

bluetoothd -v 
meshctl -v 
mesh-cfgclient -v

ここに画像の説明を挿入します
  上記の関連ツールをインストールした後、mesh-cfgctlを実行すると、シンボルとして定義されたエラーが発生します。コンパイルチェーン内のダイナミックライブラリを、自己コンパイルによって生成されたjson-cのダイナミックライブラリに置き換えることができます。インストール。
ここに画像の説明を挿入します

3、更新Linux Kernel

  しかし、meshctlの実行中に次のエラーが発生しました。

Failed to parse provisioning database file /home/colin/.config/meshctl/prov_db.json
free(): double free detected in tcache 2
Aborted

  上記の問題は、LinuxカーネルがAEAD-AES_CCMパッケージを正しくインストールしないために発生します。カーネルを再構成します。NVIDIAJetsonのダウンロードセンターから関連するカーネルとコンポーネントのソースコードをダウンロードします。現在のバージョンと同じバージョンをダウンロードする必要があることに注意してください。 1。カーネルダウンロードポータル:https//developer.nvidia.com/embedded/downloads、次の図に示すように、実行しているシステムと同じバージョンのソースコードをダウンロードして、交換後の起動の失敗を回避するように注意してください。カーネル。
ここに画像の説明を挿入します
L4Tソースをダウンロードした後、カーネルディレクトリに入り、カーネルを構成します
1)元のシステムのカーネル構成を.configに出力します

zcat /proc/config.gz > .config

2)カーネル構成

make menuconfig

  コマンドmakemenuconfigを実行した後、次のエラーが発生した場合は、関連する依存関係ライブラリが見つからず、インストールされていないことを意味します。インストールするだけです。

colin@Blanc:~/works/Linux_for_Tegra/source/public/kernel/kernel-4.9$ make menuconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/mconf.o
<command-line>:0:12: fatal error: curses.h: No such file or directory
compilation terminated.
scripts/Makefile.host:118: recipe for target 'scripts/kconfig/mconf.o' failed
make[1]: *** [scripts/kconfig/mconf.o] Error 1
Makefile:565: recipe for target 'menuconfig' failed
make: *** [menuconfig] Error 2

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

sudo apt-get install libncurses5-dev

さて、正式にカーネル構成を入力します。

3.1、カーネル構成

1)ネットワーキングサポートを有効にする
ここに画像の説明を挿入します
2)Crytographic APIを有効にする
ここに画像の説明を挿入します
3)Crytographic APIを有効にする->、CCMサポート、CMACサポートを有効にする、ハッシュアルゴリズムのユーザースペースインターフェイス、対称鍵暗号アルゴリズムのユーザースペースインターフェイス、AEAD暗号のユーザースペースインターフェイス次の図に示すように、アルゴリズム:
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

3.2、カーネルをコンパイルします


1) make prepare
2) make modules_prepare

jetson nano是4核的,故:
3) make -j4

3.3、モジュールをインストールする

make modules// 模块编译
sudo make modules_install // 安装模块到/lib/modules

3.4、新しいカーネルを交換します

sudo cp ./arch/arm64/boot/zImage /boot/zImage
sudo cp ./arch/arm64/boot/Image /boot/Image

3.5、再起動して確認します

sudo reboot

ここに画像の説明を挿入します
  再起動後、システムのバージョンを確認すると、カーネルの印刷時間が新しいことがわかります。上の図では、2020-12-20-15:33に新しいカーネルを再コンパイルして交換すると同時に、 、AEAD-AES_CCMパッケージを正しくインストールします。meshctlを実行すると、データベースファイルをロードして正常に実行でき、完了です-OK
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_33475105/article/details/111995309