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 !。