コンテンツにスキップ

組み込みローレベル開発マニュアル

1.開発の概要

1.1.組み込みローレベル開発の概要

組み込みローレベル開発は、通常、U-Boot、Kernel、Rootfsの開発を指します。

  • U-Boot:(Universal Boot Loader、ユニバーサルブートローダー)は、主に組み込みシステム(Kernel、カーネル)で使用されるブートローダープログラムであり、ARM、AVR32、x86、Niosなど、さまざまなコンピュータアーキテクチャをサポートしています。GPLライセンスに従うオープンソースプロジェクトです。

  • Kernel: Linuxカーネルは、C言語で記述されたPOSIX標準準拠のUnix系オペレーティングシステムです。CPUリソースの時分割多重化によりマルチプロセスの管理とスケジューリングを実現し、各種サブモジュールを通じてメモリやディスクなどのリソースの管理とスケジューリングを実現しています。また、各種周辺機器用のデバイスドライバを作成し、デバイスツリーを変更することで、周辺機器とLinuxシステムとの相互作用を実現しています。実際のところ、組み込みカーネル開発の大部分の作業は、周辺機器リソースの追加、削除、変更であり、通常は「デバイスドライバの開発」と「デバイスツリーの変更」を通じて行われます。

  • Rootfs:(Root file system、ルートファイルシステム)は、カーネルの起動時に最初にマウントされるファイルシステムです。ファイルシステムとは、ストレージデバイス上のデータとメタデータを構成・管理するメカニズムです。このメカニズムにより、ユーザーとオペレーティングシステム間のやり取りが容易になります。

1.2.EAI UbuntuSDKの概要

EAI UbuntuSDKは、EASY-EAIチームがUbuntuシステムをベースに、組み込みシステム向けに特別に最適化・適応させたシステムです。従来の組み込みSDKと比較して、以下の特徴があります:

  1. 高速起動のサポート: 通常のアプリケーションは電源オンからわずか6〜7秒で実行可能になり、1秒クラスの高速起動機能もサポートしています。

  2. 優れたエコシステムの継承: 従来のUbuntuシステムの「依存ライブラリのインストールが容易でソフトウェアエコシステムが強力である」という特徴を継承しており、ROS2やPythonライブラリを迅速にデプロイできます。

  3. ファイルシステムの高い信頼性: RamDiskをサポートしており、ファイルシステムの不良ブロックを自動的に修復し、ディスクの異常や電源断によるファイルシステムの起動障害を防止します。

  4. システム初期化の高い信頼性: デフォルトで外部ウォッチドッグ(1.6秒)をサポートし、いかなる異常によるU-BootやKernelの初期化の失敗も防止します(※ユーザーアプリケーションはチップ内蔵のウォッチドッグを呼び出してアプリケーションを保護します)。

  5. ローレベル開発が簡単: 膨大なBuildroot SDKのコードを研究する必要はなく、カーネルとデバイスツリーを変更するだけで済みます。

  6. ローレベル開発の高効率化: 一般的なSDKの完全コンパイルはわずか15分で完了します。一方、従来のBuildroot SDKでは90分かかります(同等性能のPC:CPU@4.2GHz 12コア24スレッドで比較)。

  7. Rootfsのワンクリックエクスポートをサポート: ユーザーが開発ボードにインストールしたライブラリや開発したアプリを、イーサネット経由でワンクリックでエクスポートでき、量産用イメージを簡単に出力できます。

  8. ソフトウェアライブラリのオンラインアップグレードをサポート: sudo apt-get upgrade を実行するだけで、専用サーバー(os.easy-eai.com)からローレベルと関連性の高い依存ライブラリ(rkaiq、rga、gstreamerなど)を同期・更新し、チップメーカーのバグをタイムリーに修正できます。

  9. アプリケーション開発の高効率化: 開発ボードでのローカルコンパイルとオンラインクロスコンパイルをサポートしています。オンラインクロスコンパイルでは、アプリの依存ライブラリがボードのファイルシステムに直接依存するため、ライブラリの互換性問題を回避しつつ、PCのコンパイル性能とソースコードエディタを活用できます。

  10. OTAソリューションをサポート: ソフトウェアに起因する量産時の事故を回避し、アプリケーションやシステムの反復的なアップデートを実現します。

  11. A/Bパーティション方式をサポート: 非常に高いシステム信頼性を備えていますが、多くのストレージスペースを消費します。

  12. 柔軟なUIインタラクション方式の選択: デスクトップシステムやブラウザのインストールをサポートしており、ユーザーはさまざまな技術的手法を用いて独自のUIインターフェースを開発できます(※デフォルトではプレインストールおよび実行されておらず、システムリソースを消費しません)。

  13. ソフトウェアデプロイメントの柔軟性向上: Dockerのデプロイをサポートしています。

1.3.EAI UbuntuSDKの開発フロー

ファームウェア開発フローの概要:

EAI UbuntuSDKの開発フロー 図1

EAI UbuntuSDKの開発フロー 図1

  • 【uboot.img】 通常はUbuntuSDKのソースコードからコンパイルして生成されますが、99%のケースで変更や置き換えは不要です。

  • 【boot.img】 カーネルイメージです。通常これもUbuntuSDKのソースコードから生成されますが、ユーザーが自由に変更できます。

  • 【rootfs.img】 ファイルシステムイメージです。通常は【開発ボードから完全にエクスポートする】という方法で取得し、それをファームウェア内の rootfs.img と置き換えるために使用します。

2.ソースコードの取得

2.1.ソースコードの取得

RV1126BのUbuntuシステムSDKはUbuntu 22.04をベースに最適化および移植されているため、同様にUbuntu22.04環境(EASY-EAIコンパイル環境など)でのコンパイルと開発を推奨します。

2.1.1開発環境の準備

EASY-EAIコンパイル環境を使用する必要がある場合は、「入門ガイド/開発環境の準備/Easy-Eaiコンパイル環境の準備と更新」をお読みいただき、関連する手順に従ってコンパイル環境を構築してください。

PC側のUbuntuシステムで run スクリプトを実行し、EASY-EAIコンパイル環境に入ります。詳細は以下の通りです。

Terminal window
cd ~/develop_environment
./run.sh 2204

コンパイル補助ツールのインストール:

Terminal window
sudo apt-get update && sudo apt-get install file

2.1.2ソースコードの取得(Pull)

/opt ディレクトリに移動し、rv1126b_sdk ディレクトリを作成します:

Terminal window
mkdir /opt/rv1126b_sdk
cd /opt/rv1126b_sdk

2ソースコードの取得(Pull) 図3

2ソースコードの取得(Pull) 図3

  • ダウンロードリンク: ubuntu.tar.gz 上記のリンクから ubuntu.tar.gz 圧縮ファイルをダウンロードし、仮想マシンの /opt/EASY-EAI-Toolkit ディレクトリにアップロードして解凍します。

2.2.ソースコードのコンパイルガイド

ソースコードディレクトリに入ると、以下の内容が確認できます(※元のドキュメント内の図をご参照ください)。

2.2.1設定ファイルの確認

コンパイルの最初のステップは、ボード設定の事前読み込み(プリロード)です。

1設定ファイルの確認 図5

1設定ファイルの確認 図5

configs ディレクトリを確認すると、各種ボードに【対応】する設定ファイルが確認できます。

1設定ファイルの確認 図6

1設定ファイルの確認 図6

ここでは【easy-eai-nano-tb-gstreamer-2204-cfg.sh】を選択します。

Terminal window
./build.sh configs/easy-eai-nano-tb-gstreamer-2204-cfg.sh

2.2.2コンパイルの説明

設定ファイルの読み込み完了後、再度 build.sh を実行すると、コンパイル可能な各モジュールが表示されます。

2コンパイルの説明 図7

2コンパイルの説明 図7

  • all:ファームウェア全体をコンパイルします。

  • uboot:U-Bootイメージ(uboot.img)のみをコンパイルして生成します。

  • kernel:カーネルイメージ(boot.img)のみをコンパイルして生成します。

  • rootfs:Ubuntuファイルシステムイメージ(rootfs.img)のみをコンパイルして生成します。

通常、初回のコンパイルでは ./build.sh all を選択します。

Terminal window
./build.sh all

2コンパイルの説明 図8

2コンパイルの説明 図8

インタラクティブなプロンプトが表示されたら、【Enterキー】を押して実行を確認します。その後、スクリプトが自動的にサーバーから【各イメージモジュール】のソースコードを取得し、【イメージのコンパイルと構築】を開始します。

*注意: **【カーネル】**のコンパイル時に、ディスクファイルのタイムスタンプを確認する処理があります。このとき /mnt の接続が切断されていると、NFSの無限タイムアウトにより処理が停止してしまいます。解決方法は、まず Ctrl+C でコンパイルを終了し、次に sudo umount -f /mnt を使用してこのディレクトリをアンマウントしてから、再度コンパイルを実行することです。

2.3.ディレクトリの簡単な説明

2.3.1ファームウェア出力ディレクトリ

コンパイル完了後、ファームウェアは【output】ディレクトリに出力されます。

1ファームウェア出力ディレクトリ 図9

1ファームウェア出力ディレクトリ 図9

ファームウェア内の対応するファイルを、生成された boot.img、MiniLoaderAll.bin、parameter.txt、rootfs.img、uboot.img に置き換えるだけで完了です。

2.3.2uboot

U-Bootのソースコードが保存されているディレクトリは u-boot です。

2uboot 図10

2uboot 図10

U-Bootを変更した後、U-Bootを再コンパイルする場合は、上の階層のディレクトリに戻って ./build.sh uboot を実行するのではなく、u-boot ディレクトリ内で以下のコマンドを実行してください:

Terminal window
./make.sh

2.3.3kernel

カーネルのリリースソースコードが保存されているディレクトリは kernel です。

3kernel 図11

3kernel 図11

kernel ディレクトリ内でソースコードを直接変更することはお勧めしません。ファームウェア全体を再コンパイルする際、【ファームウェア全体】の一貫性を確保するために、kernel ディレクトリは完全に削除され、設定済みのリモートサーバーから新しいものが再取得されるためです。

2.3.4rootfs

Ubuntuシステムの rootfs.img の作成は少し複雑で、configs、hooks、overlay の3つのディレクトリが関係します。

4rootfs 図12

4rootfs 図12

3.kernel

3.1.環境の準備とソースコードの取得

3.1.1書き込みツールのダウンロードと配置

リンク:

ダウンロードした書き込みツールを仮想マシンの任意の場所(例: ~/rv1126b_sdk)に配置します。

次に、ツールの保存先(例: ~/rv1126b_sdk)に移動し、実行権限を付与します。

Terminal window
cd ~/rv1126b_sdk/
chmod 777 upgrade_tool

さらに、ツールを仮想マシンの /usr/bin ディレクトリに移動させます。

Terminal window
sudo mv upgrade_tool /usr/bin

1書き込みツールのダウンロードと配置 図13

1書き込みツールのダウンロードと配置 図13

最後に、ターミナルを再起動するとツールが有効になります。(注:このツールの配置は仮想マシン環境で1回のみ行えばよく、以降の操作で繰り返す必要はありません)

3.1.2開発環境の準備

PC上のUbuntuシステムで run スクリプトを実行し、EASY-EAIコンパイル環境に入ります。詳細は以下の通りです。

Terminal window
cd ~/develop_environment
./run.sh

3.1.3ソースコードの取得

3.1.4カーネル開発用ディレクトリの作成

SDKの初回コンパイルが完了した後、以下のコマンドを実行して kernel リポジトリをコピーします。

Terminal window
cp kernel -r kernel_dev

4カーネル開発用ディレクトリの作成 図14

4カーネル開発用ディレクトリの作成 図14

kernel_dev ディレクトリに移動し、ユーザーのカスタムコードを管理するためのブランチを作成します。

Terminal window
cd kernel_dev/

3.2.カーネルの利用ガイド

3.2.1コンパイル設定の説明

SDKのルートディレクトリに戻り、ボードのコンパイル設定ファイルを編集します。

Terminal window
cd /opt/rv1126b_sdk/ubuntu
vim configs/easy-eai-nano-tb-cfg.sh

1コンパイル設定の説明 図15

1コンパイル設定の説明 図15

  • カーネルドライバの設定ファイルは次のディレクトリにあります:/opt/rv1126b_sdk/ubuntu/kernel_dev/arch/arm64/configs/

  • デバイスツリーファイル (dts) は次のディレクトリにあります:/opt/rv1126b_sdk/ubuntu/kernel_dev/arch/arm64/boot/dts/rockchip/

3.2.2カーネルのコンパイル

SDKのルートディレクトリ(/opt/rv1126b_sdk/ubuntu/)で以下のコマンドを実行し、カーネルのコンパイル対象ディレクトリを「kernel」から「kernel_dev」に切り替えます。

Terminal window
export KERNEL_DEVELOP=kernel_dev
  • この環境変数は【現在の環境】の【現在のターミナルウィンドウ】でのみ有効です。新しくターミナルウィンドウを開いた場合、デフォルトの「kernel」ディレクトリがコンパイル対象に戻ります。

  • このコマンドを .config ファイルに追加して常に有効にすることもできますが、不要になった場合はコメントアウトすることを忘れないでください。

再度 build kernel コマンドを実行します。

Terminal window
./build.sh kernel

2カーネルのコンパイル 図16

2カーネルのコンパイル 図16

【Enterキー】を押して、コンパイル対象がカーネルソースであることを確認します。「kernelディレクトリ以外」のカーネルソースをコンパイルしようとすると、「コンパイルするカーネルディレクトリは /opt/xxx/xxx/kernel_dev ですか?」というプロンプトが表示されます。【Enterキー】を押して再確認すると、コンパイルが実行されます。

2カーネルのコンパイル 図17

2カーネルのコンパイル 図17

💡 注意 :カーネルのコンパイル中に、ディスクファイルのタイムスタンプを確認するステップがあります。この時点で/mntの接続切断されていると、NFSの無限タイムアウトにより処理が停止してしまいます。**解決方法:**まず Ctrl+C でコンパイルを強制終了し、sudo umount -f /mntを実行してディレクトリをアンマウントしてから、再度コンパイルを実行してください。

3.2.3 Wi-Fiドライバのコンパイル

カーネルの【ドライバ設定】や【デバイスツリー設定】を大幅に変更した場合、カーネルドライバのシンボルテーブルが変更されることがあります。rootfs 上でロードされる Wi-Fi ドライバのシンボルテーブルが更新されていないと、シンボルの競合によって Wi-Fi ドライバのロードに失敗します。解決方法: カーネルソースのコンパイルが完了した後、Wi-Fi ドライバを再度コンパイルします。

ubuntu ディレクトリで以下のコマンドを実行し、Wi-Fi ドライバをコンパイルします。

Terminal window
./hooks/hook-none-install-wifibt-db37.sh

💡 注意 :このコマンドは rootfs に依存しているため、実行する前に必ず./build.sh all または ./build.sh rootfs を実行しておく必要があります。

3Wi-Fiドライバのコンパイル 図18

3Wi-Fiドライバのコンパイル 図18

3Wi-Fiドライバのコンパイル 図19

3Wi-Fiドライバのコンパイル 図19

3.2.4コンパイル結果の説明

コンパイル完了後、output ディレクトリ内の以下の3つのファイルが更新されます。

4コンパイル結果の説明 図20

4コンパイル結果の説明 図20

  • boot.img: カーネルイメージファイル(Rockchipの U-Boot イメージは uboot.img と呼ばれます)。

  • db37-ko.tar.gz: Wi-Fi・Bluetoothドライバおよび関連設定(Wi-Fiドライバのコンパイルは特殊で、単独で生成する必要があります)。

  • lib_modules.tar.gz: rootfs 段階でロードする必要があるドライバ(例:CONFIG 設定が =m になっているドライバなど)。

※dts やドライバ設定の変更内容が多く、ドライバのシンボルテーブルが変更された場合は、lib_modules.tar.gz と db37-ko.tar.gz を rootfs に解凍して配置する必要があります。

3.3.カーネルの更新

カーネルのコンパイルが完了したら、ショートカットキー【Ctrl+Shift+T】を押して新しいターミナルウィンドウを開きます。

カーネルの更新 図21

カーネルの更新 図21

先ほどカーネルをコンパイルした出力ディレクトリに移動します。

Terminal window
cd ~/rv1126b_sdk/ubuntu/output

カーネルの更新 図22

カーネルの更新 図22

次に、3つ目のターミナルウィンドウを開き

カーネルの更新 図23

カーネルの更新 図23

3.3.1db37-ko.tar.gz の更新

【2つ目のウィンドウ】に戻り、adb コマンドを使用して db37-ko.tar.gz をボードにプッシュします。

Terminal window
adb push db37-ko.tar.gz /userdata

1db37-ko.tar.gz の更新 図24

1db37-ko.tar.gz の更新 図24

【3つ目のウィンドウ】に移動し、db37-ko.tar.gz を解凍します。

Terminal window
tar -xvf /userdata/db37-ko.tar.gz -C / && sync

1db37-ko.tar.gz の更新 図25

1db37-ko.tar.gz の更新 図25

3.3.2lib_modules.tar.gz の更新

【2つ目のウィンドウ】に戻り、adb コマンドを使用して lib_modules.tar.gz をボードにプッシュします。

Terminal window
adb push lib_modules.tar.gz /userdata

2lib_modules.tar.gz の更新 図26

2lib_modules.tar.gz の更新 図26

【3つ目のウィンドウ】に移動し、lib_modules.tar.gz を /usr に解凍します。

Terminal window
cd /userdata
tar -xvf lib_modules.tar.gz -C /usr && sync

2lib_modules.tar.gz の更新 図27

2lib_modules.tar.gz の更新 図27

3.3.3boot.img の更新

【開発ボード上(3つ目のウィンドウ)】で、【loaderモードへの再起動】コマンドを実行します。

Terminal window
reboot loader
  • この方法で loader モードに入れない場合は、ハードウェアのボタンを使って入ることもできます(『ファームウェアの書き込みと更新』==2.1-手動でLoaderモードに入る== を参照)。

【2つ目のウィンドウ】に戻り、以下のコマンドを実行して kernel.img を開発ボードに更新します。

Terminal window
sudo upgrade_tool di -boot boot.img

3boot.img の更新 図28

3boot.img の更新 図28

「Download image ok.」と表示されれば、カーネルの書き込みは成功です。以下のコマンドを実行するか、【RSTボタン】を押してデバイスを再起動します。

Terminal window
sudo upgrade_tool rd

※もしエラーが表示された場合、ボードが MASKROM モードに入っている可能性があります。その場合は、Baidu Netdisk のファームウェアを使って MiniLoaderall.bin を再度書き込む必要があります。

3boot.img の更新 図29

3boot.img の更新 図29

上記の方法以外にも、【ファームウェア書き込みツール】を使って boot.img を更新することが可能です。具体的な手順としては、コンパイルで生成された boot.img をコピーして手元の【ファームウェアフォルダ】内の boot.img を上書きし、書き込みツールを使って開発ボードに焼き込みます。

3.4.カーネル設定の変更

ubuntu ディレクトリで ./build.sh all または ./build.sh kernel を実行すると、対応するカーネルディレクトリ(kernel または kernel_dev)に .config ファイルが生成されます。

カーネル設定の変更 図30

カーネル設定の変更 図30

以下のコマンドで、プラットフォームの環境変数を arm64 に指定します。

Terminal window
export ARCH=arm64
  • 新しいターミナルを開いたり、コンパイル環境に入り直したりすると、この環境変数は失われるため特に注意してください。

次に make menuconfig を実行し、カーネルの設定メニューを開きます。

Terminal window
make menuconfig

カーネル設定の変更 図31

カーネル設定の変更 図31

  • ここでの menuconfig はカーネル設定の「検索」にのみ使用します。カーネルのコンパイル操作に不慣れな場合は、直接 menuconfig で設定を変更することは推奨しません。

キーボードの【/】キーを押すと検索メニューが表示されるので、探したいドライバ設定(例:CH343)を入力します。

カーネル設定の変更 図32

カーネル設定の変更 図32

【Enterキー】を押して を選択すると、該当するメニューが表示されます。

カーネル設定の変更 図33

カーネル設定の変更 図33

  • 【Symbol】 は現在必要としているドライバ(例:USB_SERIAL_CH343)です。

  • 【Depends on】 は、そのドライバが依存している前提ドライバ(例:USB_SUPPORT, USB, USB_SERIAL)を示しています。

カーネル設定の変更 図34

カーネル設定の変更 図34

これらに「CONFIG_」というプレフィックスを付け、rv1126b_eai.config に直接追記すれば設定完了です。

(ここまでで、カーネル開発の完全なフローの説明は終了です。他に必要事項がなければ、これ以降の内容は読む必要はありません。)

3.5.==== 補足説明 ====

3.5.1menuconfig について

もし menuconfig を直接使用してカーネルの設定を行う場合は、ubuntu ディレクトリの ./build.sh kernel を使ってカーネルをコンパイルすることはできません。カーネルのソースコードディレクトリに直接移動し、手動でコンパイルを行う必要があります。手順は以下の通りです:

Terminal window
cd kernel_dev # カーネルソースディレクトリに移動
export ARCH=arm64 #
プラットフォームをarm64に設定(※新しいターミナルを開くとリセットされるので注意)
make rockchip_linux_defconfig rv1126b.config rv1126b_eai.config #
これらの設定ファイルを使用して .config を生成
make savedefconfig # .config を defconfig
として保存(バックアップ)
cp defconfig mydefconfig # 紛失防止のため defconfig
をコピーしておく

この状態で、make menuconfig を実行して .config を変更できるようになります。

Terminal window
make menuconfig

設定完了後、カーネルを手動でコンパイルするコマンドは以下の通りです:

Terminal window
make rv1126b-nano.img -j8 # rv1126b-nano.dts
をルートデバイスツリーとしてカーネルドライバをコンパイル
#
rootfs上でロードする必要があるドライバをコンパイルし、lib_modules.tar.gz
にパッケージ化する
make modules -j8
make modules_install INSTALL_MOD_PATH=/tmp
cd /tmp/
tar czvf /tmp/lib_modules.tar.gz lib
cd -
# lib_modules.tar.gz
をカレントディレクトリに持ってくる(コピーしなくても問題ありません)
mv /tmp/lib_modules.tar.gz ./
# 最後に、emmcパーティション修復機能を持つ ramdisk を boot.img
にパッケージ化する
./mk-fitimage.sh boot.img boot4recovery.its arch/$ARCH/boot/Image
$DTB_PATH resource.img rootfs.cpio.gz

上記の手動操作を終えたら、この記事の 2.3 Wi-Fiドライバのコンパイル を参照して db37-ko.tar.gz を更新してください。

すべての機能のデバッグが完了し、【アーカイブしてリリース】する必要がある場合は、make savedefconfig を実行して現在の .config を defconfig としてエクスポートします。それを以前の mydefconfig と比較し、差分を手動で rv1126b_eai.config 内に追記して保存してください。

4.開発ボードの rootfs のエクスポート

4.1.エクスポート前の準備

4.1.1EASY-EAI コンパイル環境への移行

PC上の Ubuntu システムで run スクリプトを実行し、EASY-EAI コンパイル環境に入ります。詳細は以下の通りです。

Terminal window
cd ~/develop_environment
./run.sh

注:EASY-EAI コンパイル環境への入り方や使い方がわからない場合は、まず『スタートガイド/開発環境の準備/Easy-Eaiコンパイル環境の準備と更新』を一読し、その手順に従ってコンパイル環境を構築してください。

4.1.2開発ボードのマウント

次に、シリアルデバッグを通じてボードの IP アドレスが 192.168.3.121 であることを確認し(マウントのパラメータは実際の環境に合わせて変更する必要があります)、開発ボードを /mnt ディレクトリにマウントします。以下の通りです。

Terminal window
sudo mount -t nfs -o nolock 192.168.3.121:/ /mnt

2開発ボードのマウント 図35

2開発ボードのマウント 図35

4.2.エクスポート操作

EASY-EAI コンパイル環境の【任意の場所】(例として /opt/rv1126b_sdk を使用)で以下のエクスポートコマンドを直接実行すると、開発ボードのファイルシステムが rootfs.img としてエクスポートされます。

Terminal window
export_rootfs

エクスポート操作 図36

エクスポート操作 図36

  • ※この処理にかかる待機時間は、2GB で約1分程度です。

エクスポート成功のプロンプトが表示されます。

エクスポート操作 図37

エクスポート操作 図37

生成された rootfs.img を確認してください。デフォルトでは【コマンドを実行したディレクトリ】にエクスポートされます。

エクスポート操作 図38

エクスポート操作 図38

最後に、この rootfs.img を【標準ファームウェア】内の rootfs.img と置き換えることで、量産用のファームウェア書き込みに使用することができます。

4.3.エクスポートに関する説明

/export_rootfs エクスポートスクリプトは、引数を渡すことで rootfs.img の出力先ディレクトリを指定することも可能です。以下のようになります。

エクスポートに関する説明 図39

エクスポートに関する説明 図39

この場合、rootfs.img は /opt/work/z_test/ というディレクトリ内にエクスポートされます。

4.3.1注意事項

  • 引数として渡すディレクトリは、事前に【存在している】必要があります。

  • エクスポート先のディレクトリには【書き込み権限】が必要です。

  • エクスポート先のディスクの空き容量は、新しい rootfs.img が必要とするサイズより大きい必要があります。

  • エクスポートの実行中は、/mnt のマウントを切断してはいけません。