2025年の究極のHiSilicon移行チェックリスト

成功したHiSilicon移行は、構造化された計画から始まります。この移行チェックリストは、高レベルのロードマップを提供します。

The

成功したHiSilicon移行は、構造化された計画から始まります。この移行チェックリストは、プロジェクト全体のハイレベルなロードマップを提供し、スムーズな移行と優れたパフォーマンスを保証します。

完全な移行の旅は、4つの重要なフェーズに分けられます。このチェックリストに従って、新しいHiSiliconハードウェアで最高のパフォーマンスを実現します。

  1. フェーズ1: 移行前分析
    • 目標: ハードウェアの違いをマッピングし、HiSilicon SDKとツールチェーンを準備します。
  2. フェーズ2: 低レベルシステムの移植
    • 目標: ターゲットデバイスのブートローダーとカーネルを調整します。
  3. フェーズ3: ドライバーとミドルウェアの移行
    • 目標: 周辺ドライバーのポートとHiSilicon Media Processing Platform (MPP) への移行。
  4. フェーズ4: 検証と最適化
    • 目標: アプリケーションを再コンパイルし、システム全体のテストを実行して移行を検証します。

重要なポイント

  • HiSiliconの移行を計画するには、分析、低レベルシステムの移植、ドライバーの移動、すべてのテストの4つのステップがあります。
  • 始める前に、ハードウェアの違いを確認し、ツールをセットアップしてください。これは後で問題を回避するのに役立ちます。
  • ブートローダーとカーネルが新しいHiSiliconハードウェアで動作することを確認してください。これにより、デバイスを正しく起動できます。
  • ハードウェアと使用のドライバを更新するHiSiliconの特別なソフトウェアメディア用。これにより、デバイスの機能がうまく機能します。
  • アプリケーションをテストし、それらを高速化します。これにより、新しいHiSiliconデバイススムーズかつ確実に実行されます。

フェーズ1: PRE-MIGRATIONのチェックリスト

この初期段階は、移行プロジェクト全体の基盤です。移行前の徹底的な分析は、将来の障害を防ぎ、スムーズな移行を保証します。ハードウェア機能をマッピングし、新しいHiSiliconプラットフォーム用の開発環境を準備します。

ハードウェアの特徴のマッピング

最初のステップは、ソースプラットフォームとターゲットHiSilicon SoCのアーキテクチャの違いを理解することです。この分析は、移植の課題を予測するのに役立ちます。リソースをマップするための詳細な比較テーブルを作成します。このチェックリスト項目は、移行を成功させるために重要です。

ジェネリックシングルコアARM Cortex-A7からデュアルコアHiSilicon ARM Cortex-A7への移行の場合、マップは次のようになります。

特徴ソースプラットフォーム (例)ターゲットHiSiliconプラットフォーム移行ノート
CPUシングルコアARM Cortex-A7デュアルコアARM Cortex-A7SMPのカーネル設定を更新します。
GPUマリ-400 MP1マリ-450 MP4新しいグラフィックドライバーとMPPの統合が必要です。
メモリDDR3 @ 533MHzDDR4 @ 800MHzU-Bootでメモリコントローラのタイミングを調整します。
周辺機器2x UART、1x I2C、1x SPI4x UART、2x I2C、2x SPIデバイスツリーノードを新しい周辺アドレスにマップします。

TOOLCHAINとSDKのセットアップ

次に、公式のHiSiliconクロスコンピレーションツールチェーンとソフトウェア開発キット (SDK) を設定する必要があります。この環境は、新しいARMハードウェア用のブートローダー、カーネル、およびアプリケーションを構築するために不可欠です。

  1. クロスコンパイラをインストールします。

    # ARMツールチェーンのアンパック
    Tar-xzf arm-himix200-linux.tgz
    # コンパイラをシステムのPATHに追加する
    エクスポートPATH = $(pwd)/arm-himix200-linux/bin:$ PATH
    
  2. HiSilicon SDKのアンパック:

    # メインSDKパッケージのアンパック
    Tar-xzf Hi35XX_SDK_V2.0.X.X.tgz
    

ネットワークブーツ環境セットアップ

TFTPとNFSを使用したネットワークブートセットアップは、デバイスを毎回フラッシュすることなく変更をテストできることで開発を加速します。これは、効率を向上させるための移行チェックリストの重要な部分です。

開発PCをサーバーとしてセットアップする:

  1. サーバーのインストール:Ubuntuで、必要なパッケージをインストールします。
    Sudo apt-get install nfs-kernel-server tftpd-hpa
    
  2. NFSを設定します。共有ディレクトリを作成し、権限を付与します。
    Sudo mkdir /home/${USER}/nfs
    Sudo chmod 777 /home/${USER}/nfs
    
  3. ディレクトリをエクスポートする:編集/Etc/エクスポートこの行を追加してから、サービスを再起動します。
    /Home/<user>/nfs *(rw、sync、no_root_squash)
    

    Sudo service nfs-kernel-serverの再起動

Pro Tip: TFTPタイムアウトのトラブルシューティング TFTPタイムアウトが発生した場合は、タイムアウト値を増やすだけではありません。代わりに、Wiresharkのようなネットワークスニファーを使用して、HiSiliconボードがACKを送信しているかどうかを確認します。また、PCのファイアウォールルールがトラフィックをブロックしていないことを確認します。誤ったARMタイマーの実装は、ネットワークトランザクションが失敗し、全体的なパフォーマンスに影響を与える可能性もあります。この移行前の分析ステップにより、ハードウェアとソフトウェアが連携して最適なパフォーマンスを実現します。新しいARM Cortex-A7プラットフォームへの移行には、このレベルの詳細が必要です。

フェーズ2: 低レベルシステムのポート

フェーズ

現在、移行の中核的な技術段階に入っています。低レベルのシステムポーティングの目標は、基本的なソフトウェア (ブートローダーとカーネル) を新しいHiSiliconハードウェアで実行することです。この段階で成功すると、デバイスが起動してコアコンポーネントを認識できるようになります。これは、移行チェックリストの重要なステップです。

BOOTLOADER (U-BOOT) CONFIGURATION

低レベルシステム移植の最初のタスクは、Das U-Bootブートローダーを設定することです。新しいHiSiliconボードの特定のメモリとストレージレイアウトにU-Bootを適応させる必要があります。これには、新しいDDRタイプのメモリコントローラーのタイミングを調整し、フラッシュパーティションマップを定義することが含まれます。

たとえば、ブートローダー、カーネル、およびルートファイルシステムのeMMCストレージをどのように分割するかを定義します。このレイアウトは、U-Boot環境変数内で直接制御します。

を使用してフラッシュメモリのパーティションレイアウトを定義します。Blkdevparts内のパラメータBootargs変数を指定します。これは、ストレージがどのように編成されているかをカーネルに伝えます。

Bootargs = console = ttyAMA0,115200 root =/dev/mmcblk0p4 rootfstype = ext4 rootwait blkdevparts = mmcblk0:1M(fastboot) 、1M(bootargs) 、8M (カーネル) 、128M(rootfs) 、-(システム)

ARMデバイスのこの例では、Fastboot, カーネル、およびRootfsを使用します。ブートの失敗を避けるために、これらの定義が実際のパーティションスキームと一致することを確認する必要があります。

カーネルポーティングとDTSの適応

次に、LinuxカーネルをHiSilicon System-on-Chip (SoC) に適合させます。このプロセスの最も重要な部分は、デバイスツリーソース (DTS) ファイルを変更することです。DTSは、ハードウェアをカーネルに記述し、ロードするドライバーと、使用するリソース (メモリアドレスや割り込みなど) を伝えるデータ構造です。

DTSでクロックおよびリセットコントローラノードを正しく設定する必要があります。これにより、すべての周辺機器が適切な動作のために正しいクロック信号を受け取ることが保証されます。HiSilicon SoCの場合、周辺機器のさまざまな部分に特定のクロック周波数を設定できます。たとえば、あなたはSPI NANDインターフェイスに30 MHzクロックを割り当てながら、すべて同じフラッシュメモリコントローラ内で、SPI NORインターフェイスに24 MHzクロックを割り当てます。を使用します。このきめ細かい制御は、最適なパフォーマンスを実現するための鍵です。

周辺機器を正しく初期化するには、HiSiliconプラットフォームのDTS設定に以下を含める必要があります。

アームアーキテクチャの考慮事項

このフェーズの最後のステップは、ARMアーキテクチャの違いを説明することです。シンプルなシングルコアARM Cortex-A7からマルチコアまたはビッグに移行します。LITTLE HiSilicon SoCは、パフォーマンスを最適化するための新しい機会をもたらしますが、注意深いソフトウェア構成も必要です。移行の成功は、これらの新しい複雑さをどれだけうまく管理するかにかかっています。

新しいHiSilicon SoCが大きな.LITTLEアーキテクチャを使用している場合 (強力な「大きな」ARMコアと効率的な「小さな」ARMコアを組み合わせたもの) 、カーネルスケジューラを設定する必要があります。このスケジューラは、パフォーマンスと消費電力のバランスをとるために、どのコアで実行されるタスクを決定します。

  • IKS (カーネル内スイッチャー) モード: このモードでは、仮想コアのセットがカーネルに表示されます。システム負荷に基づいて、タスクを大きなコアと小さなコアの間で動的に移動します。
  • HMP (不均一マルチ処理) モード: このモードでは、大きなコアクラスターと小さなコアクラスターを別々に扱います。スケジューラは、最大効率のために、軽量タスクを小さなコアに割り当て、要求の厳しいタスクを大きなコアに割り当てます。

スケジューラを超えて、ARMv7 (多くのCortex-A7 SoCで使用される) からARMv8への新しいARMアーキテクチャへの移行には、他の課題があります。このチェックリストは、それらの準備に役立ちます。

  • ライブラリとツールの更新: ソフトウェアライブラリを64ビットARMアーキテクチャをサポートする新しいバージョンにアップグレードする必要がある場合があります。
  • 限られた第三者サポートを扱う: 既存のツールの一部には、ARM互換バージョンがない場合があります。代替案を見つけるか、ベンダーと協力する必要があるかもしれません。
  • Containerizedサービスの移行: Dockerを使用する場合は、古いARMプラットフォームと新しいARMプラットフォームの両方で実行できるマルチアーキテクチャのコンテナイメージを作成する必要があります。

フェーズ3: ドライバーとミドルウェアの移民

デバイスの起動により、その機能を機能させることに集中できるようになりました。移行のこのフェーズでは、ハードウェア周辺机器HiSiliconの強力なミドルウェアを統合します。あなたの目標は、新しいARMプラットフォームで製品のユニークな機能を実現することです。

PERIPHERALドライバーの移民

周辺ドライバーは、LinuxカーネルとI2Cなどの物理ハードウェア間のソフトウェアブリッジです。センサー、SPIフラッシュ、およびUARTポート。移行には、これらのドライバーを新しいHiSilicon SoCに適合させる必要があります。多くの一般的なARMドライバーはマイナーな変更で動作する場合がありますが、他のドライバーは大幅な更新が必要になります。

最初のステップは、古いARMプラットフォームからドライバを確認することです。どのドライバーがカスタムで、どれが標準であるかを特定する必要があります。HiSilicon SDKは、内部周辺機器にすぐに使用できるドライバーを提供することがよくあります。最高の安定性とパフォーマンスを得るには、これらの公式ドライバーの使用を優先する必要があります。

カスタムドライバーの場合は、ソースコードを変更する必要があります。これには通常、メモリマップのI/Oアドレスと割り込み番号を更新して、新しいHiSiliconハードウェアに一致させます。これらの新しい値は、SoCのデータシートにあります。

プロのヒント: 使用Regmapクリーナードライバー用 LinuxRegmapAPIは、よりクリーンでポータブルなARMドライバーの作成に役立ちます。直接レジスタの読み取りと書き込みを抽象化します。これにより、ドライバーコードの保守と将来のARMハードウェアへの適応が容易になります。使用中Regmapドライバーの移行を簡単にします。

たとえば、ドライバーのデバイスツリーの互換性文字列とレジスタ定義を更新することができます。

// 古いドライバーのデバイスツリーの一致テーブル
Static const struct of_device_id my_sensor_of_match[] = {
{。Compatible = "vendor,old-soc-i2c" },
{}
};

// HiSilicon用の新しいドライバーのデバイスツリーのマッチテーブル
Static const struct of_device_id my_sensor_of_match[] = {
{。Compatible = "hisilicon,hi35xx-i2c" }, // HiSilicon I2Cコントローラーと一致
{}
};

この変更は、デバイスツリーで対応するHiSilicon I2Cノードが見つかったときに、カーネルにドライバーをロードするように指示します。この慎重なドライバー作業は、ARMシステムを成功させるために不可欠です。

HISILCONMPPへの移行

HiSilicon SoCを使用する主な利点は専用ですメディア処理プラットフォーム(MPP)。MPPは、ビデオエンコーディング、デコード、および画像処理のためにハードウェアアクセラレータを使用する高性能ソフトウェアライブラリです。これは、マルチメディア製品の移行の重要な部分です。FFmpegのようなジェネリックライブラリからHiSilicon MPPに移行すると、大幅なパフォーマンス向上のロックが解除されます。

MPP APIを使用すると、アプリケーションはARM SoCの強力なビデオエンジンを直接制御できます。この移行により、メインのARM CPUコアから重い処理をオフロードし、他のタスクのためにそれらを解放することができます。その結果、消費電力が低下し、システム全体のパフォーマンスが向上します。

パフォーマンス上の利点は重要です。たとえば、HiSilicon Hi3559A ARM SoCは、MPPハードウェアアクセラレータを使用して印象的なH.265エンコーディング結果を提供します。

  • 30フレーム/秒 (fps) でリアルタイム8K (7680x4320) エンコーディングを実現します。
  • 30 fpsで別の1080pストリームを同時にエンコードできます。
  • また、ビデオのエンコード中でも2 fpsの高解像度スナップショットをサポートします。

これらの機能は、同様のARMプロセッサ上でソフトウェアのみのエンコーディングで実現することはほぼ不可能です。HiSilicon MPPを統合することは、競争力のある製品を構築するための鍵です。

FILESYSTEMとストレージのセットアップ

このフェーズの最後のステップは、ルートファイルシステムの準備です。ルートファイルシステムには、製品の実行に必要なすべてのライブラリ、アプリケーション、および構成ファイルが含まれています。このファイルシステムを開発用PCで作成し、eMMCやNANDフラッシュチップなどのデバイスのストレージにフラッシュします。

まず、ファイルシステムタイプを選択する必要があります。EMMCかSDカードのため、Ext4信頼できる選択です。生のNANDフラッシュの場合、フラッシュ認識ファイルシステムのようなUBIFSそれは摩耗レベリングと不良ブロックを管理し、ストレージの寿命を延ばすので、より良いです。

次に、ファイルシステムを入力します。これには以下が含まれます。

  1. ルートディレクトリ構造の作成 (/ビン, /Lib, /Etc、など)。
  2. クロスコンパイルされたARMツールチェーンのCライブラリのコピー (Libc.so) と動的リンカー (Ld-linux.so) に/Libディレクトリ
  3. クロスコンパイルされたアプリケーションと必要なサードパーティのライブラリをインストールします。
  4. HiSilicon MPPライブラリのコピー (Libmpi.soなど) アプリケーションがハードウェアアクセラレータにアクセスできるようにします。

このチェックリストアイテムを完了すると、デバイスが完全に機能するソフトウェア環境を準備できます。この包括的なドライバーとミドルウェアの移行により、最終的なアプリケーションのテストと最適化の準備が整い、移行チェックリストの完成に近づきます。

フェーズ4: 評価と楽観化

フェーズ

移行の最終段階に達しました。このフェーズでは、作業の検証と、新しいHiSiliconハードウェアのパフォーマンスの可能性を最大限に引き出すことに焦点を当てています。ソフトウェアを再コンパイルし、重要なコードパスを最適化し、厳格なシステム全体のテストを実施します。ここで成功すると、製品が安定し、信頼性が高く、高速になります。

アプリケーションの再構成

最初のタスクは、すべてのカスタムアプリケーションとライブラリを再コンパイルすることです。フェーズ1で設定したHiSiliconクロスコンパイラを使用する必要があります。この手順により、ソフトウェアは新しいARMプロセッサアーキテクチャ専用に構築されます。この最初の再コンパイルにより、アプリケーションがターゲットデバイスで実行され、パフォーマンスチューニングのステージが設定されます。

ネオン建設のユーティリティ

最大のパフォーマンスを実現するには、ARM NEONエンジンを活用する必要があります。NEONは、ARMプロセッサ用のSIMD (単一命令、複数データ) アーキテクチャ拡張です。これにより、単一の命令が複数のデータに対して同時に操作を実行できます。これは、マルチメディアおよび信号処理タスクに非常に効果的であり、パフォーマンスが大幅に向上します。

パフォーマンスクリティカルなC関数をリファクタクタして、ARM NEONインティンニクスを使用できます。このコードの移行により、HiSilicon ARM SoCの真のパワーがアンロックされます。

  • 標準C関数:このバージョンは、一度に1つのピクセルを処理する。
    Void AddImage8( uint8_t * dst、uint8_t const * src1、uint8_t const * src2、int幅、int高さ)
    {
    Int index = 0;
    For (int y = 0; y < height; y)
    {
    For (int x = 0; x < width; x)
    {
    Int t = src1[index] src2[index];
    Dst [index] = t> 255? 255 : t;
    インデックス;
    }
    }
    }
    
  • ARM NEON最適化機能: このARMバージョンは一度に16ピクセル (バイト) を処理します、パフォーマンスを劇的に向上させます。
    Void AddImage8AlignedNEON( uint8_t * dst, uint8_t const * src1, uint8_t const * src2, int width, int height)
    {
    Int const vectorNumberPerRow = width / 16;
    For (int y = 0; y < height; y)
    {
    For (int i = 0; i < vectorNumberPerRow; i)
    {
    Uint8x16_t a = vld1q_u8( src1 );
    Uint8x16_t b = vld1q_u8( src2 );
    Uint8x16_t r = vqaddq_u8( a, b ); // 16バイトで飽和加算を実行する
    Vst1q_u8 (dst, r );
    Src1 = 16;
    Src2 = 16;
    Dst = 16;
    }
    }
    }
    

システムのテストとデバング

最後に、包括的なシステムテストを実行する必要があります。これは、アプリケーションが実行されるかどうかをチェックするだけではありません。負荷の下でシステム全体の安定性とパフォーマンスを検証する必要があります。ストレステストを実行して、CPU使用率、メモリ消費量、および熱性能を使用します。移行チェックリストのこの最後のチェックリスト項目は、ARMデバイスがすべての機能要件とパフォーマンス要件を満たしていることを確認し、移行が成功したことを確認します。


HiSilicon移行チェックリストが正常に完了しました。この構造化移行はリスクを最小限に抑え、スムーズな移行を保証します。このチェックリストは、プロジェクトの生きている文書として扱う必要があります。成功したHiSilicon移行により、優れたパフォーマンスがアンロックされます。比類のないパフォーマンスのためにHiSiliconの専用ハードウェアにアクセスし、優れたシステムパフォーマンスとアプリケーションパフォーマンスを保証します。これは、長期的なパフォーマンス上の利点につながります。

よくある質問

古いARMドライバーを再利用できますか?

ジェネリックドライバーを再利用できる場合があります。ただし、コア周辺機器の公式HiSiliconドライバーを優先する必要があります。これにより、新しいアームハードウェアの最高の安定性とパフォーマンスが保証されます。カスタムドライバーでは、新しいSoCのメモリマップと割り込み割り当てに一致するように更新が必要になります。

HiSilicon MPPへの移行が必要なのはなぜですか?

ハードウェア高速化のロックを解除するには、メディア処理プラットフォーム (MPP) に移行する必要があります。MPPは、メインアームCPUからビデオおよび画像タスクをオフロードする。これにより、パフォーマンスが大幅に向上し、消費電力が削減されます。これは、競争力のあるマルチメディア製品にとって重要です。

64ビットARMアーキテクチャに移行する際の主な課題は何ですか?

すべてのソフトウェアを64ビットのツールチェーンで再コンパイルする必要があります。また、64ビット互換バージョンのサードパーティライブラリを見つける必要があります。コンテナー化されたサービスを移行するには、移行中に新しいアームプラットフォームをサポートするマルチアーキテクチャイメージを作成する必要があります。

デバイスツリー (DTS) ファイルの重要性は?

デバイスツリーは、移行を成功させるために不可欠です。Linuxカーネルにハードウェアレイアウトを記述するために使用します。DTSを正しく設定すると、システムが適切なドライバーをロードし、新しいアームデバイスに適切なリソースを割り当てることができます。

Related Articles