ソリューションのプロパティ (カーネルコンフィグレーション等)
SOLID-OSのソリューションについて、様々なプロパティを設定することで、 SOLID-OSの動作をコンフィグレーションすることが可能です。
ここでは、設定可能な各項目について説明します。
ソリューションのプロパティファイル
ソリューションのプロパティファイルは、基本的にソリューションファイル (.ptsln) と同じファイル名で、
拡張子が .props のものになります。
ソリューションのプロパティファイルの形式
ソリューションのプロパティファイルは、以下の形式のファイルです。"Property1" や "Property2" が プロパティの各項目で、"定義" が項目設定する値になります。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="UserMacros">
  <Property1> 定義 </Property1>
  <Property2> 定義 </Property2>
  . . . . .
</PropertyGroup>
<PropertyGroup>
  <BasicGCCSW>$(BasicGCCSW) ソリューション全体に適用する追加のコンパイルオプション</BasicGCCSW>
</PropertyGroup>
<ImportGroup>
  <Import Project="$(SOLIDRootDir)bsp\BSPプロパティファイル名.props" />
<Import Project="$(SOLIDRootDir)SOLID.Common.props" />
</ImportGroup>
</Project>
ソリューションのプロパティ一覧
注釈
凡例
M:必須, M*:特定条件で必須, O: オプション, X: 設定不可 or 設定しても無効
ソリューション全体に関するプロパティ
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| AppBinName | M | M | M | アプリケーション名 | アプリケーションの名前 | 
| SOLIDRootDir | M | M | M | SOLIDフォルダの ルートパス | SOLIDソースツリーのルートパスを 絶対パスで指定 | 
| SOLID_LOADABLE_APP | O | O | O | 0 (省略時) | 通常のアプリケーション | 
| 1 | ローダブルアプリケーション | ||||
基本動作に関するプロパティ
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| LibFloatingPoint | M | M | M | FPUとABIの設定 | |
| AArch64 | AArch64 CPU標準 abi=softfp (AArch64時のみ指定可) | ||||
| soft | FPU無し abi=soft (AArch32時のみ指定可) | ||||
| f3d16 | fpuv3-d16使用 abi=softfp (AArch32時のみ指定可) | ||||
| hard | fpuv3-d16使用 abi=hard (AArch32時のみ指定可) | ||||
| neon | neon使用 abi=softfp (AArch32時のみ指定可) 非推奨 | ||||
| neon-softfp | neon使用 abi=softfp (AArch32時のみ指定可) | ||||
| neon-hard | neon使用 abi=hard (AArch32時のみ指定可) | ||||
| SOLID_REQUIRES_GLOBALTICK | O | O | O | コア間でグローバルなカウンタ値を返すタイマーI/Fの有効/無効 | |
| true | 有効 | ||||
| false | 無効 設定不可 | ||||
| SOLID_USE_LPAE | O | O | O | ロングアドレス (AArch32時 40bit, AArch64時 48bit)の有効/無効 | |
| 1 | 有効 (AArch64 CPU では自動的に"1"を設定) | ||||
| 0 (省略時) | 無効 | ||||
| SOLID_SHARED_GIC | O | O | O | 他OSとのGICの共有 有/無 | |
| true | 有 (SOLID-OSが使用する割込みのみ制御) マルチOSで使用時は必須 | ||||
| false (省略時) | 無 (全割込みについてGICを制御) | ||||
| SOLID_GIC_CPUID_OFFSET | O | O | O | オフセット値 | GICでの Core0 と SOLID-OSのコアIDの オフセット値 マルチOS時にSOLID-OSの 起動コアが Core0 以外の場合指定 マルチクラスタCPUで GICv2使用時に必要 | 
| SOLID_BOOT_CPUID | O | O | O | CPU番号 | マルチOS時に SOLID-OSで使用するコアの先頭コア番号 | 
| SOLID_SMP | X | M | M | コア数 | SMP の SOLID-OS で使用するコア数 | 
| SOLID_TZ | O | O | O | RTOS実行時の Secure/Non-secure の設定 | |
| normal (省略時) | Normal world (Non-Secure) | ||||
| secure | Secure world | ||||
| SOLID_SUPPORT_RTOS_EVENT_CALLBACK | O | O | O | RTOSイベントコールバックの有効/無効 | |
| 1 | 有効 | ||||
| 0 (省略時) | 無効 | ||||
| SOLID_DISABLE_FIQ | O | O | O | FIQを SOLID-OSで使用 | |
| 1 | 使用 | ||||
| 0 (省略時) | 不使用 | ||||
| SOLID_NESTED_INHISR | O | O | O | 多重割込みの不許可の設定 | |
| 1 (省略時) | 使用 | ||||
| 0 | 不使用 | ||||
| SOLID_GIC_USE_ARE | O | O | O | GIC Affinityルーティングの利用設定 | |
| true | 利用する (GICv1, GICv2では設定不可) | ||||
| false (省略時) | 利用しない | ||||
| SOLID_DISABLE_FIQ | O | O | O | FIQを SOLID-OSで使用 | |
| 1 | 使用 | ||||
| 0 (省略時) | 不使用 | ||||
| QUSE_QEMU | O | O | O | QEMUで実行する | |
| 1 | QEMU使用 | ||||
| 0 (省略時) | QEMU不使用 | ||||
| SOLID_USE_MPU | O | X | X | MPUを使用する(Cortex-R以外は設定不可) | |
| 1 | 使用 | ||||
| 0 (省略時) | 不使用 | ||||
| SOLID_USE_TCM | O | X | X | TCMを使用する(Cortex-R以外は設定不可) | |
| 1 | 使用 | ||||
| 0 (省略時) | 不使用 | ||||
注釈
SOLID_GIC_CPUID_OFFSETとSOLID_BOOT_CPUIDの設定値に関して
SOLID_BOOT_CPUIDはSOLIDで使用する最初のCPUID(MPIDRで読める値)が0でない時に使用します。 SOLID_GIC_CPUID_OFFSETはGICv2でかつ、CPUIDとGICでのCPUIDが一致していない時に使用します。
例えば8コアでクラスタ0が4コア、クラスタ1が4コアの時に
- GICv2は
- クラスタ0CPUID0~3→GICのCPUID0~3 - クラスタ1CPUID0~3→GICのCPUID4~7 
というようにマップされています。 これを合わせるのが SOLID_GIC_CPUID_OFFSETです。
- GICv3は
- クラスタ0CPUID0~3→クラスタ0での GICのCPUID0~3 - クラスタ1CPUID0~3→クラスタ1での GICのCPUID0~3 
とCPUと同じ番号を使うようになったのでOFFSETは意識しなくてよくなりましたが、 その代わりに クラスタをまたぐ処理の際にSOLID_ARM_MULTICLUSTERを定義する 必要があります。
SOLIDの振る舞いに関するプロパティ
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| SOLID_USE_MONOBUILD | O | O | O | モノビルド使用の設定 | |
| 1 | モノビルドを使用する solid_cs を solid_bootの1セクションとして リンクする形式 | ||||
| 0 (省略時) | モノビルドを使用しない solid_cs と solid_boot を別のロード モジュールとしてリンクする形式 設定に際してはKMCにご相談ください | ||||
| SOLID_CORE_BOOTTEST | O | O | O | Coreサービスのテスト実行(通常は 0 を設定してください) | |
| 1 | 実行する | ||||
| 0 (省略時) | 実行しない | ||||
| SOLID_CORE_BOOTKERNEL | O | O | O | TOPPERSカーネルを起動する | |
| 1 (省略時) | 起動する | ||||
| 0 | 起動しない | ||||
| SOLID_BOOT_DEBUGGING_HOOK | O | O | O | SOLIDブート時にDEBUG_INIT_LOOPSで指定した回数の ビジーループを実行する | |
| 1 | ビジーループを実行する | ||||
| 0 (省略時) | ビジーループを実行しない | ||||
SOLID-OSの追加機能に関するプロパティ
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| SOLID_USE_FAT | O | O | O | SOLIDのFATドライバの使用設定 | |
| 1 (省略時) | 使用する | ||||
| 0 | 使用しない | ||||
| SOLID_USE_LWIP | O | O | O | lwIP TCP/IPプロトコルスタックの使用設定 | |
| 1 (省略時) | 使用する (Etherドライバが必要) | ||||
| 0 | 使用しない | ||||
| SOLID_SOCKETS | O | O | O | SOLID Socketsの使用設定 | |
| true | 使用する (Sockets実装が必要) | ||||
| false (省略時) | 使用しない | ||||
| SOLID_SOCKETS_LWIP | O | O | O | SOLID Sockets lwIP実装の使用設定 | |
| true | 使用する (lwIPが必要) | ||||
| false (省略時) | 使用しない | ||||
| LibEventTracker | O | O | O | イベントトラッカーの有効設定 | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| SOLID_MONITORDEBUG | O | O | O | モニターデバッガの使用設定 | |
| 1 | 有効 対応するための条件がありますので、 KMCにご相談ください | ||||
| 0 (省略時) | 無効 | ||||
| SOLID_NOUSE_SOLID_LDR | O | O | O | SOLIDインテリジェントローダーの不使用設定 | |
| 1 | ローダーを使用しない | ||||
| 0 (省略時) | ローダーを使用する | ||||
| SOLID_NOUSE_GENERIC_DMA_API | O | O | O | SOLID汎用DMA API の不使用設定 | |
| 1 | DMA API を使用しない | ||||
| 0 (省略時) | DMA API を使用する | ||||
| LibVLINK | O | O | O | PARTNERデバッガ の VLINK使用の設定 PARTNERデバッガ設定 ( | |
| true (省略時) | 有効 FMP/FMP3では要注意 (複数コアからの同時使用は非サポート) | ||||
| false | 無効 | ||||
| SOLID_NOUSE_SOLID_FS | O | O | O | SOLIDファイルシステム API の不使用設定 | |
| 1 | ファイルシステム API を使用しない | ||||
| 0 (省略時) | ファイルシステム API を使用する | ||||
| libXRayTrace | O | O | O | 関数トレース機能の有効設定 | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| SOLID_USE_RNG | O | O | O | 乱数発生器APIの有効化 | |
| 1 | 乱数発生器 API を使用する | ||||
| 0 (省略時) | 乱数発生器 API を使用しない | ||||
| SOLID_USE_PMU | O | O | O | PMU利用 API の有効化 | |
| 1 | PMU利用 API を使用する | ||||
| 0 (省略時) | PMU利用 API を使用しない | ||||
| LibTcsan | O | O | O | スレッドサニタイザの有効設定 | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
カーネル選択のプロパティ
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| SOLID_USE_TOPPERS_ASP3 | M | X | X | 1 | カーネルは TOPPERS/ASP3 | 
| SOLID_USE_TOPPERS_FMP | X | M | X | 1 | カーネルは TOPPERS/FMP | 
| SOLID_USE_TOPPERS_FMP3 | X | X | M | 1 | カーネルは TOPPERS/FMP3 | 
カーネルの振る舞いに関するプロパティ
| プロパティ名 | RTOS | 値 | 説明 | |||
|---|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | ||||
| LibMPLockMethod | X | M | M | SMP カーネルでのロックの実装方式 SOLID-OS では "giant" 以外の指定は不可 | ||
| giant | システム全体で1個のロックを使用する | |||||
| proc | プロセッサごとに、タスクロックと オブジェクトロックを使用する | |||||
| fine | プロセッサごとにタスクロック、 オブジェクトごとにオブジェクトロックを 使用する | |||||
| LibMPTimer | X | M | M | システムタイマーの実装方式 SOLID-OS では "local" の指定は不可 | ||
| global | システムで共通のカーネルティックタイマを 持つ | |||||
| global_handler_local | システムで共通のカーネルティクタイマを 持つが、タイマー系ハンドは各コアで実行 | |||||
| local | プロセッサ毎にカーネルティックタイマを 持つ | |||||
| LibMPSpinLock | X | M | M | スピンロックの実装方式 | ||
| hard | CPUが提供するアトミック命令を 直接呼び出す方式 | |||||
| soft | ソフトウェアによるエミュレーション方式 | |||||
| LibNoCheckFunctionAlignment | O | O | O | Thumb対応。関数のアラインメント例外の無効化 | ||
| true | 例外を発生させない | |||||
| false (省略時) | 例外を発生させる | |||||
カーネルの追加機能に関するプロパティ
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| LibDynamicCreate | O | O | O | 資源動的生成 API のサポート | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| LibExtendedPriority | O | O | O | 優先度拡張のサポート | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| LibMutexPriorityInheritance | O | O | O | 優先度継承 Mutex のサポート | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| LibSKXReadersWriterLock | X | O | O | Readers/Writer ロックAPI のサポート | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| LibSKXProcessorStat | X | O | X | タスクマイグレーション向け、プロセッサアイドル時間取得API | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| LibSKXSysManage | X | O | X | タスクマイグレーション向け、指定優先度以下の実行待ちタスクの 中から最も優先度及び優先順位が高いタスクのIDを取得するAPI | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
| LibMessageBuffer | O | O | X | MessageBufferのサポート | |
| true | 有り | ||||
| false (省略時) | 無し | ||||
| LibASP3MessageBuffer | O | O | X | MessageBufferのサポート | |
| true | 有り | ||||
| false (省略時) | 無し | ||||
| SOLID_EXTEND_REF_TSK | X | O | O | タスクスタック関連情報の取得を拡張したref_task()のサポート | |
| 1 | 有り | ||||
| 0 (省略時) | 無し | ||||
| SOLID_SUPPORT_EGET_TID | X | O | X | eget_tid() のサポート | |
| 1 | 有り | ||||
| 0 (省略時) | 無し | ||||
| SOLID_TLS_SUPPORT | O | O | O | TLS (Thread Local Strage) のサポート | |
| 1 | 有り | ||||
| 0 (省略時) | 無し | ||||
| SOLID_TLS_SIZE | O | O | O | サイズ | TLSのサイズ SOLID_TLS_SUPPORT=1 時のみ有効 | 
| SOLID_KERNEL_STRICT_STD_SPEC | X | X | O | CPU ロック中に発行可能なシステムコール拡張を無効にする | |
| 1 | 拡張を無効にする | ||||
| 0 (省略時) | 拡張を有効にする | ||||
ソリューション全体にかかるコンパイルオプション
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| LibDynamicCreate | O | O | O | 資源動的生成 API のサポート | |
| true | 有効 | ||||
| false (省略時) | 無効 | ||||
BSPのプロパティファイル
BSPのプロパティファイルは、基本的に solid-os/bsp/ 直下にあり BSP のフォルダ名と同じファイル名で、
拡張子が .props のものになります。
BSPのプロパティファイルの形式
BSPのプロパティファイルは、以下の形式のファイルです。"Property1" や "Property2" が プロパティの各項目で、"定義" が項目設定する値になります。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="UserMacros">
  <Property1> 定義 </Property1>
  <Property2> 定義 </Property2>
  . . . . .
</PropertyGroup>
<PropertyGroup>
  <Property3> 定義 </Property3>
  . . . . .
</PropertyGroup>
. . . . .
<ItemDefinitionGroup Condition="'$(SOLIDBootProject)'==''">
  <ClCompile>
    コンパイルに関連する item の定義
  </ClCompile>
  <Assemble>
    アセンブルに関連する item の定義
  </Assemble>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(SOLIDBootProject)'=='' AND '$(SOLID_LOADABLE_APP)'==''">
  <Link>
    リンクに関連する item の定義
  </Link>
</ItemDefinitionGroup>
</Project>
BSPで指定するプロパティ一覧
注釈
凡例
M:必須, M*:特定条件で必須, O: オプション, X: 設定不可 or 設定しても無効
CPU種別
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| LibEndian | M | M | M | エンディアン | |
| Little | リトルエンディアン | ||||
| Big | ビッグエンディアン | ||||
| LibCPU | M | M | M | CPUアーキテクチャ | |
| ARMV8A | ARMv8-AアーキテクチャCPU一般 | ||||
| Cortex-A72 | Cortex-A72 | ||||
| Cortex-A57 | Cortex-A57 | ||||
| Cortex-A55 | Cortex-A55 | ||||
| Cortex-A53 | Cortex-A53 | ||||
| Cortex-A35 | Cortex-A35 | ||||
| ARMV7A | ARMv7-AアーキテクチャCPU一般 | ||||
| Cortex-A9 | Cortex-A9 | ||||
| Cortex-A7 | Cortex-A7 | ||||
| Cortex-A5 | Cortex-A5 | ||||
| Cortex-A15 | Cortex-A15 | ||||
| Cortex-R7 | Cortex-R7 | ||||
| Cortex-R5 | Cortex-R5 | ||||
| Cortex-R4F | Cortex-R4F | ||||
| Cortex-R4 | Cortex-R4 | ||||
| LibCode | M | M | M | 生成するコードの種別 | |
| ARM | AArch32のコード生成 | ||||
| Thumb | Thumbのコード生成 | ||||
| AArch64 | AArch64のコード生成 | ||||
BSP ボード依存部の設定
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| _PropertySheetDisplayName | M | M | M | 文字列 | プロパティシートのタイトルに表示する名前 | 
| BSPName | M | M | M | 文字列 | BSPの名前 ( | 
| SOLID_USE_PSCI_SUPPORT | O | O | O | PSCI コール (セキュアモニタコール)のサポート | |
| true | サポート有り | ||||
| false (省略時) | サポート無し | ||||
BSP SOC依存部の設定
| プロパティ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| SOCName | M | M | M | 文字列 | SOCの名前 | 
その他のコンパイルオプション
注釈
凡例
M:必須, M*:特定条件で必須, O: オプション, X: 設定不可 or 設定しても無効
BOOT と COREサービス の両方に関するコンパイルオプション
| マクロ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| SOLID_ARM_MULTICLUSTER | X | O | O | 数字 | クラスタをまたがってSOLIDをSMPで使用する 場合に使用。1クラスタあたりのコア数を 指定します | 
| SOLID_SEPARATE_RWDATA | X | O | O | なし | .dataセクションが .text+.rodata に 連続しない領域に配置する場合 | 
BOOT に関するコンパイルオプション
| マクロ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| DEBUG_INIT_LOOPS | O | O | O | 数字 | 特定ターゲット向け SOLID_BOOT を起動する前のビジーループの ループ回数 | 
| SOLID_BOOT_USERMEMCPY | X | O | O | なし | SOLID_BOOT が使用する mem_cpy, mem_setを libcの代わりにユーザ定義の関数を使用する | 
| SOLID_BOOT_NOL2INV | O | O | O | なし | 初期化時にL2キャッシュの無効化を呼ばない. SOLIDの起動より前に他のシステム(ubootや Linux)が初期化をしている時に使用する。 | 
| SOLID_BOOT_FIXSP | X | O | O | なし | IMPL_BOOT_ELxxを呼び出す時にSPを各CPU毎に 設定する。 BOOTのメモリ使用量は増えますがSMP時の 起動時間が少し短縮されます | 
| SOLID_BOOT_KEEP_MMUON | O | O | O | なし | MMUON状態のまま起動する デフォルトはMMUオフ状態でSOLIDに突入する | 
| SOLID_NO_INVALID_COREID_CHECK | X | O | O | なし | 非SOLID-OSのコアが SOLID-OSのコードに突入 するのを回避するチェックを無効にする SOLID-OSからLinuxを起動する場合は定義必須 | 
| SOLID_PHYMAP_SIZE | M* | M* | M* | 数字 (単位MB) | AArch64時のみ有効: コード領域がReadOnlyのため普通はソフト ブレークが設定できないので、同じメモリを 書き込み可でマップするための領域(Linuxも 同様の領域を持っている) | 
| SOLID_ARM_TABLEWALK_CACHEON | O | O | O | なし | AArch64のみ有効: MMUテーブルへのアクセスをキャッシュON状態 で行う (デフォルトは キャッシュ OFF) | 
COREサービス に関するコンパイルオプション
| マクロ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| SOLID_SMP_IPI_INTNO | X | O | O | 数字 | SOLID-OSがマルチコア間の通信に使うSGI# SGIが8個しかサポートされないCPUでは必須 省略時は 15 を使います | 
| SOLID_CPPINIT_PARALLEL | X | O | O | なし | SMPカーネルで C++ のスタティックコンスト ラクターを複数コアで分散実行 クラス多数場合起動時間の短縮に有効 | 
| SOLID_TIMER_USE_PRESET_NSEC_PARAM | X | O | O | なし | SOLID_TIMER_WaitNsec() のパラメータを 起動時に計算せず、固定値を使用する 起動時間の短縮に有効 | 
| SOLID_TIMER_EACHCPU | X | O | X | なし | タイマー割込みを各コアで実行する 省略時はCPUIDが最小のコアで実行 | 
| SOLID_GIC_USE_FIQ | O | O | O | なし | FIQについてもGICの割込みチェックルーチン で処理する | 
| SOLID_EVENTTRACKER_IGNORE_SGI | X | O | O | なし | イベントトラッカーでSGIを記録しない SMPカーネル (FMP/FMP3) で有効 | 
| SOLID_EVENTTRACKER_IGNORE_PPI | X | O | X | なし | イベントトラッカーでPPIを記録しない ティックタイマー形式のカーネル(FMP)で有効 | 
TOPPERSカーネル に関するコンパイルオプション
| マクロ名 | RTOS | 値 | 説明 | ||
|---|---|---|---|---|---|
| ASP3 | FMP | FMP3 | |||
| SOLID_TOPPERS_ITSTATE_PATCH | M* | M* | M* | なし | AArch32時かつ Thumb時指定必須 SGI#0 を使用するので注意 |