マイクロコントローラー メーカーが提供する開発ボードと関連ソフトウェア プロジェクトのサンプルは、多くの場合、エンジニアが新しい設計を開始するときに非常に役立ちます。ただし、設計プロジェクトの初期段階が完了した後、メーカーが提供するソフトウェアでは、さらに設計を進めるときに問題が発生する可能性があります。
リアルタイム オペレーティング システムをアプリケーション コードのプラットフォームとして使用する設計には、多くの課題もあります。たとえば、さまざまな並列タスクに機能を効果的に割り当てる方法、信頼性の高いプロセス間通信を設計する方法、ハードウェア上でソフトウェア パッケージ全体をテストする方法などの問題があります。
ますます多くの OEM メーカーが、上記の問題を回避する最善の方法は、実証済みで拡張性があり、さまざまなハードウェア プラットフォームで実行できるオープン ソース ベースの Linux オペレーティング システムを使用して新しい設計を開始することであると認識しています。さまざまなコンピューター ハードウェア プラットフォームへの Linux オペレーティング システムの移植数も他に類を見ません。
Linux 派生製品は、ネットワーク ルーター、携帯電話、ビルディング オートメーション制御、テレビ、ビデオ ゲーム コンソールなど、さまざまな組み込みシステムですでに使用されています。
Linux は広く使用され、成功を収めていますが、それが使いやすいという意味ではありません。 Linux には 100 万行を超えるコードが含まれており、初心者にとっては慣れるまでに時間がかかるかもしれない、独特の「Linux 方式」で動作します。
したがって、この記事の目的は、Linux 組み込みオペレーティング システムのバージョンであるμClinux を使用した新しい設計プロジェクトの開始を支援することです。このガイドは 5 つのステップに分かれています。このガイドを説明するために、μClinux プロジェクトは STMicroelectronics の STM32F429 マイクロコントローラに実装されています。このマイクロコントローラは、最大周波数 180MHz の ARM Cortex-M4 コアを使用し、Emcraft の STM32F429 Discovery Linux Board Support Package (BSP) を使用します。
すべての組み込みソフトウェアの設計は、適切なツールを選択することから始まります。
ツール チェーンは、相互に接続 (またはリンク) された一連のソフトウェア開発ツールです。これには、GNU Compiler Collection (GCC)、binutils (リンカー、アセンブラ、およびオブジェクト ファイル用のその他のツールのセット) などのツールが含まれます。開発ツール) および glibc (システム コールと基本関数を提供する C 関数ライブラリ)、場合によっては、コンパイラやデバッガなどの他のツールも含まれる場合があります。
組み込み開発に使用されるツール チェーンはクロス ツール チェーンであり、一般的にはクロス コンパイラとして知られています。
GNUBinutils は、組み込み Linux ツール チェーンの最初のコンポーネントです。 GNUbinutils には 2 つの重要なツールが含まれています:
●「as」アセンブラーは、アセンブリ コード (GCC によって生成された) をバイナリ コードに変換します
●「ld」、コネクタ、個別のターゲット コード セグメントをライブラリまたはフォーム実行可能ファイルに接続します
コンパイラは、ツール チェーンの 2 番目に重要なコンポーネントです。 Embedded Linux では GCC と呼ばれ、さまざまな種類のマイクロコントローラーとプロセッサー アーキテクチャをサポートします。
次はC関数ライブラリです。 Linux の従来の POSIX アプリケーション プログラミング インターフェイス (API) を実装しており、ユーザー空間アプリケーションの開発に使用できます。システムコールを通じてカーネルと連携し、高レベルのサービスを提供します。
エンジニアには、いくつかの C 関数ライブラリのオプションがあります:
●glibc は、オープン ソースの GNU プロジェクトによって提供される、利用可能な C 関数ライブラリです。このライブラリはフル機能を備え、移植性があり、Linux 標準に準拠しています。
#●Embedded GLIBC (EGLIBC) は、組み込みシステム向けに最適化された派生バージョンです。コードは合理化されており、クロスコンパイルとクロステストをサポートしており、ソース コードとバイナリ コードは GLIBC と互換性があります。
●uClibc は、フラッシュ スペースが限られている場合やメモリ フットプリントを最小限に抑える必要がある場合に使用できるもう 1 つの C 関数ライブラリです。
ターゲット マシン上で実行されているアプリケーションをデバッグする場合、クロス デバッガーが必要となるため、通常、デバッガーもツール チェーンの一部です。組み込み Linux の分野では、GDB が一般的に使用されるデバッガです。
上記のツールは非常に不可欠ですが、これらが単独で動作すると、Linux ソース コードをコンパイルして最終イメージ (イメージ) に統合するのに時間がかかりすぎます。幸いなことに、Buildroot は完全な組み込みシステムを構築するプロセスを自動化し、次のタスクの一部またはすべてを生成することでクロスコンパイルを簡素化します。
#クロスコンパイルツールチェーン●ルートファイルシステム
●カーネルイメージ
#ブートイメージ
對嵌入式系統設計師來說,還可以方便地使用一種工具(utility)聚合工具,如BusyBox,這種工具將通常最需要的工具整合在一起。根據BusyBox的資訊頁面介紹,「它將許多常用UNIX工具的微型版本整合成一個小的可執行檔。它提供了對大多數你通常會在GNUfileutils和shellutils等工具中看到的工具的替代。BusyBox裡的工具通常比其全功能GNU對應版本的選擇少;但所包含選項所提供的預期功能和行為則與對應的GNU所提供的幾無差別。對任何小或嵌入式系統來說,BusyBox提供的環境都是相當完整的。」
最後一個重要工具是一款BSP,是為搭載了專案目標MCU或處理器的主機板專門做的。
BSP包含預先配置的工具,以及將作業系統載入到主機板的引導程式。它也為核心和裝置驅動器提供原始碼(見圖1)。
#典型的嵌入式Linux啟動順序執行如下:
1)引導程式韌體(範例專案裡的U-Boot)運行於目標MCU內建快閃記憶體(無需外部記憶體),並在上電/重設後,執行所有必需的初始化工作,包括設定串列埠和用於外部記憶體(RAM)存取的記憶體控制器。
2)U-Boot可將Linux映像從外部Flash轉移到外部RAM,並將控制交接到RAM中的核心入口點。可壓縮Linux映像檔以節省快閃記憶體空間,代價是在啟動時要付出解壓縮時間。
3)Linux進行開機並安裝基於RAM的檔案系統(initramfs)作為根檔案系統。在專案建置時,Initramfs被填入以所需的檔案和目錄,然後簡單地連結到核心。
4)在Linux核心下,執行/sbin/init。 /sbin/init程式依照/etc/inittab中設定檔的描述對系統進行初始化。
5)一旦初始化程序完成運行級執行和/sbin/init裡的命令,它會啟動一個登入程序。
6)殼初始化檔案/etc/profile的執行,標誌著啟動過程的完成。
透過啟用就地執行(ExecuteInPlace-XIP)可以大幅縮短啟動時間、提升整體效能,XIP是從快閃記憶體執行程式碼的方法。通常,Linux程式碼是從快閃記憶體載入到外部記憶體,然後從外部記憶體執行。透過從快閃記憶體執行,因不再需複製這一步,因此只需較少的記憶體,且只讀記憶體不再佔程式空間。
以上が組み込み Linux プロジェクト開発のいくつかの手順の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。