メインコンテンツまでスキップ

完全なファームウェアをビルドする

3 ステップのワークフロー​

cd recamera-pro-sdk-v1.0.10
./build.sh lunch # 1. Select a board configuration
./build.sh all # 2. Build and package the images
ls output/image/ # 3. Inspect the outputs

./build.sh all は、次のステージをこの順番で実行します:sysdrv(U-Boot + カーネル + rootfs)→ media → app → recovery → firmware(イメージのパッケージング)。

引数なしで ./build.sh を実行すると、デフォルトで allsave(all + save)が実行されます。 これにより、IMAGE/ 配下にイメージ、パッチ、ビルド情報もアーカイブされます。CI では、アーカイブを作成したくない場合は ./build.sh all を明示的に実行してください。

ボード構成を選択する​

./build.sh lunch

このスクリプトは、project/cfg/ 配下にある 50 個すべての BoardConfig-*.mk ファイルを一覧表示し、番号を振ります。ファイル名は次のパターンに従います:

BoardConfig-"boot-medium"-"power-scheme"-"hardware-version"-"application-scenario".mk

reCamera Pro の場合、BoardConfig_Recamera2/ 配下の 2 つの構成のいずれかを選択します:

Configuration file説明
BoardConfig_Recamera2/BoardConfig-EMMC-RK801-RV1126B_V1-IPC_64BIT.mk64 ビット(推奨)。aarch64-rockchip1240-linux-gnu を使用
BoardConfig_Recamera2/BoardConfig-EMMC-RK801-RV1126B_V1-IPC.mk32 ビット版

メニュー番号は、エントリがファイル名でソートされるため、SDK バージョン間で変わる可能性があります。ドキュメント、スクリプト、CI 設定に番号をハードコードしないでください。代わりに完全なファイル名を使用してください。

非対話式の選択(CI に推奨)​

lunch は構成ファイル名を直接受け取り、対話式メニューを回避できます:

./build.sh lunch BoardConfig-EMMC-RK801-RV1126B_V1-IPC_64BIT.mk

選択後、SDK ルートには、選択したファイルを指す .BoardConfig.mk という名前のシンボリックリンクが作成されます:

ls -l .BoardConfig.mk
./build.sh info # Check the current configuration, defconfig, DTS, partition table, and all RK_* variables

build.sh コマンドリファレンス(完全版)​

コンポーネントビルド​

Command説明
envenv パーティションイメージ(パーティションテーブルとブート引数)を生成
metaマルチメディア meta ヘッダをビルド/エクスポート。任意指定であり、アプリケーションビルド時に自動的に処理されます
ubootU-Boot をビルド
kernelカーネルをビルド
rootfsBuildroot を用いて root ファイルシステムをビルド
driverカーネルドライバモジュール(.ko)をビルド
sysdrvU-Boot + カーネル + rootfs をビルド
mediampp / rockit / rkaiq / rga / iva などのマルチメディアライブラリをビルド
appリファレンスアプリケーションをビルド(media に依存。先に media をビルドする必要があります)
recoveryリカバリシステムをビルド
toolホスト PC 用ツールをビルド
mcuMCU 側の RT-Thread ファームウェアをビルド。このコマンドは通常の引数解析より前に処理されます。./build.sh mcu [configuration] を使用してください

パッケージングおよびシステム全体のコマンド​

Command説明
allシステムの起動に必要なすべてのイメージをビルドしてパッケージング
allsaveall + save を実行。引数が指定されていない場合のデフォルト
firmwareシステムの起動に必要なすべてのイメージをパッケージング
updateimgすべてのパーティションイメージを update.img にパッケージング
unpackimgupdate.img パッケージを展開
otaOTA アップデートアーカイブ update_ota.tar をパッケージング
factorytools/linux/SocToolKit を使用して工場出荷用フラッシュイメージを作成
sdcard_upgradeSD カードアップグレード用イメージを作成
saveイメージ、パッチ、デバッグ情報を IMAGE/ にアーカイブ。save xml はリポジトリのマニフェストも保存

クリーン​

Command説明
cleanすべてのビルド成果物をクリーン
clean uboot / clean kernel / clean driver / clean rootfs / clean sysdrv指定したコンポーネントをクリーン
clean media / clean app / clean recoverymedia、アプリケーション、または recovery をクリーン

設定メニュー​

Command説明
kernelconfigカーネルの menuconfig を開きます。終了時に savedefconfig を使って設定を defconfig に自動保存します
buildrootconfigBuildroot の menuconfig を開き、終了時に defconfig を保存

kernelconfig は最初に defconfig.before スナップショットを保存します。設定に変更がない場合は、savedefconfig をスキップします。

セキュアブートおよび高度なコマンド​

Command説明
dm暗号化または verity パーティション用の device-mapper イメージを作成
dm-key-gendevice-mapper キーを生成
secure-boot-key-genセキュアブートキーを生成

ヘルプの取得(注意点)​

./build.sh help          # Print usage
./build.sh help media # Show the actual make command used for media
./build.sh help kernel # Likewise for kernel; also works with uboot/rootfs/sysdrv

落とし穴: lunch の前に ./build.sh --help を実行すると、ヘルプを表示する代わりに、先にボード選択メニューが開く場合があります。スクリプトは引数を解析する前に .BoardConfig.mk をチェックし、リンクが存在しない場合はボード選択を強制します。まず ./build.sh lunch を実行し、ボードを選択した後で --help / help によって使用方法の情報を表示できるようにしてください。

help <component> は特に有用です。build.sh が内部で使用している make コマンドと引数が分かるため、手動でビルドを再現したり、問題を診断したりしやすくなります。

ビルドモード修飾子​

コマンドの前に DEBUG または ASAN を付けて、ビルドモードを変更できます:

./build.sh DEBUG app     # -O0 -g -ggdb -pg
./build.sh ASAN app # -O0 -g -ggdb -fsanitize=address -fno-stack-protector -fno-omit-frame-pointer -fsanitize-recover=all
./build.sh app # Default RELEASE: -Os; strip binaries during packaging

RELEASE モードでは、パッケージング時に strip が実行されますが、libpthread*.so* と ld-*.so* については除外されます(gdb の pthread デバッグや valgrind ではシンボルが削除されていない必要があります)。カーネルモジュール(.ko)には --strip-debug のみが適用されます。DEBUG モードでは strip をスキップし、さらに libc デバッグシンボル(runtime_lib/libc、lib.tar.bz2)もインストールします。

インクリメンタルビルド​

./build.sh app                             # Rebuild applications only; fastest when changing application code
./build.sh app && ./build.sh firmware # Rebuild applications and repackage the images
./build.sh kernel # Rebuild the kernel only
./build.sh clean app && ./build.sh app # Clean and rebuild applications when needed

1 つのアプリケーションだけを直接ビルドします(事前に lunch を実行):

make -C project/app/recamera_notify        # Build one application
make -C project/app/recamera_notify distclean

media を個別にビルドします(事前に lunch を実行。media は SDK の他の部分とは独立してビルド可能です):

make -C media

ビルド成果物​

output/image/ — フラッシュ可能なイメージ​

File説明
download.binフラッシュ通信に使用されるデバイス側プログラム。ボードメモリにのみロードされます
idblock.imgDDR 初期化を含むローダー
uboot.imgU-Boot
env.imgパーティションテーブルとブート引数
boot.imgDTB を含むカーネルイメージ
rootfs.imgroot ファイルシステム(ext4)
recovery.imgリカバリシステム(このボード構成では RK_ENABLE_RECOVERY=y)
misc.imgリカバリブートフラグに使用される misc パーティション。このボード構成では recovery-misc.img を使用
userdata.imguserdata パーティション(ext4、/userdata にマウント)
update.imgすべてのパーティションを含む完全なパッケージ。アップデートに使用可能
parameter.txtrkflash.sh が使用するパーティションテーブルテキスト

output/out/ — 中間成果物​

Directory説明
media_out/アプリケーションの依存関係として使用される media の include/ および lib/
app_out/パッケージング時に rootfs の bin/lib/share/etc/root 配下にマージされるアプリケーション成果物
rootfs_glibc_rv1126b/rootfs パッケージング用ディレクトリ
sysdrv_out/sysdrv の成果物
oem/, userdata/, ramdisk/OEM パーティション、userdata、およびリカバリ ramdisk の内容
S20linkmount, S21appinit生成されたパーティションマウントスクリプトおよび OEM アプリケーション起動スクリプト

初回ビルドにかかる想定時間​

フルの ./build.sh all には完全な Buildroot ビルドが含まれるため、CPU コア数やストレージによっては数十分から数時間かかる場合があります。初回実行時には、Buildroot が sysdrv/tools/board/buildroot/buildroot-2023.02.6.tar.gz を展開し、多数のパッケージをダウンロード/ビルドするため、インターネット接続が必須です。インクリメンタルビルドでは変更されたコンポーネントのみを再ビルドするため、はるかに高速です。

初回ビルドでは、screen や tmux を使用し、ログを保存することを検討してください:

./build.sh all 2>&1 | tee build_$(date +%Y%m%d_%H%M).log

ビルド前チェックリスト​

  • ./setup_build_env.sh が完了しており、バージョンサマリに必須ツールが NOT INSTALLED と表示されていない。
  • ./build.sh lunch で BoardConfig_Recamera2/...IPC_64BIT.mk を選択済みであり、.BoardConfig.mk シンボリックリンクが存在する。
  • ./build.sh info が RK_KERNEL_DTS として rv1126b-recamera2-v1.dts を報告している。
  • SDK が置かれているパーティションに少なくとも 20 GB の空きディスク容量がある(100 GB 以上を推奨)。
  • ボード構成を変更した場合は、先に ./build.sh clean を実行している。

次に、イメージをボードにフラッシュします: Flashing and Boot。

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

弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選べる複数のコミュニケーションチャネルをご用意しています。

Loading Comments...