Skip to main content

Seeed の Jetson BSP 用ドライバーモジュールの構築方法

reComputer/reServer で必要な .ko ドライバーモジュールが利用できない場合、Jetson 上でドライバーモジュールをコンパイルして読み込むことができます。この wiki では、JetPack 6.2 を例として、具体的な手順と重要な注意点を説明します。

1. ワークスペースの準備

この記事では、JetPack 6.2 BSP に対応する L4T 36.4.3 を例として、reComputer/reServerpl2303(USB-シリアル関連ドライバー)の .ko ドライバーモジュールをコンパイルする方法を示します。

まず、お使いの L4T バージョンに応じて、NVIDIA の公式ウェブサイトから BSP ソースコードをダウンロードします。

L4T バージョンと JetPack バージョンの関係がわからない場合は、このリンクを参照してください: https://developer.nvidia.com/embedded/jetpack-archive.

コンパイルしたい特定の L4T (Linux for Tegra) リリースを検索します。例:

NVIDIA のウェブサイトから対応する BSP ソースコードをダウンロードします:

ダウンロードした BSP ソースコードアーカイブを作業ディレクトリに配置し、ターミナルで以下のコマンドを実行して完全に展開します:

# First extract the main file
tar -xjf public_sources.tbz2

# Enter the extracted directory
cd Linux_for_Tegra/source

# Recursively extract all .tbz2, .tar.bz2, .tar.gz, .tgz, .tar.xz files
find . -type f \( -name "*.tbz2" -o -name "*.tar.bz2" -o -name "*.tar.gz" -o -name "*.tgz" -o -name "*.tar.xz" \) -exec bash -c '
dir=$(dirname "$1")
filename=$(basename "$1")
cd "$dir"
if [[ "$filename" == *.tbz2 || "$filename" == *.tar.bz2 ]]; then
tar -xjf "$filename"
elif [[ "$filename" == *.tar.gz || "$filename" == *.tgz ]]; then
tar -xzf "$filename"
elif [[ "$filename" == *.tar.xz ]]; then
tar -xJf "$filename"
fi
cd - > /dev/null
' _ {} \;

すべてのアーカイブを展開した後、Linux_for_Tegra/source に移動し、キーワードに基づいてドライバーソースパスを特定します:

sudo find . -type f -name "*<keyword>*"

# For exmaple:
sudo find . -type f -name "*pl2303*"

コンパイル用の新しいワークスペースを作成します。ターミナルに表示されたソースパスに従って、ドライバーソースコードをこのワークスペースにコピーします。

次に、ワークスペース内で、以下の内容でコンパイル用の Makefile を作成します:

obj-m   += pl2303.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

ここで、pl2303.o はコンパイルしたいドライバーの対応する名前に置き換える必要があります。

ワークスペースは以下の図のようになり、ソースファイルと Makefile の両方が含まれます:

コンパイルする前に、シンボリックリンクを作成する必要があります:

# Remove existing redundant directory if it exists
sudo rm -r /lib/modules/$(uname -r)/build

# Create symbolic link
sudo ln -s /usr/src/linux-headers-$(uname -r)-ubuntu22.04_aarch64/3rdparty/canonical/linux-jammy/kernel-source /lib/modules/$(uname -r)/build

シンボリックリンクを作成した後、ワークスペースで以下のコマンドを実行してコンパイルし、.ko ドライバーモジュールを取得します:

make

コンパイル後、.ko ファイルが現在のディレクトリに生成されます:

次に、.ko ファイルを正しいターゲットパスにコピーします:

sudo cp pl2303.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/

コンパイルされた .ko ドライバーモジュールの場合、ターゲットパスのプレフィックスは常に /lib/modules/$(uname -r)/kernel/ です。サフィックスはドライバーモジュールのタイプに依存し、ソースコードの相対パスから推測できます。これにより完全なターゲットパスが得られます:

ターゲットパスにコピーした後、.ko ドライバーモジュールを読み込みます:

sudo depmod -a
sudo modprobe pl2303

正常に読み込まれたら、modinfo <driver_name> を実行して確認できます:

リソース

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!弊社製品での体験を可能な限りスムーズにするため、さまざまなサポートを提供しています。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。

Loading Comments...